导航:首页 > 源码编译 > 条件编译什么时候执行

条件编译什么时候执行

发布时间:2024-09-26 03:51:32

1. C++中if、#if与#ifdef、#ifndef彼此的区别

1、意义不同

#开头的都是预编译指令,就是在正式编译之前,编译器做一些预处理的工作
,所以说#if与#ifdef、#ifndef都是,而if是判断语句,不是预编译指令。

2、用法

if是条件语句,在运行的过程中根据条件的值选择执行不同的语句。

#if是条件编译语句,在编译阶段执行,如果后面跟的条件成立,就编译对应的语句。

#ifdef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏已经定义了,就编译对应的语句。

#ifndef是条件编译语句,在编译阶段执行,后面跟一个宏的名称,如果这个宏没有定义,就编译对应的语句。

(1)条件编译什么时候执行扩展阅读:

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之前的最后一个指令。

2. 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 故执行

所以 简单地讲,条件编译是根据 宏条件 选择性地编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时进行的。

3. c语言 #if 和if的区别

有区友如春别,#if 是预编译。#if如果不橡哪是真的好耐话, 其后面的代码是不会被编译的。跟#ifdef 差不多,只是#if后面跟的是条件,而 #ifdef后面跟的是一个宏,判断其是否定义。

4. 条件语句和条件编译有何区别

条件语句和条件编译的区别是:条件语句是语句,需要对所有分支的语句块进行编译,在程序运行后根据条件是否成立决定是否执行条件语句后的程序段。而条件编译是预处理命令,它是在预处理阶段就完成的,如果不符合条件,那个程序段就不会被编译。

5. 条件编译问题

一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
编译是在运行前执行的,比如说只是if else语句可能运行时 有些语句可能就没执行,但在编译阶段它们都经行了编译。
而像你上面的#if #else 则不同 #if NNN 就是指当NNN标示符已经定义过则对程序段statement1进行编译,而statement2和statement3则跳过了。
你可能会问:不用条件编译命令而直接用if语句也能达到要求,用条件编译命令有什么好处呢?的确,此问题完全可以不用条件编译处理,但那样做目标程序长(因为所有语句都编译),而采用条件编译,可以减少被编译的语句,从而减少目标的长度。当条件编译段比较多时,目标程序长度可以大大减少。

6. 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
用于条件编译结尾,表示条件编译结束。

7. #if与if什么区别啊

区别1:

#if是条件编译;if是条件语句。

区别2:

if是条件语句,#if是预处理指令,功能相同,执行的时期不同。

区别3:

if的作用是程序流控制,会直接编译、执行。

#if是对编译器的指令,其作用是告诉编译器,有些语句行希望在条件满足时才编译。

区别4:

#if作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去

if作用是可以构成分支结构,它根据给定的条件进行判断,以决定执行某个分支程序段。

阅读全文

与条件编译什么时候执行相关的资料

热点内容
java与嵌入式开发 浏览:20
minios如何搭建文件服务器 浏览:1000
华为为啥有些压缩包解压不开 浏览:563
oracle可以编译存储吗 浏览:475
机械男和女程序员创业 浏览:799
自己怎么制作软件app 浏览:214
javajson字符串转java对象 浏览:230
必修一数学PDF 浏览:775
javascriptphpjsp 浏览:811
深圳一程序员退房完整版 浏览:294
后台管理app哪个好 浏览:766
加密锁无模块什么意思 浏览:22
加密国度英文 浏览:20
科沃斯用了app怎么使用按键 浏览:663
爬虫编译器价格 浏览:885
支付宝视频app会员自动扣费怎么关 浏览:230
单片机和wifi模块 浏览:725
python倒序二进制代码 浏览:362
广东程序员离职 浏览:586
golang核心编程 浏览:170