typedef作用域
如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾;
如果放在某个函数内,定义域就是从定义开始直到该函数结尾;
#define作用域
不管是在某个函数内,还是在所有函数之外,作用域都是从定义开始直到整个文件结尾
//a.c
typedef …//此处开始到文件结尾
#define …//此处开始到文件结尾
int negate(int num)
{
…
typedef …//此处开始到该函数结束。注意,该函数内,此定义前,也不能用
#define …//此处开始到文件结尾
…
}
typedef …//此处开始到文件结尾
#define …//此处开始到文件结尾
void show()
{
typedef …//此处开始到该函数结束。
#define …//此处开始到文件结尾
}
总结:
(1) 不管是typedef还是define,都不能在定义之前使用;
(2) typedef受函数范围影响,而define不受;
(3) 不管是typedef还是define,其作用域都不会扩展到别的文件,即使是同一个程序的不同文件,也不能互相使用。
//例一:
#include <stdio.h>
void func(void)
{
#define TEST 100
}
int main()
{
printf("TEST = %d
", TEST);
return 0;
}
运行结果:
TEST = 100
//例二:
#include <stdio.h>
int main()
{
printf("TEST = %d
", TEST);
return 0;
}
void func(void)
{
#define TEST 100
}
编译报错:TEST未定义,define的作用域从定义开始的地方起才开始生效
重点!!!
1、在文件a.c中定义的宏,其可见范围相当于a.c内部的static-global变量,仅a.c可以访问
2、如果a.h中定义了一个宏,那么只要了x.c包含有a.h,此时x.c仅能够访问该宏。