Ho un C++ file in questo modoin C++, cosa c'è di così speciale in "_MOVE_H"?
#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
E con mia grande sorpresa, tutto il codice tra #ifndef
e #endif
viene semplicemente ignorato dal compilatore (giuro che non sto definendo _MOVE_H
altrove), e ho tutti i tipi di errori sulle definizioni mancanti. Stavo pensando che ho fatto qualcosa di sbagliato, ma quando provo a usare un'altra chiave (come _MOVE_Ha
, tutto è tornato alla normalità _MOVE_H
significa qualcosa di speciale in C++?
Sto utilizzando Ubuntu 10.04, GCC 4.4.3 , se quello che conta
Grazie,
potrebbe essere uno dei file di libreria che stai utilizzando usando quello per la sua protezione di inclusione? l'hai controllato? btw, normalmente lo prefisso con il nome del progetto in modo da evitare esattamente questo tipo di problema. – Naveen
Un altro motivo per usare '#pragma once' invece di' # define' include guardie ... – Inverse
@Inverse, '#pragma once' è un'estensione del compilatore e non è supportata da tutti i compilatori. Includere le guardie sono gli unici mezzi indipendenti dal compilatore sicuro per prevenire l'inclusione multipla. –