浅谈C程序中条件编译

原创 2006年05月27日 22:28:00

作者:弈宇风尘(英文ID:Kevin) 时间:2006.05.27
………………………………………………………………………………………………………………
在C的高级编程中会遇到我们在基础学习中没有遇到过的条件编译。
何谓“条件编译”,简单一点说:就是“程序的内容指定编译的条件”。
我们在写程序的时候,一般的情况是对源程序的所有行都参加编译,
但是我们希望部分行在满足条件的情况下,再执行编译。从而引出下
面的几种条件编译。
一般的条件编译有:
(1)#if
  形式:
    #if 表达式
    program 1
    #else
        program 2
    #endif
   这种格式与if...else...执行过程类似。
   表达式在这不做介绍,相信都明白,显得累赘。
  e.g:#if 0
       program
       #endif
       可以利用此代码注释,与/* 。。。。。。*/同。
(2)#ifdef
   ifdef:“如果有定义”。
   形式:
    #ifdef 标识符
    program 1
    #else
        program 2
    #endif 
  注:标识符被定义,则对program 1进行编译,否则编译program 2。
    但也可以不写#else
    #ifdef 标识符
        program
    #endif
    "标识符"用#define命令定义,
  #define:宏(macro)定义命令。
(3)#ifndef
   ifndef:“如果无定义”
  形式:
    #ifndef  标识符
    program 1
    #else
        program 2
    #endif
    这种形式的条件编译与第二种相同,但是执行不一样,主要区别:
ifdef和ifndef(即如果有定义和如果无定义)。
  也可以写成:
  #ifndef 标识符
        program
    #endif
实例:
  #define Letter 1
  main()
  {char str[20]="HACKBASE KEVIN",c;
  int i=0;
  while((c=str)!='/0')
   {i++;
     #if Letter
        if(c>='A'&&c<='Z')
          c=c+32;
     #else
        if(c>='a'&&c<='z')
          c=c-32;
     #endif
       printf("%c",c);
   }
  }
  输出结果:hackbase kevin
总结:
  条件编译的优点:编写大型程序,当需要加载多个模块。利用条件编译
可以使模块的选择更方便更节约时间,而且只改动几行代码即可。
  欢迎大家相互交流。

………………………………………………………………………………………………………………
参考书目:
    C语言高级实例解析    清华大学
    编译原理             高等教育出版社

………………………………………………………………………………………………………………
网络参考地址:
  弈宇风尘'Blog:http://phj.hackbase.com
    左撇子编程:http://blog.csdn.net/penghaijun/

从Hello World 之C程序起步浅谈函数

********************************                                                                    ...

浅谈C文件编译过程

话说总结下C文件编译过程. 首先假设有这么一段经典C程序: #include //包含标准输入输出头文件,stdio即standard input&output int main(void) ...

浅谈C/C++的编译问题

C/C++的编译过程大致如下:以此流程图为线索,我们的问题将依次展开。1. 预处理预处理的过程主要处理包括以下过程: 将所有的#define删除,并且展开所有的宏定义 处理所有的条件预编译指令,比如#...

浅谈利用Android NDK编译C/C++文件的经历

因为工作的需要,有幸经历了一次在linux下的eclipse中利用android的NDK编译C/C++代码成.so文件,然后在java层利用JNI的方式调用C/C++方法的过程。作为一个新手,在没有任...

浅谈分支预测、流水线与条件转移

本文摘自:http://www.cnblogs.com/yangecnu/p/4196026.html 一 一个问题     在StackOverflow上有这么一个问题 Why is...
  • bird67
  • bird67
  • 2016年05月20日 11:48
  • 1319

浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n

转载自:浅谈《剑指offer》原题:求1+2+……+n 如侵犯您的版权,请联系:windeal12@qq.com...
  • Windeal
  • Windeal
  • 2014年09月15日 17:11
  • 1180

浅谈Architectural Assumption(软件架构设计的假设条件)(1)

这个概念并非我们原创,早在二十年前David Garlan、Robert Allen 和 John Mark Ockerbloom就已经谈到了这个概念,英文是architectural assumpt...
  • ytomc
  • ytomc
  • 2016年11月17日 17:20
  • 357

shell浅谈之运算符和IF条件判断

一、简介        Shell各种判断结构和运算符的用法是shell编程的基础,了解shell的判断、运算符和一些退出状态对后面的学习有很重要的影响。shell有一个内部命令test经常用于...

shell浅谈之二运算符和IF条件判断

转载自:http://blog.csdn.net/taiyang1987912/article/details/38893381 一、简介        Shell各种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈C程序中条件编译
举报原因:
原因补充:

(最多只允许输入30个字)