【发布时间】:2013-04-29 15:22:30
【问题描述】:
我在函数内部使用了#pragma 指令,没有错误或警告(尤其是#pragma pack())。但以下代码显示警告incompatible implicit declaration of built-in function 'printf'|:
int main(void)
{
printf("Trial");
}
#include<stdio.h>
此外,这是我的一本书的摘录。作者对 SO 的评价很差,尤其是他慷慨地使用了void main(),但我仍然觉得没有一个作者可以那么糟糕无故声称以下内容:
每个预处理器指令都以 # 开头 象征。指令可以放在程序中的任何位置,但 最常放置在程序的开头,在 第一个函数定义。
那么你能告诉我是否必须在程序顶部使用一些预处理器指令,如#include,而其他如#pragma 可以在程序中的任何位置使用?
编辑在OUAH的评论之后我尝试了以下,但它没有给出警告,它给出了一大堆错误 .LOL.
int main(void)
{
#include<stdio.h>
printf("Trial");
}
【问题讨论】:
-
#include用于标准头文件的指令只能包含在文件范围内——而不是函数内。 ISO/IEC 9899:2011 §7.1.2 标准标题,¶4 ... 如果使用,标题应包含在任何外部声明或定义之外,并且应首先包含在第一次引用它声明的任何函数或对象,或者它定义的任何类型或宏之前。 ...请注意,此限制仅适用于标准头文件;你可以编写自己的标题,可以放在任何地方(如果你小心的话)。 -
@JonathanLeffler 谢谢,有帮助。
标签: c include c-preprocessor pragma preprocessor-directive