首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在代码块中编写include语句有时是有效的?

为什么在代码块中编写include语句有时是有效的?
EN

Stack Overflow用户
提问于 2019-05-29 00:47:46
回答 1查看 39关注 0票数 1

我来自python背景,其中以下内容是有效的:

代码语言:javascript
复制
def f():
    import someLibrary
    someLibrary.libraryFunction()

因此,当我需要调试C代码时,我在函数中间写道:

代码语言:javascript
复制
void f(int param)
{
     int status;
     /* other code */
     #include <stdio.h>
     printf("status: %d", status);
     /* more code */
}

它像我预期的那样编译和工作。后来有人向我指出,这是不应该编译的,因为C预处理器确实取代了#include~ statement with the contents ofstdio.h`。那么为什么这是有效的代码呢?

EN

回答 1

Stack Overflow用户

发布于 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中的任何内容,这不是问题,否则将导致令人头疼。

标准标头最好包含在源文件的开头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56346814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档