【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
#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
相关文章推荐
- C语言学习笔记12——宏定义与使用分析
- c语言宏定义,可变参数的使用
- 只要你的答案让我明白了如和使用Microsoft VisualC++6 但是我一点基础也没有。所以向大家请教 我想学习C语言 加分不是问题 还望得到大家的帮助 我一定把分数加到你满意为止
- C语言 Pthread的学习使用
- c语言学习笔记16之字符串常用函数
- C语言学习笔记--动态库和静态库的使用
- c语言学习之基础知识点介绍(十一):字符串的介绍、使用
- C语言学习笔记——如何使用全局变量
- 【黑马程序员】iOS学习之路——C语言之宏定义、条件编译和条件包含及typedef
- sqlite学习笔记9:C语言中使用sqlite之插入数据
- 使用xcode的preprocess功能学习宏定义
- C语言学习之位操作符的使用
- C语言学习笔记(16) c语言字符串分析
- C语言宏定义的使用
- C语言学习笔记--动态库和静态库的使用
- 为什么要学习和使用C语言?
- C语言学习笔记:16_位运算
- C语言#define之宏定义的使用
- Micro definition ---C语言中宏定义使用总结
- Atlas学习手记(16):使用PasswordStrength检测密码强度