预处理编译-宏-define

来源:互联网 发布:java通用版游戏 编辑:程序博客网 时间:2024/05/16 06:20

预处理

//

//  main.c

//  pre_sccess

//

//  Created by qianfeng on 14-11-3.

//  Copyright (c) 2014年 qianfeng. All rights reserved.

//


#include<stdio.h>




#define ZOE0+0

#define PI(a)2.1415926+a


//#undef PI 表示在undef以上的PI宏都被注销,无效。

#undef PI


//定义字符串宏函数:

#define STR(a) #a

#define STR_PRO(a,b) #a #b

//“#”有些能够连续使用,有些不可,它的特殊性是取决于编译器。

//宏的有参算术,需要添加双重括号:#define sum(a,b) ((a)+(b))才能保证算术的正确

#define sum(a,b) (a+b)

#define sum_pro(a,b) a+b


//#__FILE__

//#__DATE__

//#__TIME__

//#__LINE__

//#__func__


//最新定义的宏名会把它上面定义的相同宏名覆盖掉,从而导致上面定义的宏无法使用。

#define PI100


//编译hello.c:llvm-gcc -o hello.i -E hello.c

//重复编译hello.c:!llvm

//vim编辑文件

int main(int argc,constchar * argv[]) {

//预处理不会对“宏变量”进行任何操作,只进行简单的“文本”替换

//宏不可递归定义:#define P9 P9+1;

//  对:  printf("%d\n",ZOE);预处理:printf("%d\n",0+0);

//宏变量在定义过程中,不可虽已添加空格,最好能省则省。

   printf("Hello, World!\n");

   int i =ZOE;

   printf("OK.%s\n",STR(qianfeng));

   printf("OK.%s\n",STR_PRO(qian,feng));

   printf("%d\n",i);

   printf("%d\n",ZOE);

   printf("%d\n",PI);

   //宏,条件编译:满足条件通过预编译,不满足不通过,在进入编译之前不满足条件的源码就已经被删除了。#if condition(条件的值:x>0为真,否则为假);

   //所以软件通常有两个版本,预编译后的“.i”文件和预编译前的“.c”文件(bug版本)

#if100

   printf("sum(a,b) = %d\n",5*sum(2,2));

#elif0

    printf("sum_pro(a,b) = %d\n",5*sum_pro(2,2));

#endif

   return0;

   /*

     输出:

     Hello, World!

     OK.qianfeng

     OK.qianfeng

     0

     0

     100

     sum(a,b) = 20

     Program ended with exit code: 0

     */

}


0 0
原创粉丝点击