首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcc条件编译

gcc条件编译
EN

Stack Overflow用户
提问于 2011-06-14 09:42:44
回答 3查看 5.1K关注 0票数 7

我正在学习条件编译,我认为到目前为止我对它理解得很好。现在,如果我有代码:

代码语言:javascript
复制
 #ifdef UMP_TO_FILE
    //do something here...
 #endif

然后我跑起来:

代码语言:javascript
复制
 gcc myprogram.c -DUMP_TO_FILE

然后,代码块“//在这里做点什么...”被编译。现在,我的问题是:

-DUMP_TO_FILE标志到底是做什么的?

我认为这个标志是"-D“,它定义了宏"UMP_TO_FILE",但我想确定语法,"gcc --帮助”没有告诉我任何关于这方面的信息,也许我不知道如何在互联网上搜索这个!!

非常感谢您分享您的知识!

EN

回答 3

Stack Overflow用户

发布于 2011-06-14 09:54:06

man gcc的输出包含以下小片段:

-D name

name预定义为宏,定义为1。

-D name=definition

definition的内容被标记化并被处理,就好像它们出现在#define指令的转换阶段3中一样。特别是,定义将被嵌入的换行符截断。

如果从shell或类似shell的程序调用预处理器,则可能需要使用shell的引号语法来保护在shell语法中有意义的字符,如空格。

如果您希望在命令行上定义一个类似函数的宏,请在等号(如果有)之前将其参数列表用括号括起来。括号对大多数shell都有意义,因此您需要将该选项引起来。使用shcsh-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,因为它们的意图要清晰得多。

票数 9
EN

Stack Overflow用户

发布于 2011-06-14 09:49:28

代码语言:javascript
复制
-D UMP_TO_FILE

定义宏值UMP_TO_FILE。这就像在你的代码中放入下面这行:

代码语言:javascript
复制
#define UMP_TO_FILE

如果定义了值(UMP_TO_FILE),将编译#ifdef和#endif之间的代码行。否则就不会了。

票数 3
EN

Stack Overflow用户

发布于 2011-06-14 09:51:53

-d定义了一个符号。我相信大多数编译器也会允许为symbol赋值,就像-dfoo=bar将bar赋值给foo symbol一样。

来自http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options

-D名称将名称预定义为宏,定义为1。

-D name=definition定义的内容被标记化和处理,就好像它们出现在`#define指令的翻译阶段3中一样。特别是,定义将被嵌入的换行符截断。如果从shell或类似shell的程序调用预处理器,则可能需要使用shell的引号语法来保护在shell语法中有意义的字符,如空格。

如果您希望在命令行上定义一个类似函数的宏,请在等号(如果有)之前将其参数列表用括号括起来。括号对大多数shell都有意义,因此您需要将该选项引起来。使用sh和csh,-D‘’name(args...)=definition‘起作用。

-D和-U选项的处理顺序与它们在命令行中给出的顺序相同。所有-imacros文件和-include文件选项在处理所有-D和-U选项之后进行处理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6338244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档