有时候编写一些有趣的代码是恰当的,有时用goto语句编写一些不可读的代码或一些代码会很有趣;)
我想知道是否可以使用头文件替换您选择的某些单词#include "stdio.h"
?
如果我尝试这样做,我会收到像
这样的错误error: stray ‘#’ in program|
note: in expansion of macro ‘a’|
当我在头文件中尝试“#define a #include
”之类的内容时。
答案 0 :(得分:3)
我收到错误,如
错误:在程序中隐藏'#'|
注意:扩展宏'a'|
当我在头文件中尝试“#define a #include”时。
在执行任何宏扩展之前,在转换阶段4(C2011,6.10 / 2)的开始处识别预处理指令。因此,虽然您可以使用扩展a
定义宏#include
,但扩展不是预处理指令,也不是在那时(因为它不是行上的第一个令牌),也不是宏扩展时(因为那太晚了)。
因此,使用这样的宏会导致文本文本#include
出现在预处理器输出中,并且在普通#include
指令可以有效出现的任何位置都不是有效的C. p>
答案 1 :(得分:0)
没有办法替换你在c程序中包含头文件的方式,这是标准的一部分,除非你编写自己的编译器,你可以让它按你想要的那样工作。
答案 2 :(得分:0)
你是说这个吗?
//yams.c
int main()
{
#define STDIO_H <---without this define i still get yams!
printf("yams\n");
return 0;
}
# make yams
cc yams.c -o yams
yams.c: In function ‘main’:
yams.c:6:5: warning: incompatible implicit declaration of built-in function ‘printf’
printf("yams\n");
^
# ./yams
yams
#
我混淆= P
那么stdio是否需要不断包含/定义?或者编译器是否自动将其放入?
另一个使用scanf
//scanned_yams.c
int main()
{
int i;
scanf("%d",i);
}
# make scanned_yams
cc scanned_yams.c -o scanned_yams
scanned_yams.c: In function ‘main’:
scanned_yams.c:6:2: warning: incompatible implicit declaration of built-in function ‘scanf’
scanf("%d",i);
^
# ./scanned_yams
There is clearly something very wrong with me.
#