条件编译C语言中条件编译有哪几种形式?

条件编译  时间:2021-08-25  阅读:()

C++中这个条件编译哪里用错了?

这种情况下也用条件编译? 条件编译——根据指定的条件有选择的编译代码块的相应部分 #if a>=65&&a<=90 a+=32; cout<<"转换成小写字母为:"<<a<<"."<<endl; #else a-=32; cout<<"转换成大写字母为:"<<a<<"."<<endl; #endif 默认编译的应该是: a-=32; cout<<"转换成大写字母为:"<<a<<"."<<endl; 程序运行的时候已经编译好了,所以不论你输入什么字母都按编译好的程序执行,也就是执行 a-=32; cout<<"转换成大写字母为:"<<a<<"."<<endl; 明白? ---------------------------------- char a; // cout<<"请输入一个字母:"<<endl; // cin>>a; bool bl = (a>=65&&a<=90); cout<<" ------"<<a<<"="<<(int)a<<"---"<<bl<<"---"<<endl; 编译的时候a还没有值,我用VC6.0编译运行的结果是?,asc码值=56,也就是bl(上面的条件编译标识)为FALSE,当然执行后面的了 当然编译器不同,编译运行的结果也不同,有很大的不确定性,这也是条件编译开关很少用变量的原因。

条件编译有哪几种形式?

展开全部 #if NNN   statement1;   #elif MMM   statement2;   #else   statement3;   #endif /view/1995627.htm

C语言中条件编译有哪几种形式?

预处理程序提供了条件编译的功能。

可以按不同的条件去编译 不同的程序部分,因而产生不同的目标代码文件。

这对于程序的移 植和调试是很有用的。

条件编译有三种形式,下面分别介绍: 1. 第一种形式: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的功能是,如果标识符已被 #define命令定义过则对程序段1 进行编译;否则对程序段2进行编译。

如果没有程序段2(它为空),本格式中的#else可以没有, 即可 以写为: #ifdef 标识符 程序段 #endif #define NUM ok main(){ struct stu { int num; char *name; char sex; float score; } *ps; ps=(struct stu*)malloc(sizeof(struct stu)); ps->num=102; ps->name="Zhang ping"; ps->sex='M'; ps->score=62.5; #ifdef NUM printf("Number=%d Score=%f ",ps->num,ps->score); #else printf("Name=%s Sex=%c ",ps->name,ps->sex); #endif free(ps); } 由于在程序的第16行插入了条件编译预处理命令, 因此要根据 NUM是否被定义过来决定编译那一个printf语句。

而在程序的第一行 已对NUM作过宏定义,因此应对第一个printf语句作编译故运行结果 是输出了学号和成绩。

在程序的第一行宏定义中,定义NUM表示字符串OK,其实也可以 为任何字符串,甚至不给出任何字符串,写为: #define NUM 也具有同样的意义。

只有取消程序的第一行才会去编译第二个 printf语句。

读者可上机试作。

2. 第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif 与第一种形式的区别是将“ifdef”改为“ifndef”。

它的功能 是,如果标识符未被#define命令定义过则对程序段1进行编译, 否 则对程序段2进行编译。

这与第一种形式的功能正相反。

3. 第三种形式: #if 常量表达式 程序段1 #else 程序段2 #endif 它的功能是,如常量表达式的值为真(非0),则对程序段1 进行 编译,否则对程序段2进行编译。

因此可以使程序在不同条件下,完 成不同的功能。

#define R 1 main(){ float c,r,s; printf ("input a number: "); scanf("%f",&c); #if R r=3.14159*c*c; printf("area of round is: %f ",r); #else s=c*c; printf("area of square is: %f ",s); #endif } 本例中采用了第三种形式的条件编译。

在程序第一行宏定义中, 定义R为1,因此在条件编译时,常量表达式的值为真, 故计算并输 出圆面积。

上面介绍的条件编译当然也可以用条件语句来实现。

但是用条 件语句将会对整个源程序进行编译,生成的目标代码程序很长, 而 采用条件编译,则根据条件只编译其中的程序段1或程序段2, 生成 的目标程序较短。

如果条件选择的程序段很长, 采用条件编译的方 法是十分必要的。

☆本章小结☆ 1. 预处理功能是C语言特有的功能,它是在对源程序正式编译前由 预处理程序完成的。

程序员在程序中用预处理命令来调用这些功 能。

2. 宏定义是用一个标识符来表示一个字符串,这个字符串可以是常 量、变量或表达式。

在宏调用中将用该字符串代换宏名。

3. 宏定义可以带有参数,宏调用时是以实参代换形参。

而不是“值 传送”。

4. 为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符 串中出现的形式参数两边也应加括号。

5. 文件包含是预处理的一个重要功能,它可用来把多个源文件连接 成一个源文件进行编译,结果将生成一个目标文件。

6. 条件编译允许只编译源程序中满足条件的程序段,使生成的目标 程序较短,从而减少了内存的开销并提高了程序的效率。

7. 使用预处理功能便于程序的修改、阅读、移植和调试,也便于实 现模块化程序设计。

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

亚洲云-浙江高防BGP,至强铂金8270,提供自助防火墙管理,超大内存满足你各种需求

官方网站:点击访问亚洲云官网618活动方案:618特价活动(6.18-6.30)全站首月活动月底结束!地区:浙江高防BGPCPU:至强铂金8270主频7 默频3.61 睿频4.0核心:8核(最高支持64核)内存:8G(最高支持128G)DDR4 3200硬盘:40G系统盘+80G数据盘带宽:上行:20Mbps/下行:1000Mbps防御:100G(可加至300G)防火墙:提供自助 天机盾+金盾 管...

香港站群多ip服务器多少钱?零途云香港站群云服务器怎么样?

香港站群多ip服务器多少钱?想做好站群的SEO优化,最好给每个网站都分配一个独立IP,这样每个网站之间才不会受到影响。对做站群的站长来说,租用一家性价比高且提供多IP的香港多ip站群服务器很有必要。零途云推出的香港多ip站群云服务器多达256个IP,可以满足站群的优化需求,而且性价比非常高。那么,香港多ip站群云服务器价格多少钱一个月?选择什么样的香港多IP站群云服务器比较好呢?今天,小编带大家一...

条件编译为你推荐
表单控件在网页中创建一个表单,表单中包含各种表单控件,利用表格对各个控件以及输入提示文字进行布局高级工程师证书高级工程师证书是什么色增值税专用发票和增值税普通发票的区别普通增值税发票和专用增值税发票有区别吗?组或资源的状态不是执行请求操作的正确状态提示 HTTP 错误 404 -文件或目录未找到。accesspoint接入点APN什么意思啊网不易上网的利与弊(辩论)高级工程师证书查询如何查工程师证现在网现在网上到处都是招聘带车司机的工作是真的吗?背投广告搜狐一个广告费用是多少网通玩电信游戏卡怎么办网通怎么在电信玩游戏不卡
网站空间租赁 免费域名注册网站 备案域名出售 site5 外国空间 mysql主机 嘟牛 上海域名 天互数据 ntfs格式分区 免费测手机号 华为云盘 四川电信商城 贵阳电信 杭州电信宽带优惠 后门 cdn服务 双十二促销 博客域名 蓝队云 更多