条件编译 预编译

条件编译就是按条件对C程序的一部分进行编译,其它部分不编译。条件编译的目的是使源代码能更迅速、更容易地进行修改,并使目标代码缩短。这样,当程序在不同系统上编译、在同一系统不同编译器上编译或进行不同目的的编译时,减少对程序语句的修改,而让编译预处理器把该语句留下或忽略。
条件编译有#if语句、#i f-elif语句、#ifdef语句、#ifndef语句。

条件编译语句

1.#if
#if的一般形式是:
#if 表达式
程序段1
#else
程序段2
# endif
#if的执行过程是:如果表达式为真,编译程序段1,否则编译程序段2。作为一种特例,当条件为假不执行任何操作时,可以省略#else。
2.#if-#elif-#else-#endif
#if-#elif的形式与if-else if语句形式基本相同,格式为:
#if 表达式1
程序段1
# elif 表达式m
程序段m
# else
程序段n
# endif
如果表达式1的值为真,编译程序段1,否则如果表达式2为真,编译程序段2,依此类推,若表达式m为真,编译程序段m,否则编译程序段n。
3.#ifdef
#ifdef的一般形式是:
#ifdef 标识符
程序段1
# else
程序段2
# endif
如果标识符在此之前已经由#define给出了定义,就编译程序段1,如果这部分内容没有可以空着。否则编译程序段2,如果没有程序段2,#else也可省略。
4.#ifndef
#ifndef的一般形式是:
#ifndef 标识符
程序段1
#else
程序段2
# endif
如果标识符在此之前未经定义,就编译程序段1,如果这部分内容没有可以空着。否则编译程序段2,如果没有程序段2,#else也可省略。。

条件编译例题

例1
#define MAX 10
main( )
{

//#if MAX==99 note notMAX=99

#if MAX>99
printf("Compiled for array greater than 99n");
#else
printf("Compiled for small arrayn");
#endif
}
这里MAX=10,表达式MAX>99为假,因此不编译#if之后的程序段,而编译#else后的程序段,结果显示Compiled for small array。
例2 用ACTIVE_COUNTRY的值来决定货币符号:
#define US 0
#define ENGLAND 1
#define FRANCE 2
#define ACTIVE_COUNTRY US
#if ACTIVE_COUNTRY==US
char currency[ ]= "dollar";
#elif ACTIVE_COUNTRY==ENGLAND
char currency[ ]= "pound";
#elif ACTIVE_COUNTRY==FRANCE
char currency[ ]= "franc";
# endif
例3
#define ZHAO 10
main( )
{
#ifdef ZHAO
printf("Hello,Zhaon");
#else
printf("Hello,anyonen");
#endif
#ifndef CHEN
printf("Chen not be definedn");
#endif
}
程序运行结果: Hello,Zhao
Chen not be defined
如果把本定义中的宏定义去掉,则显示Hello, anyone和Chen not be defined。
例4 采用条件编译,使给定的字符串按小写字母或大写字母输出。
#include "stdio"
#define LETTER 1
main( )
{ int i=0;
static char str[ ]={ "Turbo CProgram"};
char c;
while ((c=str[i] != '')
{ i++;
# if LETTER
if (c>='a' &&c<='z') c=c-32;
# else if (c>='A' &&c<='Z') c=c+32;
# endif
printf("%c",c);
}
}
条件编译 预编译
因为LETTER定义为1,即条件表达式的值为真,则在预处理时,对第一个if语句进行编译处理,故此程序可以把小写字母变成大写字母。
程序运行结果为: TURBO C PROGRAM
如果将程序第二行改为:#define LETTER0则在预处理时,对第二个if语句进行编译处理,把大写字母变成小写字母

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/309392.html

更多阅读

最为详细的教程,教你如何反编译与回编译 精 java 反编译

最为详细的教程,教你如何反编译与回编译 精——简介学会反编译比较关键,也是我们美化必须掌握技术,学会反编译也是实现制作ROM的起步,ROM高手必然是反编译高手这里有必要说一下,教程只是给你一个动手的那一个跷板,教程不是万能的,给了你基

LinuxKernel0.01的编译和运行 linux编译运行java

http://www.oldlinux.org/oldlinux/viewthread.php?tid=4827Linux Kernel 0.01 的编译和运行本文操作环境均在 Linux 系统中实现。==================================================================================一、准备工

编译QtWeb之二 qtweb和亿简

静态编译qt-everywhere-opensource-src-4.7.3失败,总是提示找不到jscore.lib.我也尝试使用qt-everywhere-opensource-src-4.7.3和qt-win-opensource-4.7.3-vs2008.exe得到一样的结果。按照网上的说法:Qtsourcecode的解压目录不能有中

手机,电脑反编译apk教程 apktool反编译apk教程

电脑端反编译教程:用apktool反编译工具1.Windows徽标键+R 弹出运行对话框 输入cmd ,回车;会弹出命令提示符窗口2.输入:“E:”回车(其中E为盘符,apktool在哪个盘就输入哪个盘的盘符)3.输入:“cd apktool”回车(其中apktool为反编译工具所在文件

C++编译遇到参数错误cannotconvertparameter*from'constchar

前面的几天一直都在复习着被实习落下的C++基础知识。今天在复习着上次创建的窗口程序时,出现了一个错误,百思不得其解。因为是同样的代码,上次的都能顺利的通过编译,这次自己新建了一个工程结果就有一个错误出现,是在调用Create()函数时,传

声明:《条件编译 预编译》为网友哥有道分享!如侵犯到您的合法权益请联系我们删除