首页 理论教育 C语言程序设计中的条件编译:圆面积计算和最值求解

C语言程序设计中的条件编译:圆面积计算和最值求解

时间:2023-10-29 理论教育 版权反馈
【摘要】:在程序第一行宏定义中,定义R为10.0,因此在条件编译时,因为标识符R已经被定义过,所以计算并输出圆面积。利用条件编译,实现两个数求最大值和最小值的程序。如果条件选择的程序段很长采用条件编译的方法是十分必要的。

C语言程序设计中的条件编译:圆面积计算和最值求解

在默认情况下,源程序中的所有行都要被编译。但是我们常常希望某些语句行在某些条件满足的情况下才进行编译,这就是条件编译。按不同的条件编译不同的程序部分时,可产生不同的目标代码文件。条件编译有助于程序的移植和调试。条件编译命令有以下几种形式:

1.第一种形式

#ifdef标识符

程序段1

#else

程序段2

#endif

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

#ifdef 标识符

程序段

#endif

需要注意:

(1)在上面的两种格式中,都要判断一个条件:标识符是否用#define定义过。

(2)在上面的格式中,“程序段”可以是多条语句,可以是命令行,也可以是预编译命令。

【例11.4】分析程序并写出运行结果。

程序内容如下:

1 #include<stdio.h>

2 #define R 10.0

3 int main()

4 {

5  float r,s;

6  #ifdef R

7  s=3.14159*R*R;

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

9  #else

10  r=R*R;

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

12  #endif

13  return 0;

14 }

程序结果如图11.6所示:

图11.6 例11.4程序结果图

【例题中关键问题说明】

(1)本例采用了第一种形式的条件编译。

(2)在程序第一行宏定义中,定义R为10.0,因此在条件编译时,因为标识符R已经被定义过,所以计算并输出圆面积。如果程序开头没有“#define R 10.0”,对程序作适当的修改后,则可计算并输出正方形的面积。

2.第二种形式

#ifndef标识符

程序段1

#else(www.xing528.com)

程序段2

#endif

功能:如果标识符没有被定义,则编译程序段1,否则编译程序段2。

需要注意:这种方式和第一种形式是有区别的,将“ifdef”改为“ifndef”,功能正好相反。

3.第三种形式

#if表达式

程序段1

#else

程序段2

#endif

功能:如果指定的表达式的值为真(非0为真,0为假),则编译程序段1,否则编译程序段2。

需要注意:这个表达式不是运行时的表达式,必须是在编译时就能知道它的值。

【例11.5】利用条件编译,实现两个数求最大值和最小值的程序。

程序内容如下:

1 #include<stdio.h>

2 #define MAX

3 void main()

4 {

5  int a,b;

6  printf(“please input two integer a,b:”);

7  scanf(“%d%d”,&a,&b);

8  #ifdef MAX

9  printf(“The max is%d\n”,a>=b?a:b);

10  #else

11  printf(“The min is%d\n”,a>=b?a:b);

12  #endif

13 }

程序结果如图11.7所示:

图11.7 例11.5程序结果图

【例题中关键问题说明】

(1)显然,当程序通过宏定义定义标识符MAX后,程序编译的代码是:

printf(“The max is%d/n”,a>=b?a:b);

(2)没有宏定义标识符MAX,程序编译的代码是:

printf(“The min is%d/n”,a>=b?a:b);

(3)通过条件编译可以选择不同的代码,从而提高编程的灵活性。

(4)条件编译当然也可以用条件语句来实现。但是用条件语句将会对整个源程序进行编译,生成的目标代码程序很长,而采用条件编译,则根据条件只编译其中的程序段1或程序段2,生成的目标程序较短。如果条件选择的程序段很长采用条件编译的方法是十分必要的。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈