条件编译

时间:2024-05-25 21:30:58编辑:莆田seo君

关于c语言条件编译的理解问题

举个例子: 机器分32位和64位,假设你的程序需要对这种情况区别对待,按照你的理解就需要两个版本,因为你是直接写出来的。而是用条件编译的好处就是,检测到是32的机器就编译32位的代码,64位的机器就编译你写的64位相关的代码。便于程序的灵活处理。。。这只是一种可能出现的情形,比如还有,如果前面的程序定义了A变量,那么我编译这段代码,没定义,就不编译。这都是条件编译的优点。


[create_time]2013-03-01 10:03:46[/create_time]2013-03-02 16:50:00[finished_time]2[reply_count]0[alue_good]zhanghan4310[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.58cc68f4.pL5JYvOESRUZLqTayggC4Q.jpg?time=3286&tieba_portrait_time=3286[avatar]TA获得超过628个赞[slogan]这个人很懒,什么都没留下![intro]572[view_count]

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

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


[create_time]2018-03-19 22:12:31[/create_time]2011-08-03 23:00:41[finished_time]1[reply_count]46[alue_good]ecitluo[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.8c60da4f.441sdSU8vDOUSj0sPGxX8w.jpg?time=3201&tieba_portrait_time=3201[avatar]TA获得超过757个赞[slogan]这个人很懒,什么都没留下![intro]5107[view_count]

C语言中的条件编译问题

简单点说,尖括号的意思是要包含的文件是系统的,会优先在系统的包含路径中去找,典型的像
。双引号的意思是用户自己的头文件,所以先在用户指定的目录中去找,然后再去系统的路径内去找,比如"my.h"。
默认的路径,用户的头文件默认放在与源文件相同的目录下,比如my.c所在的目录,或者系统的工程文件目录,这一点不同的系统可以会有不同的规定。而系统的头文件一般放在编译器的安装目录下,可能需要用编译系统规定的语法进行指定,比如 -I=C:\XXX\INCLUDE;这个语句一般在集成的编译环境中可以进行配置,如果配置不好,就可以会大量的出现某某头文件找不到的情况,当然,编译系统安装的时候,一般都会配置好的,很少需要用户特意进行配置。
结论,尖括号与双引号没有本质的区别,可以全部用双引号。如果是系统的头文件,用尖括号会稍微快一点。但对现在的计算机系统来说,快得这一点,很有限。


[create_time]2013-09-26 11:54:38[/create_time]2013-09-26 13:28:14[finished_time]6[reply_count]1[alue_good]linnjing[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.b46a43b.vbFN8eFQlW6yGA_V_zB6Jw.jpg?time=2808&tieba_portrait_time=2808[avatar]TA获得超过2612个赞[slogan]这个人很懒,什么都没留下![intro]390[view_count]

条件编译的介绍

一般情况下,源程序中所有的行都参加编译。但有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”(conditional compile)。条件编译语句排版时,需考虑以下三种位置:1)条件编译语句块与函数定义体之间不存在相互嵌套(主要在(.h)文件中);2)条件编译语句块嵌套在函数体之外(主要在(.c)文件中);3)条件编译语句嵌套在函数体内 (主要在(.c)文件中)。条件编译指令将决定哪些代码被编译,而哪些是不被编译的。可根据表达式的值或某个特定宏是否被定义来确定编译条件。

[create_time]2016-05-18 03:01:10[/create_time]2016-06-01 17:39:11[finished_time]1[reply_count]0[alue_good]莫邪8薎[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.d887f9e7.QqAMHHoUX2SWOUcUv_VdoA.jpg?time=3683&tieba_portrait_time=3683[avatar][slogan]这个人很懒,什么都没留下![intro]21[view_count]

# if是什么意思?

这是预编译指令#if 后面的参数为真(非0)则执行#if 后面的模块#if 后面的参数为假,则不执行#if 后面的模块此指令多用在调试的时候,有段代码自己不想删除,怕后面用到所以用#if 0来暂时注释掉,如果想用的话就用#if 1来开启;例如: 1、#if true执行#endif2、#if false跳过#endif扩展资料:#endif指在编译系统对文件进行编译---词法分析、语法分析、代码生成及优化之前,对一些特殊的编译语句先进行处理,然后将处理结果与源程序一起编译,生成目标文件。解析预编译处理语句都是以#开头,其结尾不带分号,与普通程序语句相区别。#endif用于结束条件编译,编译时与前面最近的#if、#ifdef或#ifndef作为一对,经常一起使用,编译两者之间的部分程序段。参考资料:百度百科——#endif百度百科——#if

[create_time]2023-07-29 23:23:13[/create_time]2023-08-13 19:18:46[finished_time]2[reply_count]0[alue_good]问明6E[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.7460b6fc.djm1yl0pl_cky00CpGygHw.jpg?time=4376&tieba_portrait_time=4376[avatar]每个回答都超有意思的[slogan]这个人很懒,什么都没留下![intro]431[view_count]

# if后面是什么意思啊?

这是预编译指令#if 后面的参数为真(非0)则执行#if 后面的模块#if 后面的参数为假,则不执行#if 后面的模块此指令多用在调试的时候,有段代码自己不想删除,怕后面用到所以用#if 0来暂时注释掉,如果想用的话就用#if 1来开启;例如: 1、#if true执行#endif2、#if false跳过#endif扩展资料:#endif指在编译系统对文件进行编译---词法分析、语法分析、代码生成及优化之前,对一些特殊的编译语句先进行处理,然后将处理结果与源程序一起编译,生成目标文件。解析预编译处理语句都是以#开头,其结尾不带分号,与普通程序语句相区别。#endif用于结束条件编译,编译时与前面最近的#if、#ifdef或#ifndef作为一对,经常一起使用,编译两者之间的部分程序段。参考资料:百度百科——#endif百度百科——#if

[create_time]2023-07-30 08:42:47[/create_time]2023-08-13 11:26:44[finished_time]1[reply_count]0[alue_good]问明6E[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.7460b6fc.djm1yl0pl_cky00CpGygHw.jpg?time=4376&tieba_portrait_time=4376[avatar]每个回答都超有意思的[slogan]这个人很懒,什么都没留下![intro]8[view_count]

为什么在头文件里面用条件编译呢?程序如下

#define指示接受一个名字并定义该名字为预处理器变量。#ifndef指示检测指定的预处理变量是否未定义。如果预处理器变量未定义,那么跟在其后的所有指示都被处理,直到出现#endif。可以用这些设施来预防多次包含同一头文件。你的例子是测试LCDHEARD宏是否被定义,如果未定义就定义那个宏,同时#include // 液晶驱动程序
#include //宏定义文件
为什么要避免头文件被重复包含?因为#include是直接将头文件的内容取代#include所在行,所以如果头文件重复包含的话,代码量将相当庞大,编译效率下降。


[create_time]2016-04-10 05:57:19[/create_time]2011-01-08 01:23:41[finished_time]4[reply_count]13[alue_good]dongyue2008[uname]https://himg.bdimg.com/sys/portrait/item/wise.1.7c9f41f0.UHw18JJuSJux2hzqHkNC0w.jpg?time=2815&tieba_portrait_time=2815[avatar]TA获得超过3592个赞[slogan]这个人很懒,什么都没留下![intro]2748[view_count]

上一篇:谁拿走了孩子的幸福

下一篇:死灵飞龙