2014-12-19 36 views
-3

如果头文件中有一些#define,它是否可用于包含该头文件的源代码? [类似于#define Bytef unsigned int]是否从头文件继承#define(预处理器指令)

+1

这不是个好问题。你为什么问?你试过了吗? – 2014-12-19 09:12:20

+0

@SouravGhosh我正在修复一个错误。在zlib的更新日志中,我发现使用define更改typedef。所以我认为改变是定义的,因为我们需要在源代码中添加“define”。我试图谷歌认为是继承定义,无法找到结果。所以我想我应该问 – 2014-12-19 09:14:04

+0

预处理器将用包含文件的内容替换'#include'指令。我建议你尝试一下查看预处理源。 – 2014-12-19 09:14:52

回答

1

是的,你可以做到这一点。包括作品如下:

想象你有一个文件。

header.h 

内容:

void HappyMakerPrototype(); 
void AnotherPrototype(); 

和源文件

src.c 

内容:

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

void main() 
{ 
    return; 
} 

在汇编它将通过预处理运行的第一步骤。

这里的include行只是被包含文件的所有内容所取代。

,这样,如果你需要一个输出预处理后的文件时,它看起来像:

(在GCC和铿锵编译器,你可以请求与参数-E预处理的文件我想,这将有助于你理解)

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

void main() 
{ 
    return; 
} 
+0

感谢downvote。你会如此公平和正确的我这有什么问题吗?我很想提高自己的知识和职位。 – dhein 2014-12-19 09:35:12

+0

这是错误的,预处理器完成后'#define's不会在输出中。所有预处理器指令都由预处理器处理。用'gcc -E'测试证实了这一点。 – unwind 2014-12-19 09:35:55

+0

@unwind。我说“在第一次运行”为了更好地展示发生了什么。我从来没有说他们会在输出。我会澄清这一点。 – dhein 2014-12-19 09:36:44

0

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

0

是的。包含一个文件与您在#include指令的确切位置复制并粘贴头文件的内容相同。