在gcc命令行中,我想定义一个字符串-Dname=Mary
,然后在我要printf("%s", name);
打印的源代码中Mary
.
我怎么能这样做?
在汇编语言中,很容易定义一个类似的部分:
.section foo
Run Code Online (Sandbox Code Playgroud)
如何在C代码中完成?我想将一段C代码放在一个特殊的部分而不是.text
,所以我将能够将该部分放在链接描述文件的特殊位置.
我正在使用GCC.
我想定义一个像MACRO这样的函数.即
#define foo(x)\
#if x>32\
x\
#else\
(2*x)\
#endif
Run Code Online (Sandbox Code Playgroud)
那是,
if x>32, then foo(x) present x
else, foo(x) present (2*x)
Run Code Online (Sandbox Code Playgroud)
但我的海湾合作委员会抱怨:
int a = foo(31);
Run Code Online (Sandbox Code Playgroud)
我认为C预处理器应该正确处理.因为在编译时,它知道x=33
.它可以代替foo(33)
用(2*33)
我们知道.bss包含未初始化的变量.如果在c代码中,程序员在使用它们之前初始化变量.然后.bss在执行C代码之前不必为零.
我对吗?
谢谢
有一种方法可以#define
使用可变长度参数的宏吗?
#define CALL(ar1, ar2, ar3)
do something
#endif
Run Code Online (Sandbox Code Playgroud)
在C代码中
CALL(0);
CALL(0,1);
CALL(0,1,2)
Run Code Online (Sandbox Code Playgroud)
all调用上面的CALL宏.如果未使用ar2,ar3,则预处理器只会忽略ar2或ar3的行.