我只是遵循了一個教程,其中涉及在程序中執行CPP宏來實現調試系統。宏的一個偉大的行爲是遞歸的,從而能夠把宏觀另一個宏裏面象下面這樣:C預處理器宏命令
#define MACRO1 "World"
#define MACRO2 printf("Hello %s\n",MACRO1);
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
MACRO2
return 0;
}
輸出:Hello World
下面也似乎工作:
#define MACRO2 printf("Hello %s\n",MACRO1);
#define MACRO1 "World"
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]){
MACRO2
return 0;
}
因此,爲了理解,CPP是否首先讀取所有#define X
以製作已聲明宏的列表,然後替換其他宏中的宏,避免預處理中的「雞和蛋」問題?
我認爲這是有道理的,考慮到預處理是一個只有一次的過程(編譯期間),不是實時發生的。因此,在代碼中定義宏的位置應該沒有關係,但實際上如果它是定義的。
有一個3000行代碼,只有在最後一行定義代碼中使用的宏將是有效的嗎?
預先感謝您!
C預處理程序可能有多少次通過?(http://stackoverflow.com/questions/13442028/how-many-passes-does-the-c-preprocessor-make) –