Chr*_*ner 5 unix gcc conditional-compilation
我正在学习条件编译,我认为到目前为止我对它很了解.现在,如果我有代码:
 #ifdef UMP_TO_FILE
    //do something here...
 #endif
我跑:
 gcc myprogram.c -DUMP_TO_FILE
然后,代码块"//在这里做某事......"被编译.现在,我的问题是:
-DUMP_TO_FILE标志究竟是什么?
我认为标志是"-D"并且它定义了宏"UMP_TO_FILE",但是我想确定它的结构和"gcc --help"并没有告诉我任何关于这个的信息,也许我不知道如何在互联网上搜索这个!!
非常感谢您分享您的知识!
输出man gcc包含这个小片段:
-D名字
预定义
name为宏,定义为1.-D name = definition
定义的内容被标记化并处理,就像它们在
#define指令中的翻译阶段3中出现一样.特别是,定义将被嵌入的换行符截断.如果从shell或类似shell的程序调用预处理器,则可能需要使用shell的引用语法来保护字符,例如在shell语法中具有意义的空格.
如果您希望在命令行上定义类似函数的宏,请在等号(如果有)之前使用周围的括号写入其参数列表.括号对大多数shell都有意义,因此您需要引用该选项.随着
sh和csh,-D'name(args...)=definition'工作.
-D和-U选项按照在命令行上给出的顺序进行处理.所有-imacros文件和-include文件选项都在所有选项-D和-U选项之后处理.
因此,该选项-DUMP_TO_FILE相当于将行#define UMP_TO_FILE 1放在源代码中(存在细微的差异,但这里不需要覆盖它们).
顺便说一句,我认为这是一种相当糟糕的做法.作者正在执行欺骗,因此它看起来像编译器选项DUMP_TO_FILE而不是预处理器宏.这有点聪明,但它会给那些想知道UMP_TO_FILE实际意味着什么的人带来麻烦.
就个人而言,我宁愿看到-DDUMP_TO_FILE,#ifdef DUMP_TO_FILE因为它的意图更清晰.
-D UMP_TO_FILE
定义宏值 UMP_TO_FILE。就像在代码中添加以下行:
#define UMP_TO_FILE
如果定义了值 (UMP_TO_FILE),则 #ifdef 和 #endif 之间的代码行将被编译。否则不会。
| 归档时间: | 
 | 
| 查看次数: | 4188 次 | 
| 最近记录: |