预处理器变量,在有的书中又叫预处理器常量,都是一个意思
假设定义一个预处理器常量SALESITEM_H,可以用如下方式来预防多次包含同一头文件:
#ifndef SALESITEM_H #define SALESITEM_H // Definition of Sales_itemclass and related functions goes here //.... //.. #endif条件指示
#ifndef SALESITEM_H测试 SALESITEM_H 预处理器变量是否未定义。如果 SALESITEM_H 未定义,那么#ifndef 测试成功,跟在#ifndef 后面的所有行都被执行,直到发现#endif。相反,如果SALESITEM_H 已定义,那么#ifndef 指示测试为假,该指示和#endif 指示间的代码都被忽略。
举个例子:
定义一个头文件
test_A.h
test_B.h
程序源文件为
main.c
如果头文件test_A.h中包含test_B.h,而在源文件中又包含头文件test_A.h和 test_B.h,这时你就会发现在源文件中test_B.h被包含了两次,一次是直接包含,一次是包含test_A.h时间接包含的,如果 test_B.h中有类的定义,这时就会发生重定义这样低级的错误。有些同学就有疑问了,你明明知道了test_B.h已经在test_A.h中包含过了为什么还要在源文件中再次包含test_B.h呢?这不是多此一举吗?我想告诉你的是当你的程序比较庞大时,你就不会这样想了,头文件多的让你头皮发麻,你压根就看不出来他们之间的包含关系。
顺便在说说 #include<test.h>和#include"test.h"的区别
#include<test.h>包含的头文件是标准库头文件,编译器会在设定好的路径搜索test.h头文件,系统头文件可能以文件方式保存,也可能以系统特有的其他格式保存。
#include"test.h"包含的头文件是自定义的头文件,编译器在包含该头文件的源文件所在的位置开始搜索,用户定义的头文件以文件方式保存。
原文地址:http://blog.csdn.net/u014041012/article/details/46056107