c语言中关于编译的一个问题,请教。

#include"stadio.h"#defineMAX200voidmain(){#ifMAX>999printf("THEEND!\n");#elifMAX>99pr... #include "stadio.h"
#define MAX 200
void main()
{
#if MAX>999
printf("THE END!\n");
#elif MAX>99
printf("THE END!\n");
}

在这里的编译,有什么意义,我觉得直接这样不就行了:
#include "stadio.h"
#define MAX 200
void main()
{
if(MAX>999)
printf("THE END!\n");
else if(MAX>99)
printf("THE END!\n");
}

请给帮我解释下编译预处理在程序中的意义
展开
 我来答
黄邦勇帅哥哥
2011-12-26 · TA获得超过3989个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:580万
展开全部
你这样的用法不能体现出预处理器的作用,预处理器在使用多个文件特别是包含头文件的时候就很有用了,一般对于单一文件来讲,用处不是很大。
下面简单讲一下逻辑预处理器#if的两个用处。
1、#if指令用法一:测试某个符号是否以前用#define定义过,该用法的指令如下#if defined 标识符 …. #endif 其缩写形式为#ifdef 标识符….#endif表示如果,指定的标识符已被#define定义,则中间的语句就包含在源文件中,如果该标识符还未被#define定义,则跳过#if和#endif之间的语句,该语句以#endif结束,还要注意的是标识符前的关见字是defined比define多一个字母d。
2、测试标识符是否不存在:其语法为#if !defined 标识符…..#endif缩写形式为#ifnedf 标识符…..#endif表示如果指定的标识符没有定义,则把#if和#endif之间的语句包含在源文件中,如果标识符已定义则跳过#if和#endif之间的代码,实标上#ifndef语句比#ifdef语句使用得更频繁,因为系统使用该语句防止头文件被多次包含,
3、防止头文件被包含多次的方法:其方法为#ifndef HY #define HY语句#endif程序在开始遇到标识符HY时没有被定义,这时执行后面的语句,再第二次被使用时则标识符HY已经被定义,这时不会执行后面的语句,从而防止了同一头文件被包含多次的情况。这里要注意使用#define后面定义的标识符不需要值。
4、#if语句还可以使用逻辑运算符以测试多个值,比如#if defined HY1&&HY2….#endif当HY1与HY2都为真时才执行,同样还可以使用其他逻辑运算符。
5、#if指令用法二:测试某个表达式的值是否为真,其语法格式为:#if 常量表达式….#endif,注意常量表达式的求值结果应是整数常量表达式,比如#if a=2 …. #endif测试a的值是否为2,如果为2则执行#if与#endif之间的语句。

具体百度搜索《C++宏,预处理器,RTTI,typeid与强制类型转换专题》
七七5Od
2011-12-27
知道答主
回答量:16
采纳率:0%
帮助的人:6.4万
展开全部
建议看一下有关条件编译的书:
其区别是:
当MAX>999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
当MAX>99并且MAX<=999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
其他情况时,编译的程序如下:
void main()
{
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光上的桥
2011-12-26 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65866
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
程序执行效果看起来是一样的,但是有区别,生成的EXE文件区别很大,第一种方式输出的EXE文件只有一句printf的代码,而第二种方式有if判断和多个printf语句代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lency_cn
2011-12-26 · TA获得超过287个赞
知道答主
回答量:229
采纳率:100%
帮助的人:182万
展开全部
因为MAX是个常量,所以走的分支是固定的,编译期间就知道的,不需要动态判断
预处理就是把不会走到的分支直接去掉,不会生成到二进制执行代码里面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-12-26
展开全部
条件编译的条件判断是在编译阶段进行的,即不符合条件的执行语句代码不会出现在最终的可执行文件中,而且编译生成的文件也不会知道这里曾经有过条件判断。而普通的条件语句的条件判断是在运行阶段执行的,所以不符合条件的执行语句代码也会出现在可执行文件中。

条件编译的作用通常是对系统参数进行判断,以便根据不同的系统编译不同的代码,以提高程序的可移植性。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式