1,在UCOS-II中,一些全局变量的声明是在UCOS-II.H中,且是用extern声明的,并且整个工程中只有这么一个地方对全局变量声明,这是不是说明多个文件中如果全部用extern声明一个变量(注意是全部文件中用extern声明),那么这个变量在所有文件中是共用的。
2,在别人编写的工程文件中我又遇见一个声明方式,用条件编译语句在一个头文件中声明一个变量即如果格式:
#ifdef _main
int a;
#else
extern int a;
#endif
在其中一个.c文件中定义_main,这种声明方式会是什么一种情况?
其实这涉及到#define的作用域,首先我们应该知道多文件编译时是有顺序的,然后生成一个目标文件,#define的作用域应该只是这一个文件而已,但是又有一点不明白了,为了我们不让头文件中的变量重复定义,我们会使用
#ifndef ####
#define ####
声明部分;
#endif
结构使其只调用一次,那么它的是在所有文件中只调用一次吗?那么#define #### 的作用域就是在#define ####之后编译的所有文件了?如何解释。