Linux下gcc宏定义作用域
2016-11-10 15:04
62 查看
我的结论:宏定义在整个代码文件中,作用范围由定义行开始到文件结束或者到#undef范围内,不被代码块定界符作用
搜索资料意外看到这个博客,我觉得里面的结论有些问题,我就增加了几个简单的测试样例
http://blog.csdn.net/liuhuiyan_2014/article/details/48053037#comments
我增加的样例:
#include<stdio.h>
typedef struct
{
#define LEN 10
char c[LEN];
}str;
int main()
{
printf("LEN=%d\n",LEN);//10
return 0;
}
原 博客样例:
#include<stdio.h>
#define NUM 0
void fun()
{
#undef NUM
#define NUM 100
}
int main()
{
fun();
printf("NUM=%d",NUM);//NUM=100;
return 0;
}
#include<stdio.h>
#define NUM 0
void fun();
int main()
{
fun();
printf("NUM=%d",NUM);//0
return 0;
}
void fun()
{
#undef NUM
#define NUM 100
}
搜索资料意外看到这个博客,我觉得里面的结论有些问题,我就增加了几个简单的测试样例
http://blog.csdn.net/liuhuiyan_2014/article/details/48053037#comments
我增加的样例:
#include<stdio.h>
typedef struct
{
#define LEN 10
char c[LEN];
}str;
int main()
{
printf("LEN=%d\n",LEN);//10
return 0;
}
#include<stdio.h> int main() { printf("LEN=%d\n",LEN); /* def_brackets4.c: In function ‘main’: def_brackets4.c:7: 错误:‘LEN’ 未声明 (在此函数内第一次使用) def_brackets4.c:7: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其 def_brackets4.c:7: 错误:所在的函数内只报告一次。) */ return 0; } typedef struct { #define LEN 10 char c[LEN]; }str;
#include<stdio.h> typedef struct { #define LEN 10 char c[LEN]; }str; #undef LEN int main() { printf("LEN=%d\n",LEN); /* def_brackets5.c: In function ‘main’: def_brackets5.c:14: 错误:‘LEN’ 未声明 (在此函数内第一次使用) def_brackets5.c:14: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其 def_brackets5.c:14: 错误:所在的函数内只报告一次。) */ return 0; }
原 博客样例:
#include<stdio.h>
#define NUM 0
void fun()
{
#undef NUM
#define NUM 100
}
int main()
{
fun();
printf("NUM=%d",NUM);//NUM=100;
return 0;
}
#include<stdio.h>
#define NUM 0
void fun();
int main()
{
fun();
printf("NUM=%d",NUM);//0
return 0;
}
void fun()
{
#undef NUM
#define NUM 100
}
#include<stdio.h> void fun(); int main() { fun(); printf("NUM=%d",NUM); /* def_brackets2.c: In function ‘main’: def_brackets2.c:8: 错误:‘NUM’ 未声明 (在此函数内第一次使用) def_brackets2.c:8: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其 def_brackets2.c:8: 错误:所在的函数内只报告一次。) */ return 0; } void fun() { #define NUM 100 }
相关文章推荐
- 浅谈内联函数与宏定义的区别详解
- C语言中的内联函数(inline)与宏定义(#define)详细解析
- 基于C中含有if的宏定义详解
- 内联函数inline与宏定义深入解析
- C语言中宏定义使用的小细节
- C/C++宏定义的可变参数详细解析
- Objective-C 宏定义详细介绍
- ios开发中,比较实用的全局宏定义分享
- 你真的看懂Objective-C宏定义了吗
- iOS日常工作之常用宏定义大全
- 特殊的宏定义
- C语言 内联函数和宏定义
- 【搬运】iOS常用宏定义
- iOS单列两种宏定义
- ios中RGB十六进制转换成UIColor的RGB
- 2015年3月31日 开始
- 宏定义,条件编译以及函数指针
- C++内联函数与C语言宏的比较
- 操作系统和编译器宏定义
- 定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句