C语言中的头文件只是简单的复制粘贴。
C语言中变量、函数、结构体的定义和声明两个过程是分离的。声明通常放在头文件中,为了防止重复声明,需要保证头文件中的内容在构建obj文件时只被包含一次。这可以通过#ifndef
宏定义和#pragma once
两种方式实现。
#ifndef
宏定义的方式:
#ifndef SOME_UNIQUE_NAME_HERE
#define SOME_UNIQUE_NAME_HERE
// contents of the header
...
#endif // SOME_UNIQUE_NAME_HERE
#pragma once
的方式
#pragma once
// contents of the header
...
两种方式的优缺点:
#pragma once
兼容性差,有些编译器并不支持这个宏命令。宏定义的方式能得到更广泛的支持。- 宏定义方式更加灵活,使得用户可以灵活控制某段代码是否编译。
#pragma once
的方式只能控制整个代码文件只编译一次。#pragma once
的功能是宏定义功能的子集。 - 宏定义需要定义一个宏名,这个宏名一旦冲突,错误十分隐蔽。
#pragma once
语法更加简洁,可读性更好,而宏定义的方式需要写成三句话。