2012-04-26 22 views
1

我有一個例子代碼:在C中,如果使用undefined事物定義一個變量會發生什麼?

int var; 
var = MACRO_A; 

我預計MACRO_A已經定義是這樣的:

#define MACRO_A 1234 

不過,我可以找到源代碼的任何地方所定義的MACRO_A ,但是我可以成功地構建代碼,那末var的值是多少?

編譯器是gcc。

+2

使用'GCC -C -E由source.c> source.i'得到預處理的形式,看看裏面...... – 2012-04-26 18:22:46

+0

@eepty如果你發現我的答案有用的,請隨時upvote並選擇我的帖子作爲答案。 – 2012-04-26 18:48:09

+0

@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

回答

1

該宏在編譯期間可能已通過-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 
$ 
+0

通常,編譯器的「-DMACRO_A = 10」參數被隱藏在構建過程中,例如, 'Makefile'-s,'autoconf'等等,我推薦用'#ifdef'來檢查它,然後發出一個有意義的'#錯誤',否則... – 2012-04-26 19:39:30

2

但是,我無法找到源 代碼的任何地方所定義的MACRO_A,但我可以建立成功的代碼,那麼什麼是 變種末

值它的存在,某處或者它不會編譯。也許它是直接在命令行上定義的? (-DMACRO_A

相關問題