#define的作用域是什麼?#define的範圍是什麼?
我有一個關於#define for C/C++的範圍的問題,我試着去了解預處理器。
假設我有一個包含多個源文件和頭文件的項目。比方說,我有一個具有以下的頭文件:
// header_file.h
#ifndef __HEADER_FILE
#define __HEADER_FILE
#define CONSTANT_1 1
#define CONSTANT_2 2
#endif
讓我們那麼說,我有被按以下順序編譯兩個源文件:
// source1.c
#include header_file.h
void funct1(void)
{
int var = CONSTANT_1;
}
// source2.c
#include header_file.h
void funct2(void)
{
int var = CONSTANT_2;
}
假設我已經包括所有其他必要開銷,這段代碼應該編譯好。不過,我很好奇在編譯過程中記住了什麼#defines。當我編譯上面的代碼時,實際包含了每個#include的內容,還是實際實現的包含警衛?
TLDR:是否將#define從一個編譯單元轉移到另一個編譯單元?或者#define只存在於一個編譯單元中?
當我輸入這個,我相信我回答我自己的問題,我會說出我相信的答案。 #define被限制爲一個編譯單元(.c)。預處理器在從一個編譯單元轉到下一個編譯單元時基本上會忘記任何#define。因此,在我列出的上述例子中,包含衛兵不會發揮作用。我在這個信念中糾正了嗎?
TL/DR:'#define'在每個編譯單元中從它向下定義的點直到'#undef'-ed都是可見的。 –
[C中#define預處理器的作用域]的可能重複(http://stackoverflow.com/questions/6379489/scope-of-define-preprocessor-in-c) –