## #ifdef的形式

预处理程序提供了条件编译的功能。条件编译有三种形式,下面分别介绍。

第一种形式

第一种形式的格式为:

```#ifdef 标识符

程序段1

#else

程序段2

#endif```

功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:

```#ifdef 标识符

程序段

#endif```#include "stdio.h"

#define NUM ok

int main(void){

struct stu{

int num;

char *name;

char sex;

float score;

} *ps;

ps=(struct stu*)malloc(sizeof(struct stu));

ps-&gtnum=102;

ps-&gtname="Zhang ping";

ps-&gtsex='M';

ps-&gtscore=62.5;

#ifdef NUM

printf("Number=%d\nScore=%f\n",ps-&gtnum,ps-&gtscore);

#else

printf("Name=%s\nSex=%c\n",ps-&gtname,ps-&gtsex);

#endif

free(ps);

return 0;

}

由于在程序的第15行插入了条件编译预处理命令,因此要根据NUM是否被定义过来决定编译那一个printf语句。而在程序的第一行已对NUM作过宏定义,因此应对第一个printf语句作编译故运行结果是输出了学号和成绩。

第二种形式

第二种形式的格式为:

```#ifndef 标识符

程序段1

#else

程序段2

#endif```

与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。

第三种形式

第三种形式的格式为:

```#if 常量表达式

程序段1

#else

程序段2

#endif```

它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。

#include "stdio.h"

#define R 1

int main(void){

float c,r,s;

printf ("input a number: ");

scanf("%f",&c);

#if R

r=3.14159*c*c;

printf("area of round is: %f\n",r);

#else

s=c*c;

printf("area of square is: %f\n",s);

#endif

return 0;

}

本例中采用了第三种形式的条件编译。在程序第1行宏定义中,定义R为1,因此在条件编译时,常量表达式的值为真,故计算并输出圆面积。

ps 2c语言程序,C语言基础(二)相关推荐

  1. 经典C语言程序100例之八二

    经典C语言程序100例之八二 如题 话不多说了,直接上代码 如题 [程序82] 题目:八进制转换为十进制 1.程序分析: 话不多说了,直接上代码 2.程序源代码: void main() { char ...

  2. 经典C语言程序100例之七二

    经典C语言程序100例之七二 如题 话不多说了,直接上代码 如题 [程序72] 题目:创建一个链表. 话不多说了,直接上代码 程序源代码: /creat a list/ #include " ...

  3. 经典C语言程序100例之六二

    经典C语言程序100例之六二 如题 话不多说了,直接上代码 如题 [程序62] 题目:学习putpixel画点. 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include " ...

  4. 经典C语言程序100例之五二

    经典C语言程序100例之五二 如题 话不多说了,直接上代码 如题 [程序52] 题目:学习使用按位或 | . 1.程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 话不多说了,直接上代码 ...

  5. 经典C语言程序100例之四二

    经典C语言程序100例之四二 如题 话不多说了,直接上代码 如题 [程序42] 题目:学习使用auto定义变量的用法 1.程序分析: 话不多说了,直接上代码 2.程序源代码: #include &qu ...

  6. 经典C语言程序100例之三二

    经典C语言程序100例之三二 如题 话不多说了,直接上代码 如题 [程序32] 题目:Press any key to change color, do you want to try it. Ple ...

  7. 经典C语言程序100例之二九

    经典C语言程序100例之二九 如题 话不多说了,直接上代码 如题 [程序29] 题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. 程序分析:学会分解出每一位数,如下解释 ...

  8. 经典C语言程序100例之二六

    经典C语言程序100例之二六 如题 话不多说了,直接上代码 如题 [程序26] 题目:利用递归方法求5!. 1.程序分析:递归公式:fn=fn_1*4! 话不多说了,直接上代码 2.程序源代码: #i ...

  9. 经典C语言程序100例之二五

    经典C语言程序100例之二五 如题 话不多说了,直接上代码 如题 [程序25] 题目:求1+2!+3!+-+20!的和 1.程序分析:此程序只是把累加变成了累乘. 话不多说了,直接上代码 2.程序源代 ...

  10. 经典C语言程序100例之二四

    经典C语言程序100例之二四 如题 话不多说了,直接上代码 如题 [程序24] 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13-求出这个数列的前20项之和. 1.程序分析:请 ...

最新文章

  1. 如何查看SE16N修改的表的记录
  2. 发布IP地址查询的WEB SERVICE
  3. AtCoder Beginner Contest 084(AB)
  4. js滚动条下拉一定值_JS逆向 | 无限Debugger之淘大象
  5. 墙裂推荐!2020Android阿里腾讯百度字节美团网易爱奇艺校招面试汇总
  6. 懒人也能变美,AR试妆会让你剁手到停不下来吗?
  7. CodeBlocks 的下载安装
  8. 超级浏览器究竟是什么?
  9. STM32----PWM脉宽调制信号的输出
  10. 将博客搬至CSDN_wuli大世界_新浪博客
  11. Objective-C 程序设计(第4版)
  12. 员工格言[付总提供]
  13. 一篇博客让你横扫数电常考所有集成电路芯片(已更新50%持续更新)
  14. whose引导的定语从句,先行词是复数形式,从句里谓语动词用单数还是复数?
  15. STM32RCT6芯片引脚的含义与作用
  16. centos离线安装docker
  17. hana服务器销售资质,hana认证服务器
  18. mysql 日志 博客,Frank的博客
  19. java生成ca证书_生成CA根证书的脚本
  20. h1283命令行下刷机法

热门文章

  1. Android Studio 第四十九期 - Sqlite数据库四种写法
  2. 《SAP HANA平台应用开发》—第3章3.1节信息建模
  3. Apache配置文件
  4. 关于js中的时间处理
  5. 防火墙DNAT与SNAT详谈
  6. android SQL 语句
  7. 在Linux 下配置PHP 支援GD
  8. sql 根据多个ID删除表中多行数据
  9. 关于上个Flex-Jsp-DB例子中Flex和Jsp传递中文参数问题的解决方法!(Tomcat服务器)...
  10. linux pidof 进程名称查进程id