3.1、宏定义和使用分析

1、#define定义宏常量可以出现在代码的任何地方
2、#define从本行开始,之后的代码都可以使用这个宏常量
3、#define表达式给有函数调用的假象,却不是函数
4、#define表达式可以比函数更强大
5、#define表达式比函数更容易出错

6、宏表达式与函数的对比
   ·宏表达式在预编译期被处理,编译器不知道表达式的存在
   ·宏表达式用“实参”完全替代形参,不进行任何计算
   ·宏表达式没有任何的“调用”开销
   ·宏表达式中不能出现递归定义
         #define FAC(n) ((n>0) ? (FAC(n-1)+1) : 0)

         int j = FAC(100);

7、gcc -E test.c -o test.i
      gcc -S test.i -o test.s
      gcc -C test.s -o test.o

8、int f1(int a, int b)
   {
      #define _MIN_(a,b) ((a)<(b) ? a : b)
      return _MIN_(a,b);
      #undef _MIN_
   }

9、强大的内置宏
   宏           含义
  _FILE_       被编译的文件名
  _LINE_       当前行号
  _DATE_      编译时的日期
  _TIME_       编译时的时间
  _STDC_      编译器是否遵循标准C规范

10、time_t t;
       struct tm* ti;
       time(&t);
       ti = localtime(&t);

       printf ("%s", asctime(ti));  //显示当前系统时间

11、#define LOG(s) do{                                                            \
        time_t t;                                                                              \
        struct tm* ti;                                                                        \
        time(&t);                                                                              \
        ti = localtime(&t);                                                                 \
        printf ("%s[%s:%d] %s\n", asctime(ti), _FILE_, _LINE_, s);\
}while(0)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值