我来自python背景,其中以下内容是有效的:
def f():
import someLibrary
someLibrary.libraryFunction()
因此,当我需要调试C代码时,我在函数中间写道:
void f(int param)
{
int status;
/* other code */
#include <stdio.h>
printf("status: %d", status);
/* more code */
}
它像我预期的那样编译和工作。后来有人向我指出,这是不应该编译的,因为C预处理器确实取代了#include~ statement with the contents of
stdio.h`。那么为什么这是有效的代码呢?
发布于 2019-05-29 03:30:26
是的,C和Python在这方面有很大的不同。
在编译之前,预处理器将#include
指令替换为所包含文件的内容是正确的。
它是否会导致编译错误完全取决于所包含文件的内容。像stdio.h
这样的标准头文件不包含任何可执行语句-它们只包含类型定义、函数声明、其他宏等内容。它们通常还具有某种#include
保护,以防止每个转换单元多次加载它们(即,如果您#include
包含stdio.h
的文件,然后直接在同一源文件中使用#include <stdio.h>
,则stdio.h
的内容将只加载一次)。
从理论上讲,在代码中的任意点包含stdio.h
没有问题,但这可能会导致问题。在这种情况下,stdio.h
的所有内容将只对f
的主体可见-如果只有f
需要使用stdio.h
中的任何内容,这不是问题,否则将导致令人头疼。
标准标头最好包含在源文件的开头。
https://stackoverflow.com/questions/56346814
复制相似问题