C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

查看: 340|回复: 0

[分享] 计算机_C_C语言_条件编译 [复制链接]

Rank: 6Rank: 6

主题
68
帖子
348
C币
578 枚
在线时间
57 小时
发表于 2010-8-12 16:29:14 |显示全部楼层
计算机条件编译
1、条件编译
    当编译器编译源程序时,编译器按照不同条件编译不同的程序部分,从而产生不同的目标代码文件。
    条件编译对于跨平台的C语言程序非常有用。
2、条件编译的三种形式
第一种形式
      #ifdef  标识符
       程序段1
   #else
       程序段2
   #endif
  
  这里第一种形式的功能是: 如果定义了标识符那么就编译程序段1; 否则编译程序段2.
  第一种形式还有一种变形:
   #ifdef  标识符
       程序段
   #endif
   就是说当没有程序段2 的时候可以采用上面的简化形式。
Exp:
#include <stdio.h>
#define NUM ok
struct stu
{
     int num;
     char *name;
     char sex;
     float score;
}
int main(int argc, char *argv[])
{
    struct stu *ps;
    ps=(struct stu *)malloc(sizeof(struct stu));
    ps->num=102;
    ps->name="Zhang ping";
    ps->sex='M';
    ps->score=62.5;
   
    #ifdef NUM
      printf("Number=%d\nScore=%f\n",ps->num,ps->score);
    #else
      printf("Name=%s\nSex=%c\n";ps->name,ps->sex);
    #endif
   free(ps);
}

第二种形式
    #ifndef 标识符
         程序段1
    #else
         程序段2
    #endif
这种形式与第一种刚好相反, 如果没有定义则编译程序段1,否则编译程序段2。

第三种形式
    #if  常量表达式
         程序段1
    #else
         程序段2
    #endif
这里与前面有点不一样:
    如果常量表达式的值为真(非0),则编译程序段1,否则编译程序段2。

Exp:
  
#define R 1
#include <stdio.h>
int main(int argc, char *argv[])
{
   float c,
         r,
         s;
   printf("input a number:");
   scanf("%f",&c);
   #if R
     r=3.1415926*c*c;
     printf("area of round is:%f\n",r);
   #else
     s=c*c;
     printf("area of square is:%f\n",s);
   #endif
}
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-2-7 23:17

©2009-2011 cyuyan.com.cn

回顶部