【问题标题】:In C, what happen if define a variable with undefined thing?在 C 中,如果用未定义的东西定义变量会发生什么?
【发布时间】:2012-04-26 18:20:05
【问题描述】:

我有一个这样的示例代码:

int var;
var = MACRO_A;

我希望MACRO_A 的定义如下:

#define MACRO_A    1234

但是,我可以找不到在源代码的任何地方定义的MACRO_A,但我可以成功构建代码,那么最后var的值是什么?

编译器是gcc。

【问题讨论】:

  • 使用gcc -C -E source.c > source.i得到预处理后的表格,看看里面...
  • @eepty 如果您觉得我的回答有用,请随时点赞并选择我的帖子作为答案。
  • @cnicutar , @Sangeeth Saravanaraj , @Basile Starynkevitch 我正在为嵌入式设备编写软件,并且我在 Windows 中使用 Atmel Studio5 IDE,抱歉,但我不知道如何检查-D 选项和gcc -C -E source.c > source.i。我尝试在 IDE 中读取构建选项,但找不到这些选项...

标签: c gcc macros c-preprocessor


【解决方案1】:

但是,我在源代码的任何地方都找不到定义的 MACRO_A 代码,但我可以成功构建代码,那么值是什么 var 结尾

它在某处,否则无法编译。也许它是直接在命令行上定义的? (-DMACRO_A)

【讨论】:

    【解决方案2】:

    该宏可以在编译期间使用-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 进行检查,并发出有意义的#error 否则...
    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多