【C语言】预处理指令:#include #ifndef #define #endif

  • Post author:
  • Post category:其他



目录


一、头文件的引用 #include


1. 标准库的头文件


#include


2. 非标准库的头文件


#include “filename.h”


3. 嵌套文件包含


引用头文件时可能会出现嵌套文件包含的场景:


二、条件编译 #ifndef #define #endif


条件编译:根据条件判断是否编译语句。


1. 主要用来避免头文件的重复引入


2.其他条件编译指令


1.


2.多分支


3.判断是否定义


4.嵌套条件指令


一、头文件的引用 #include


1. 标准库的头文件


#include <filename.h>

此格式用来引用标准库的头文件,编译器将从标准库目录开始搜索


2.

非标准库的头文件

#include “filename.h”

此格式用来引用非标准库的头文件,编译器将从用户的工作目录开始搜索。

如果该头文件未找到,编译器就像查找库函数头文件一样在标准库目录搜索头文件。

(所以说对于库文件也可以使用” “引用,但这样搜索范围大,效率较低)


3. 嵌套文件包含

引用头文件时可能会出现嵌套文件包含的场景:

test.c 文件中引用了两次 comm.h,导致了头文件内容被重复引用。重复包含会增大程序大小,重复编译增加编译时间。

这时需要用

条件编译

解决此问题。

二、条件编译 #ifndef #define #endif

条件编译:根据条件判断是否编译语句。


1. 主要用来避免头文件的重复引入

//每个头文件开头这样写,即可避免重复引用
#ifndef __TEST_H__
#define __TEST_H__
...//头文件内容
#endif

#ifndef :如果未定义 __TEST_H__(与头文件名 test.h 对应),编译后续语句,否则放弃编译。

#define:进入编译,定义 __TEST_H__,若存在第二次引用该头文件,__TEST_H__ 已定义,则放弃此次编译。

#endif:和 #ifndef 配合使用,如果丢失#endif,可能会报错。

如此就避免了头文件的重复引用。

2.其他条件编译指令

1.


#if 常量表达式
...
#endif

2.多分支

#if 常量表达式
...
#elif 常量表达式
...
#else 常量表达式
...
#endif

3.判断是否定义

#if defined(symbol)
...
#endif

#ifdef symbol
...
#endif

#if !defined(symbol)
...
#endif

#ifndef symbol
...
#endif

4.嵌套条件指令

#if defined(OS_UNIX)
	#ifdef OPTION1
		unix_version_option1();
	#endif
	#ifdef OPTION2
		unix_version_option2();
	#endif
#elif defined(OS_MSDOS)
	#ifdef OPTION2
		msdos_version_option2();
	#endif
#endif



版权声明:本文为honortech原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。