Tôi có một C++ nộp như thế nàytrong C++, có gì đặc biệt về "_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
Và thật ngạc nhiên của tôi, tất cả các mã giữa #ifndef
và #endif
chỉ đơn giản là bỏ qua bởi trình biên dịch (Tôi thề rằng tôi không xác định _MOVE_H
bất cứ nơi nào khác), và tôi có tất cả các loại lỗi về định nghĩa thiếu. Tôi đã nghĩ rằng tôi đã làm điều gì sai, nhưng khi tôi cố gắng sử dụng một khóa khác (như _MOVE_Ha
, mọi thứ trở lại bình thường. _MOVE_H
có nghĩa là một cái gì đó đặc biệt trong C++?
Tôi đang chạy Ubuntu 10.04, GCC 4.4.3 , nếu có vấn đề
Cảm ơn,
có thể là một trong các tệp thư viện bạn đang sử dụng để bảo vệ không? bạn đã kiểm tra điều đó chưa btw, tôi thường tiền tố nó với tên dự án để tránh chính xác loại vấn đề này. – Naveen
Một lý do khác để sử dụng '#pragma once' thay vì' # define' bao gồm bảo vệ ... – Inverse
@Inverse, '#pragma once' là một phần mở rộng của trình biên dịch và không được hỗ trợ bởi tất cả các trình biên dịch. Bao gồm các vệ sĩ là trình biên dịch an toàn duy nhất có nghĩa là ngăn chặn nhiều sự bao gồm. –