① C++中if、#if与#ifdef、#ifndef彼此的区别
1、意义不同
#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作
,所以说#if与#ifdef、#ifndef都是,而if是判断语句,不是预编译指令。
2、用法
if是条件语句,在运行的过程中根据条件的值选择执行不同的语句。
#if是条件编译语句,在编译阶段执行,如果后面跟的条件成立,就编译对应的语句。
#ifdef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏已经定义了,就编译对应的语句。
#ifndef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏没有定义,就编译对应的语句。
C++中if、#if与#ifdef、#ifndef的具体使用方法
一、#ifdef 和 #ifndef 指令 (C/C++)
只要能够使用 #if,就可以使用 #ifdef 和 #ifndef 指令,在定义 identifier 时,#ifdef identifier 语句与 #if 1 等效,当 identifier 未定义或没有使用 #undef 指令进行定义时,该语句与 #if 0 等效。
这些指令只检查使用 #define 定义的标识符是否存在,而不检查在 C 或 C++ 源代码中声明的标识符。
提供这些指令只是为了实现与该语言的早期版本的兼容性。 优先选择将 defined( identifier ) 常量表达式与 #if 指令一起使用。
#ifndef 指令检查 #ifdef 所检查的条件的相反值。 如果尚未定义标识符(或已使用 #undef 移除其定义),则条件为 true(非零)。 否则,条件为 false (0)。
二、#if :
源文件中的每个#if指令必须与表示结束的 #endif指令匹配,任意数量的 #elif指令可以出现在 #if 和 #endif指令之间。
但最多允许一个 #else 指令,且 #else指令(如果有)必须是#endif之前的最后一个指令。
② 关于单片机中#if,#else if 的用法
#if............
#else if...........这是预处理语句。
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。在单片机中属于条件编译,也就是说当满足条件,就将#if后面的语句进行编译,否则,丢弃这些部分语句,编译#else if后面的语句。
③ c语言中,什么是条件编译
条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误
条件编译常用的有四个预处理命令:#if、#else、#elif、#endif。
#if指令的形式为:
#if 常量表达式
代码块
#endif
#if后面的常量表达式为值,则编译它与#endif之间的代码,否则跳过这些代码。指令#endif标识一个#if块的结束。
#else被使用来标志#if的末尾和#else块的开始。这是必须的,因为任何#if仅有一个#endif与之关联。
#elif意指"else if",它形成一个if else if嵌套语句用于多种编译选择。#elif后面跟一个常量表达式,如果表达式是真,则编译其后的代码块,不对其他#elif表达式进行检测,否则顺序测试下一块。常见的形式如下:
形式1:
#ifdef 标识符
/*程序段 1*/
#else
/*程序段 2*/
#endif
它的作用是当标识符已经由#define定义过了,则编译程序段1,否则编译程序段2,也可以使用简单形式
#ifdef 标识符
/*程序段1*/
#endif
形式2:
#ifndef 标识符
#define 标识符
/*程序段 1*/
#else
/*程序段 2*/
#endif
它的作用是当标识符没有由#define定义过,则编译程序段1,否则编译程序段2 ,也可以使用简单形式
#ifndef 标识符
#define 标识符
/*程序段 1*/
# endif
形式3:
#if 表达式
/*程序段 1*/
#else
*程序段 2*/
# endif
它的作用是 当“表达式”值为真时编译程序段1。否则则编译程序段2,也可以使用简单形式
# if 表达式
/*程序段 1*/
# endif
形式4:
#if 表达式1
/*程序段 1*/
#elif 表达式2
/*程序段 2*/
............
#elif 表达式n
/*程序段n */
#endif
它的作用是当“表达式1”值为1时编译程序段1,表达式2的值为真是编译程序段2,否则依次顺序判断到表达式n。
最后,条件编译的条件是一个常量表达式,支持逻辑与&&和或||运算。以上四种形式的条件编译预处理结构都可以嵌套使用,
标识符: 在理论上来说可以是自由命名的,但每个头文件的这个标识符都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h。
#ifndef _STDIO_H_
#define _STDIO_H_
/*程序段 */
#endif
④ C语言中#if #else 有什么作用
#if是个预编译指令的田间编译指令
可以使用条件编译选择特定的代码节进行编译,而排除其他代码节。例如,可能需要编写调试语句来比较同一编程任务的不同方法的速度,或者可能需要本地化用于多种语言的应用程序。条件编译语句被设计为在编译时(而不是在运行时)运行。
一般在C++里面有的,#if这类东西通场会放到程序开头,方便经常调用的函数,,变量,标示等等,放在函数里面他就在函数里面起作用,在函数外面,计算机就不认识他了,呵呵。,。
他们是程序编译的时,控制器好分配资源,通常我们用的是#ifdef 查看前面或是别人如果定义了一个宏 定义了,,那就跳过,,没定义#ifndef 那么then #def 定义 用#endif是搭配#if 是结束这些宏定义语句用的
有#是预编译的代码;
没有#号就是普通的if语句,
⑤ #if与if什么区别啊
区别1:
#if是条件编译;if是条件语句。
区别2:
if是条件语句,#if是预处理指令,功能相同,执行的时期不同。
区别3:
if的作用是程序流控制,会直接编译、执行。
#if是对编译器的指令,其作用是告诉编译器,有些语句行希望在条件满足时才编译。
区别4:
#if作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去
if作用是可以构成分支结构,它根据给定的条件进行判断,以决定执行某个分支程序段。
⑥ C语言中条件编译的作用
条件编译属于三种宏定义中的一种,条件指示符的最主要目的是防止头文件的重复包含和编译,例如:一个c文件包含同一个h文件多次,如果不加#ifndef宏定义,会出现变量重复定义的错误
条件编译常用的有四个预处理命令:#if、#else、#elif、#endif。
#if指令的形式为:
#if常量表达式
代码块
#endif
#if后面的常量表达式为值,则编译它与#endif之间的代码,否则跳过这些代码。指令#endif标识一个#if块的结束。
#else被使用来标志#if的末尾和#else块的开始。这是必须的,因为任何#if仅有一个#endif与之关联。
#elif意指"else if",它形成一个if else if嵌套语句用于多种编译选择。#elif后面跟一个常量表达式,如果表达式是真,则编译其后的代码块,不对其他#elif表达式进行检测,否则顺序测试下一块。常见的形式如下:
形式1:
#ifdef标识符
/*程序段1*/
#else
/*程序段2*/
#endif
它的作用是当标识符已经由#define定义过了,则编译程序段1,否则编译程序段2,也可以使用简单形式
#ifdef标识符
/*程序段1*/
#endif
形式2:
#ifndef标识符
#define标识符
/*程序段1*/
#else
/*程序段2*/
#endif
它的作用是当标识符没有由#define定义过,则编译程序段1,否则编译程序段2 ,也可以使用简单形式
#ifndef标识符
#define标识符
/*程序段1*/
#endif
形式3:
#if表达式
/*程序段1*/
#else
*程序段2*/
#endif
它的作用是 当“表达式”值为真时编译程序段1。否则则编译程序段2,也可以使用简单形式
#if表达式
/*程序段1*/
#endif
形式4:
#if表达式1
/*程序段1*/
#elif表达式2
/*程序段2*/
............
#elif表达式n
/*程序段n*/
#endif
它的作用是当“表达式1”值为1时编译程序段1,表达式2的值为真是编译程序段2,否则依次顺序判断到表达式n。
最后,条件编译的条件是一个常量表达式,支持逻辑与&&和或||运算。以上四种形式的条件编译预处理结构都可以嵌套使用,
标识符: 在理论上来说可以是自由命名的,但每个头文件的这个标识符都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h。
#ifndef_STDIO_H_
#define_STDIO_H_
/*程序段*/
#endif
⑦ C语言中条件编译和If语句之间的差别,各适用于什么情况
条件编译是C语言中预处理部分的内容,它是编译器编译代码时最先处理的部分,
条件编译里面有判断语句,比如 #if 、#else 、#elif 及 #endif
它的意思是如果宏条件符合,编译器就编译这段代码,否则,编译器就忽略这段代码而不编译,如
#define A 0 //把A定义为0
#if (A > 1)
printf("A > 1"); //编译器没有编译该语句,该语句不生成汇编代码
#elif (A == 1)
printf("A == 1"); //编译器没有编译该语句,该语句不生成汇编代码
#else
printf("A < 1"); //编译器编译了这段代码,且生成了汇编代码,执行该语句
#endif
而 if 语句则不然,if 是 C 语言中的关键字,它根据表达式的计算结果来觉定执行那个语句,它里面的每个分支都编译了的, 如
#define A 0
if (A > 1)
printf("A > 1"); //编译器编译该语句,但因为A == 0 未执行
else if(A == 1)
printf("A == 1"); //编译器编译该语句,但因为A == 0 未执行
else
printf("A < 1"); //编译器编译该语句,因为A == 0 故执行
所以 简单地讲,条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。
⑧ C++ if()是不是条件编译指令
if()属于判断语句,不是条件编译指令。
与if类似的条件编译指令为#if和#ifdef。
条件编译指令属于预编译语句,即编译器在执行编译工作时,会第一步处理预编译语句,之后再进行剩余的编译工作。
在C语言中,所有的预编译语句都是以#开头的,如#define, #undef,#if等等。
条件编译指令包括以下几项:
1 #if
当后续的参数为真时执行编译。
2 #ifdef/#ifndef
#ifdef当后续的宏定义被定义时执行编译。
#ifndef当后续的宏定义没有被定义时执行编译。
3 #elif
与C语言语句中的else if类似,与#if或#ifdef连用,当后续参数为真时执行编译。
4 #endif
用于条件编译结尾,表示条件编译结束。