打印

条件编译命令

[复制链接]
770|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heping517|  楼主 | 2016-5-14 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有几个命令可对程序源代码的各部分有选择地进行编译,该过程称为条件编译。
沙发
heping517|  楼主 | 2016-5-14 21:05 | 只看该作者
#if、#else,#elif 及#endif
#if 的一般含义是如果#if 后面的常量表达式为 true,则编译它与#endif 之间的代码,否则跳过这些代码。命令#endif 标识一个#if 块的结束。

使用特权

评论回复
板凳
zya888| | 2016-5-14 21:06 | 只看该作者
#if constant-expression
statement sequence
#endif
Eg:
#define MAX 91
#include <iostream>
using namespace std;
int main()
{
#if MAX > 99
cout<<"MAX is bigger than 99"<<endl;
#elif MAX > 90
cout<<"MAX is bigger than 90"<<endl;
#else
cout<<"MAX is smaller than 90"<<endl;
#endif
return 0;
}

使用特权

评论回复
地板
zzzhui| | 2016-5-14 21:06 | 只看该作者
#else 命令的功能有点象 C 语言中的 else;#else 建立另一选择(在#if 失败的情况下)。注意,#else 属于#if 块。

使用特权

评论回复
5
zya888| | 2016-5-14 21:06 | 只看该作者
跟在#if 后面的表达式在编译时求值,因此它必须仅含常量及已定义过的标识符, 不可使用变量。 表达式不许含有操作符 sizeof (sizeof 也是编译时求值) 。

使用特权

评论回复
6
zya888| | 2016-5-14 21:07 | 只看该作者
#if expression
statement sequence
#elif expression1
statement sequence
#endif
在嵌套的条件编译中#endif、#else 或#elif 与最近#if 或#elif 匹配。
# ifdef 和# ifndef

使用特权

评论回复
7
zzzhui| | 2016-5-14 21:07 | 只看该作者
#elif 命令意义与 ELSE IF 相同,它形成一个 if else-if 阶梯状语句,可进行多种编译选择。#elif 后跟一个常量表达式。如果表达式为 true,则编译其后的代码块,不对其它#elif 表达式进行测试。否则,顺序测试下一块。

使用特权

评论回复
8
zya888| | 2016-5-14 21:07 | 只看该作者
#define MAX 91
#include <iostream>
using namespace std;
int main()
{
#ifdef MAX
cout<<"hello,MAX!"<<endl;
#else
cout<<"where is MAX?"<<endl;
#endif
#ifndef LEO
cout<<"LEO is not defined"<<endl;
#endif
return 0;
}

使用特权

评论回复
9
zzzhui| | 2016-5-14 21:07 | 只看该作者
条件编译的另一种方法是用#ifdef 与#ifndef 命令,它们分别表示"如果有
定义"及"如果无定义"。# ifdef 的一般形式是:
# ifdef macroname
statement sequence
#endif
#ifdef 与#ifndef 可以用于#if、 #else, #elif 语句中, 但必须与一个#endif。

使用特权

评论回复
10
zya888| | 2016-5-14 21:08 | 只看该作者
命令#line 改变__LINE__与__FILE__的内容,它们是在编译程序中预先定义的标识符。命令的基本形式如下:
#line number["filename"]

使用特权

评论回复
11
zzzhui| | 2016-5-14 21:08 | 只看该作者
命令#undef 取消其后那个前面已定义过有宏名定义。一般形式为:
#undef macroname

使用特权

评论回复
12
zzzhui| | 2016-5-14 21:09 | 只看该作者
其中的数字为任何正整数,可选的文件名为任意有效文件标识符。行号为源
程序中当前行号,文件名为源文件的名字。命令#line 主要用于调试及其它特殊
应用。注意:在#line 后面的数字标识从下一行开始的数字标识。
#line 100 "jia"
cout<<"#line change line and filename!"<<endl; //line 100
cout<<__LINE__<<endl; //101
cout<<__FILE__<<endl; //jia

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

648

帖子

0

粉丝