您的位置:首页 > 编程语言 > C语言/C++

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

2014-05-10 22:25 253 查看
#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 <stdio.h>
#include <malloc.h>

#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<m; i++)

int main()
{
int array[] = {1, 2, 3, 4, 5};
int x = 0;
int*p = MALLOC(int, 5);

FOREACH(x, 5)
BEGIN
p[x] = array[x];
END

FOREACH(x, 5)
BEGIN
printf("%d\n", p[x]);
END

FOREVER();

free(p);

printf("Last printf...\n");

return 0;
}

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

#include <stdio.h>

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: