
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");
}
请给帮我解释下编译预处理在程序中的意义 展开
#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");
}
请给帮我解释下编译预处理在程序中的意义 展开
5个回答
展开全部
你这样的用法不能体现出预处理器的作用,预处理器在使用多个文件特别是包含头文件的时候就很有用了,一般对于单一文件来讲,用处不是很大。
下面简单讲一下逻辑预处理器#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与强制类型转换专题》
下面简单讲一下逻辑预处理器#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与强制类型转换专题》
展开全部
建议看一下有关条件编译的书:
其区别是:
当MAX>999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
当MAX>99并且MAX<=999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
其他情况时,编译的程序如下:
void main()
{
}
其区别是:
当MAX>999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
当MAX>99并且MAX<=999时,编译的程序如下:
void main()
{
printf("THE END!\n");
}
其他情况时,编译的程序如下:
void main()
{
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序执行效果看起来是一样的,但是有区别,生成的EXE文件区别很大,第一种方式输出的EXE文件只有一句printf的代码,而第二种方式有if判断和多个printf语句代码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为MAX是个常量,所以走的分支是固定的,编译期间就知道的,不需要动态判断
预处理就是把不会走到的分支直接去掉,不会生成到二进制执行代码里面
预处理就是把不会走到的分支直接去掉,不会生成到二进制执行代码里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-12-26
展开全部
条件编译的条件判断是在编译阶段进行的,即不符合条件的执行语句代码不会出现在最终的可执行文件中,而且编译生成的文件也不会知道这里曾经有过条件判断。而普通的条件语句的条件判断是在运行阶段执行的,所以不符合条件的执行语句代码也会出现在可执行文件中。
条件编译的作用通常是对系统参数进行判断,以便根据不同的系统编译不同的代码,以提高程序的可移植性。
条件编译的作用通常是对系统参数进行判断,以便根据不同的系统编译不同的代码,以提高程序的可移植性。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询