Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C define(预处理器指令)是从头文件继承的吗_C - Fatal编程技术网

C define(预处理器指令)是从头文件继承的吗

C define(预处理器指令)是从头文件继承的吗,c,C,如果我在头文件中有一些define,那么它在包含该头文件的源代码中是否可用? [类似于定义Bytef unsigned int]是的,您可以这样做。当您包含该头文件时,它将继承该头文件中的所有内容。因此您可以使用该宏。是。包含文件与将头文件的内容复制并粘贴到include指令的确切位置相同。是的,您可以这样做 a包括以下工作: 想象你有一个档案 header.h 内容: void HappyMakerPrototype(); void AnotherPrototype(); void d

如果我在头文件中有一些define,那么它在包含该头文件的源代码中是否可用?
[类似于定义Bytef unsigned int]

是的,您可以这样做。当您包含该头文件时,它将继承该头文件中的所有内容。因此您可以使用该宏。

是。包含文件与将头文件的内容复制并粘贴到include指令的确切位置相同。

是的,您可以这样做

a包括以下工作:

想象你有一个档案

header.h
内容:

 void HappyMakerPrototype();
 void AnotherPrototype();
void dummydec();
#include "header.h"

void main ()
{
    return;
}
和一个源文件

src.c
内容:

 void HappyMakerPrototype();
 void AnotherPrototype();
void dummydec();
#include "header.h"

void main ()
{
    return;
}
在编译的第一步中,它将运行预处理

在这里,include行被包含文件的所有内容替换

因此,如果您请求预处理文件的输出,它将如下所示:

在gcc和clang编译器中,您可以使用参数-E请求预处理文件,我想这将有助于您理解

void dummydec();
void HappyMakerPrototype();
void AnotherPrototype();

void main ()
{
    return;
}

这不是一个好问题。你为什么要问?你试过了吗?@SouravGhosh我在试着修复一个bug。在zlib中的一个变更日志中,我发现了带有define的变更typedef。所以我认为更改是定义的,因为我们需要在源代码中添加define。我试着用谷歌搜索,但是没有找到结果。所以我想我应该询问预处理器将用包含文件的内容替换包含指令。我建议你找个时间查看预处理的源代码。@DakshShah提示:试试gcc-E。希望它能帮助你更好地理解-@那ANSI c呢?谢谢你的否决票。你能公正地纠正我这是怎么回事吗?我很想提高我的知识和文章,这是错误的,在预处理器完成后,定义不会出现在输出中。所有预处理器指令都由预处理器处理。用gcc-E测试证实了这一点。@unwind。我说第一次跑步是为了更好地展示发生了什么。我从来没有说过它们会出现在输出中。我将澄清这一点。@unwind:第一次运行至少在概念上发生。C标准使用术语源文件、预处理翻译单元和解析的include,如图所示,在编辑和翻译单元之前,其他预处理步骤已经完成。@mafso是的,我知道,但是这个答案中最初的论点是,你可以看到预处理翻译单元使用了gcc-e,但事实并非如此。