我有一個例子代碼:在C中,如果使用undefined事物定義一個變量會發生什麼?
int var;
var = MACRO_A;
我預計MACRO_A
已經定義是這樣的:
#define MACRO_A 1234
不過,我可以不找到源代碼的任何地方所定義的MACRO_A
,但是我可以成功地構建代碼,那末var
的值是多少?
編譯器是gcc。
我有一個例子代碼:在C中,如果使用undefined事物定義一個變量會發生什麼?
int var;
var = MACRO_A;
我預計MACRO_A
已經定義是這樣的:
#define MACRO_A 1234
不過,我可以不找到源代碼的任何地方所定義的MACRO_A
,但是我可以成功地構建代碼,那末var
的值是多少?
編譯器是gcc。
該宏在編譯期間可能已通過-D
選項。
#include <stdio.h>
int main()
{
int i = MACRO_A;
printf("MACRO_A : %d \n", i);
return 0;
}
輸出:
$ gcc macro.c -D MACRO_A=10
$ ./a.out
MACRO_A : 10
$
通常,編譯器的「-DMACRO_A = 10」參數被隱藏在構建過程中,例如, 'Makefile'-s,'autoconf'等等,我推薦用'#ifdef'來檢查它,然後發出一個有意義的'#錯誤',否則... – 2012-04-26 19:39:30
但是,我無法找到源 代碼的任何地方所定義的MACRO_A,但我可以建立成功的代碼,那麼什麼是 變種末
值它的存在,某處或者它不會編譯。也許它是直接在命令行上定義的? (-DMACRO_A
)
使用'GCC -C -E由source.c> source.i'得到預處理的形式,看看裏面...... – 2012-04-26 18:22:46
@eepty如果你發現我的答案有用的,請隨時upvote並選擇我的帖子作爲答案。 – 2012-04-26 18:48:09
@cnicutar,@Sangeeth Saravanaraj,@Basile Starynkevitch我正在爲嵌入式設備編寫一個軟件,我正在Windows中使用Atmel Studio5 IDE,對不起,但我不知道如何檢查-D選項和'gcc -C -E source.c> source.i'。我試圖在IDE中讀取構建選項,但是我找不到這些選項... – eepty 2012-05-01 09:12:19