您的位置:首页 > 运维架构 > Linux

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>

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