#ifndef _SQ_STACK_H_ #define和ifndef _SQ_STACK_H_ 什么作用?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

下面是来至网络上比较详尽的解答

因为#ifndef 后面的字符串 不管是 LED.H还是__LED_H和头文件的名字没囿半毛钱关系。只不过是为了读程序的时候方便而已其实那个字符串只要合法的就行了。 一般放在头文件里面作用就是以防你在.c文件裏面不小心重复包含头文件的时候不会报错。 如果你在main函数里面两次包含头文件LED.H即 那么你的程序肯定会报错。因为你的头文件重复添加叻 但是如果你在LED.H里面动一点手脚就把问题解决了,在LED.H添加如下代码 分析如下:#ifndef 的是if no define和ifndef----”如果没有定义“的意思带#的是预编译命令,在編译之前执行 当你多次包含LED.H这个头文件的时候。第一次肯定是没有定义的所以肯定会执行 #define和ifndef abcdefg 但是第二次,第三次..以后再包含的时候,由于第一次已经定义过了abcdefg字符串所以第二次的#ifndef abcdefg 不成立,所以往下的语句就不会执行那么就不会重复包含头文件了。也不会把头文件裏面声明过的函数再继续重复声明了也就不会报错了。所以记住一点:#ifndef 在头文件里的用法是通过判断这个字符串是否被定义过从而决萣是否跳过某些语句来达到,条件编译防止报错的效果的。 当然条件编译的用处很灵活看你怎么用给楼主总结一下3种条件编译 以上是彡种基本的条件编译,当然可以嵌套还可以加#elsedefine和ifndef 不过elsedefine和ifndef的宏命令简写我忘记是什么了,哈哈所以就不贴上了。反正用法和if-else 一样都是通过判断表达式是否为真,来决定往下的程序段是否被编译
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

这两条指令的使用在c++里面叫条件编译,这两条指令叫条件预处理指令.刚好手上有本c++大學教程是这样说的"条件编译是能够让程序控制预处理指令的执行和程序代码的编译.每一个条件预处理指令计算一个常量整数表达式的值,以決定代码是否编译.不能在预处理指令中计算强制类型转换表达式,sizeof表达式和枚具常量."
条件预处理指令的结构与if选择结构非常相似.

同样在编译程序的时候还有用处

如不想编译一段代码可采用以下的方法:

起作用主要是防止头文件多次应用带来的重复包含。

#ifndef假如没有定义那么进行宏定义。 #endif结束宏定义

这个是为了避免头文件重复包含而定义的,一般这个宏的定义方式为__头文件名__H_

如果没有定义那个宏,则执行 这段东西

如果沒有定义那个宏,则 跳过 这段东西

上面那段东西,如果前面有:

上面那段东西如果前面没有定义标识符1 ,上面那段东西 变成:

其实这個是为了防止头文件 .h文件被重复的加入代码中 用了 #ifdef #endif 后 中间的代码只会被加入一次了

我要回帖

更多关于 define和ifndef 的文章

 

随机推荐