gcc linux 宏,Linux下gcc宏定义作用域

我的结论:宏定义在整个代码文件中,作用范围由定义行开始到文件结束或者到#undef范围内,不被代码块定界符作用

搜索资料意外看到这个博客,我觉得里面的结论有些问题,我就增加了几个简单的测试样例

http://blog.youkuaiyun.com/liuhuiyan_2014/article/details/48053037#comments

我增加的样例:

#include

typedef struct

{

#define LEN 10

char c[LEN];

}str;

int main()

{

printf("LEN=%d\n",LEN);//10

return 0;

}

#include

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

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

#define NUM 0

void fun()

{

#undef NUM

#define NUM 100

}

int main()

{

fun();

printf("NUM=%d",NUM);//NUM=100;

return 0;

}

#include

#define NUM 0

void fun();

int main()

{

fun();

printf("NUM=%d",NUM);//0

return 0;

}

void fun()

{

#undef NUM

#define NUM 100

}

#include

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值