【C语言学习】16__宏定义与使用

#define定义宏常量可以出现在代码的任何地方

#define从本行开始,之后的代码都可以使用这个宏常量

#define表达式给有函数调用的假象,却不是函数
#define表达式可以比函数更强大
#define表达式比函数更容易出错

#define SUM(a,b) (a) + (b)
#define MIN(a,b) ((a)<(b) ? (a):(b))
#define DIM(a)   (sizeof(a) / sizeof(*a))

1:宏表达式与函数的对比

宏表达式在预编译期被处理,编译器不知道宏表达式的存在
宏表达式用“实参”完全替代形参,不进行任何运算
宏表达式没有任何的“调用”开销
宏表达式中不能出现递归定义

#include 
#include 

#define MALLOC(type, x) (type*)malloc(sizeof(type)*x)
#define FOREVER() while(1)

#define BEGIN {
#define END   }
#define FOREACH(i, m) for(i=0; i

2:宏定义的常量或表达式是否有作用域限制?

#undef的用法

#include 

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

int f2(int a, int b, int c)
{
    return _MIN_(_MIN_(a,b), c);
}

int main()
{
    printf("%d\n", f1(2, 1));
    printf("%d\n", f2(5, 3, 2));
    getchar();
    return 0;
}

3:内置宏

__STDC__  编译器是否遵循标准C规1范
__TIME__  编译时的时间    如:17:01:01
__DATE__  编译时的日期    如:Jan 31 2012
__LINE__  当前行号25
__FILE__  被编译的文件名  如:file1.c


你可能感兴趣的:(C语言学习)