- 主题
- 68
- 帖子
- 348
- 精华
- 0
- 积分
- 635
- C币
- 578 枚
- 在线时间
- 57 小时
- 注册时间
- 2010-7-9
- 最后登录
- 2012-1-28
- 性别
- 保密
 
- 主题
- 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
} |
|