#ifndef A_H #define A_H ... #endif B.h 和 C.h都include "A.h " D.h里 include "B.h " include "C.h " 在预编译的过程中,执行到include "C.h "时会因为在上一句的时候已经定义了A_H这个宏,所以此时的的 的ifndef条件不满足,也就不会再一次包含A.h,起到了防止重复引用头
结果就是:两个头文件实际上只定义一次宏__HEAD_H和全局变量global,所以编译的时候能正常通过。 三、实际应用中 比如STM32单片机编程的时候,main.c包含了两个外设头文件stm32f10x_gpio.h、stm32f10x_i2c.h,而这两个头文件又都包含了stm32f10x.h。在main.c的预编译过程中,显然stm32f10x.h要被包含两次。...
定义#ifndef时,宏名错误或者不一致。 #ifndef MY_HEADER_H #define ANOTHER_HEADER_H // code here #endif 复制代码 在同一个文件中重复定义#ifndef。 #ifndef MY_HEADER_H #define MY_HEADER_H // code here #ifndef MY_HEADER_H #define MY_HEADER_H // code here #endif 复制代码 在头文件中嵌套#...
如果没有包含头文件afxext.h,那么就include<afxext.h>,否则什么也不做 就是为了防止重复包含。如a.h包含afxext.h,b.h也包含afxext.h,当b.h需要包含a.h的时候,这句话就起作用了。如果没有定义 _afxext_h_包含<afxext.h>结束如果其实是一个条件包含语句
这是一个宏定义的判断语句 ifndef 意思就是“如果定义了H_STUDENT_HH”,就执行#ifndef 下面的语句 这个
@文心快码BaiduComatec++的h文件#ifndef 文心快码BaiduComateC++中的#ifndef预处理器指令 作用: #ifndef是C++中的一个预处理器指令,用于检查某个宏(macro)是否未定义。如果指定的宏未定义,则编译器会执行#ifndef和随后的#endif之间的代码。这通常用于防止头文件被重复包含,从而避免重复定义变量、函数原型等。 在头...
#ifndefA_H意思是"ifnotdefinea.h"如果不存在a.h 接着的语句应该#defineA_H就引入a.h 最后一句应该写#endif否则不需要引入 --- #ifndefGRAPHICS_H//防止graphics.h被重复引用 #defineGRAPHICS_H #include<math.h>//引用标准库的头文件 … #include“header.h”//引用非标准库的头文件 … voidFunction...
#include “LED.h” int main(void) { return 0; } 那么程序肯定会报错,因为你的头文件重复添加了。 但是如果LED.H里面动一点手脚就把问题解决了,在LED.H添加如下代码 #ifndef abcdefg #define abcdefg #include “stm32f10x.h” void led_init(void); ...
c中include了test1.h和test2.h,这是如果没有这个宏,显然test.c里预编译时会定义两次 变量a,因此会报错。但是只要在头文件开头处加上 ifndef TEST1_H //宏随便定义,一般为头文件的大写 define TEST1_H //马上定义这个宏 结尾处再加上 endif /*TEST1_H*/ 就能避免这种情况了 预...
其实“被重复引用”是指一个头文件在同一个cpp文件中被include了多次,这种错误常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此时b.cpp文件导入了#include "a.h" 和#include "c.h"此时就会造成c.h重复引用。 头文件被重复引用引起的后果: ...