关于C语言中的#ifndef。。。endif 的用法,求高手详解
发布网友
发布时间:2022-05-13 21:00
我来回答
共3个回答
热心网友
时间:2023-10-28 04:30
#ifndef #endif 相当于括号括起的一段东西。
如果没有定义那个宏,则执行 这段东西。
如果没有定义那个宏,则 跳过 这段东西。
---------------
上面那段东西,如果前面有:
#define 标识符1
上面那段东西 变成:
else
{
}
------------
上面那段东西,如果前面没有定义标识符1 ,上面那段东西 变成:
程序段 1
else
{
程序段 2
else if{
程序段3 }
else {
程序段3
}
}
--------------------
#ifndef _STDIO_H_
#define _STDIO_H_
......
#endif
用于避免重复包含 stdio.h 例如:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
第一个 #include <stdio.h> 执行后 就有了 #define _STDIO_H_
遇到第2 个 #include <stdio.h> 它的第一行 有
#ifndef _STDIO_H_ 保护。 因为有了 #define _STDIO_H_ 不能通过,第二个 #include <stdio.h> 不会重复执行 。
热心网友
时间:2023-10-28 04:31
#ifndef假如没有定义,那么进行宏定义。 #endif结束宏定义。
这个是为了避免头文件重复包含而定义的,一般这个宏的定义方式为__头文件名__H_
比方说你#include进来一个stdio.h,再#include进来一个string.h。也许在string.h头文件里又include了stdio.h。这样你的程序中就include了两个stdio.h。定义了两个printf函数等等。
这就麻烦了,编译会出错不说,就算编译过了也是浪费资源
加了一个#ifndef _STDIO_H的话。在#include进来的string.h中如果再试图include一遍stdio.h的话,由于事先在第一个stdio.h中已经定义了_STDIO_H这个宏。所以不满足#ifndef _STDIO_H这个条件,就不会编译第二次了。
#define 后面不一定要加两个字符串。一个也行,加一个字符串如#define _STDIO_H , #define DEBUG 等等,一般在编译前用来做开关。控制编译部分。上面所说的头文件中是一个例子。再举一个查错的例子
#define DEBUG
...
...
#ifdef DEBUG
fprintf( stderr , "Debug Message\n " );
#endif
...
当你程序完成之后。可以把#define DEBUG一行用注释屏蔽掉。这样在编译的时候就不会把debug部分也编译进去了。
热心网友
时间:2023-10-28 04:31
其实这个是为了防止头文件 .h文件被重复的加入代码中 用了 #ifdef #endif 后 中间的代码只会被加入一次了
关于C语言中的#ifndef。。。endif 的用法,求高手详解
ifndef _STDIO_H_ 保护。 因为有了 #define _STDIO_H_ 不能通过,第二个 #include <stdio.h> 不会重复执行 。
c语言中的#ifndef,def,endif等宏是什么意思
1、这是条件编译的命令 ifndef def 语句1 else 语句2 endif 表示如果def在前面进行了宏定义那么就编译语句1(语句2不编译),否则编译语句2(语句1不编译)2、宏定义的格式如下:define 标识符 字符串 其中,#表示这是一条预处理命令;#define为宏定义命令;“标识符”为宏定义的宏名;“字符串...
ifndef define endif作用
ifndef、#define、#endif为C语言的3条预处理语句,主要用作条件编译。先介绍一下条件编译:一般情况下,源代码文件中的所有行都参加编译,但有时需要指定一部分代码在某个条件下才被编译,这就叫做条件编译。条件编译发生在预处理阶段,在C中,主要通过#if、#elif、#else、#ifdef、#ifndef、#endi...
【C/C++】ifndef/define/endif作用和用法
其基本用法如下:首先在头文件的开头添加一个`#ifndef`关键字,紧接着是文件名全大写,前后加上下划线,并用下划线替换点号。例如,文件名为`stdio.h`,则头文件开头应为`#ifndef STDIO_H`。接下来添加`#define STDIO_H`,这是定义标志,表明文件未被包含过。在文件内容之后,添加`#endif`关闭此定...
头文件中的 ifndef/define/endif 干什么用?
ifndef、#define、#endif为C语言的3条预处理语句,主要用作条件编译。先介绍一下条件编译:一般情况下,源代码文件中的所有行都参加编译,但有时需要指定一部分代码在某个条件下才被编译,这就叫做条件编译。条件编译发生在预处理阶段,在C中,主要通过#if、#elif、#else、#ifdef、#ifndef、#endif来...
c++ #ifndef,ifndef和#define,#endif?有何用
ifndef _HEAD_H //就是如果没有定义宏_HEAD_H define _HEAD_H //那么就定义宏_HEAD_H //添加你的头文件内容 endif //结束if 还有类似的#ifdef #undefine可以从字面意思理解。加上以上的宏是未了防止头文件被重复引用,当编译器第一次编译头文件的时候,会定义_HEAD_H,然后如果还有文件...
c语言中 #ifdef ... 和#endif 配套使用的方法 ?
比如头文件名为keyboard.h。通用的使用方法如下:ifndef _KEYBOARD_H define _KEYBOARD_H ……endif 通过这种方法,当第一次使用这个头文件的c文件,编译时,查看是否定义_KEYBOARD_H 第一次肯定没有,所以它就定义了头文件里面的相关宏以及变量。第二个使用这个头文件的C文件,编译时,一看_KEYBOARD_H...
#ifndef_#else_#endif是怎么执行的
ifndef AAA { int a;endif int b;int c;ifndef AAA } endif 如果预编译此代码之前出现过 define AAA 编译器这样编译:int b;int c;否则如果没有定义过AAA,即没出现过#define AAA,编译器这样编译:{ int a;int b;int c;} 具体是#define什么,自己随便啦。 记住预编译只看以#开头的那条,...
C语言当中的#ifdef DEBUG, #define ,#else,#endif等的意义
endif 它的功能是,如果标识符已被#define 命令定义过则对程序段1 进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else 可以没有,即可以写为:ifdef 标识符 程序段 endif 第二种形式:ifndef 标识符 程序段1 else 程序段2 endif 与第一种形式的区别是将“ifdef”改为...
c++ #ifndef,ifndef和#define,#endif?有何用
ifndef _HEAD_H //就是如果没有定义宏_HEAD_H define _HEAD_H //那么就定义宏_HEAD_H //添加你的头文件内容 endif //结束if 还有类似的#ifdef undefine可以从字面意思理解。加上以上的宏是未了防止头文件被重复引用,当编译器第一次编译头文件的时候,会定义_HEAD_H,然后如果还有文件引用了该...