0
点赞
收藏
分享

微信扫一扫

Linux下gcc宏定义作用域


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

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



我增加的样例:

#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
}




举报

相关推荐

0 条评论