2010-07-27 18 views
6

I (ben başka bir yerde _MOVE_H tanımlayan değilim yemin) #ifndef ve #endif arasındaki tüm kod basitçe derleyici tarafından göz ardı edilir, bir C bu, "_MOVE_H" ile ilgili çok özel nedir?

#ifndef _MOVE_H 
#define _MOVE_H 

class Move { 
    int x, y; 
public: 
    Move(int initX = 0, int initY = 0) : x(initX), y(initY) {} 
    int getX() { return x; } 
    void setX(int newX) { x = newX; } 
    int getY() { return y; } 
    void setY(int newY) { y = newY; } 
}; 

#endif 

gibi Ve benim hayretle dosyasını ++ var ve ben var Eksik tanımlar ile ilgili her türlü hata. Ben yanlış bir şey yaptığını düşünüyordum, ama başka bir anahtar kullanmaya çalıştığınızda (_MOVE_Ha gibi, her şey normale döndü. _MOVE_H C özel bir anlamı var mı ++?

Ben Ubuntu 10.04, GCC 4.4.3 koşuyorum , eğer bu konularda

sayesinde

+1

, içerme koruması için kullanmakta olduğunuz kitaplık dosyalarından biri olabilir miyim? Bunu kontrol ettin mi? btw, ben genellikle bu tür bir sorunu önlemek için proje adı ile öneki. – Naveen

+0

'# define' yerine' #pragma once 'işlevini kullanmanın bir başka nedeni de korumaları içerir ... – Inverse

+4

@Inverse, '#pragma once' derleyici uzantısıdır ve tüm derleyiciler tarafından desteklenmez. Muhafızları dahil etmek, birden fazla dahil edilmesini önleyen tek güvenli derleyici bağımsız aracıdır. –

cevap

15

sadece grep _MOVE_H çalıştırmak _ veya __. İç kullanım için ayrılmıştır. SOMETHING_MOVE_H'u kullanın (genellikle şirketin adı, ...).

Sanırım bu, C++ 0x için semantic hareketini eklemek için kullanılan yeni bir başlık.

+12

Alt çizgi kuralını açıklığa kavuşturmak için aşağıdaki şeyler ayrılmıştır: '* 'ile öntanımlı herhangi bir * global * ad,' __' ile öntanımlı herhangi bir ad ve herhangi bir ad '_' ile önceden yazılmış ve büyük harfle başlayan herhangi bir sıralama. OP, birinci ve üçüncü kuralların bir sonucudur. –

+6

'__ 'içeren herhangi bir isim saklıdır. Önceden yapılmasına gerek yok. –

0

bir kez daha eklenmesini aynı başlık dosyasını engellemek için bir numara gerçek değeri #define önemli değil -.. yalnızca bu başlıkta tanımlı oluyor müddetçe dosya, kongre

numaralı NAME_HEADER_FILE_H numaralı makaleye de bakmaktadır. #pragma once

+2

Üzgünüm, bu gerçekten sorun değil. Sorun şu ki, dosyam hiç eklenmiyor. – phunehehe

+0

Üzgünüz, Q'yi yeterince ayrıntılı okumamıştır. –

5

Bir altçizgi ile başlayan herhangi bir şey, o zaman büyük harf uygulamaya ayrılmıştır. (ör. _M). Genel olarak, önde gelen alt çizgilerden uzak kalmak istediğinizi düşünüyorum. Genel bir kural olarak

c++/4.5.0/bits/move.h:#ifndef _MOVE_H 

, şeyler kullanmayın (gerçekten bir şey) öneki:/usr// C++ benim için makinenize

üzerine içerir içinde

4

Gcc'nin, sentinel _MOVE_H'yi içeren move.h adlı bir dosya dosyasına sahip olduğunu düşünüyorum. Muhtemelen bununla çarpıştın. Alt çizgi ile başlamayan, tercihen farklı bir tanımlayıcı kullanın. Benim bir GUID koydu, ama ben gerçekten gerçekten

+0

Guid için destek! LOL! –

İlgili konular