使用C

时间:2016-01-06 23:02:22

标签: c

有时候编写一些有趣的代码是恰当的,有时用goto语句编写一些不可读的代码或一些代码会很有趣;)

我想知道是否可以使用头文件替换您选择的某些单词#include "stdio.h"

如果我尝试这样做,我会收到像

这样的错误
error: stray ‘#’ in program|
note: in expansion of macro ‘a’|

当我在头文件中尝试“#define a #include”之类的内容时。

3 个答案:

答案 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.
#