Vij*_*jay 3 c compiler-construction
如果我有几个头文件:让说1.h,2.h,3.h.假设所有三个头文件都#include <stdlib.h>包含其中一个包含文件.当我必须在C文件中使用所有3个头文件时main.c,它将#include <stdlib.h>在预处理器之后有3个副本.编译器如何处理这种冲突?这是一个错误还是会产生任何开销?
如果没有头部防护,会发生什么?
大多数C头包含如下:
#ifndef FOO_H
#define FOO_H
/* Header contents here */
#endif
Run Code Online (Sandbox Code Playgroud)
第一次预处理器扫描它时,它将包含标头的内容,因为FOO_H未定义; 但是,它还定义了FOO_H防止第二次添加标题内容.
多次包含标头会对性能产生很小的影响:预处理器每次都必须转到磁盘并读取标头.这可以通过在C文件中添加保护来减轻,包括:
#ifndef FOO_H
#include <foo.h>
#endif
Run Code Online (Sandbox Code Playgroud)
这篇文章在大型C++软件设计(一本优秀的书)中有详细讨论.
这通常通过预处理器语句解决:
#ifndef __STDLIB_H
#include <stdlib.h>
#define __STDLIB_H
#endif
Run Code Online (Sandbox Code Playgroud)
虽然我从来没有看到过常见的头文件stdlib.h,所以它可能只是你自己的头文件所必需的.