网站排名降级的原因有哪些,做网络推广的团队,南京模板网站开发,建设网站的模板下载c语言中#xff0c;多个文件组合的时候#xff0c;有可能标示名相同#xff0c;那么这个时候编译器如何判别的呢#xff1f; c语言中有3种链接属性: 外部#xff08;external#xff1a;可以被其他文件访问到#xff09;, 内部(internal#xff1a;无法被其他文件访问到… c语言中多个文件组合的时候有可能标示名相同那么这个时候编译器如何判别的呢 c语言中有3种链接属性: 外部external可以被其他文件访问到, 内部(internal无法被其他文件访问到)无设置(none) 外部external使用extern关键字 内部internal 使用static关键字 小结一下 1.extern的修饰的符号必须在工程的其他文件中要有一个变量的定义否则不能被使用。 2.extern使用之后可是实现全部工程的不同文件使用相同的变量 3.internal的属性方式通过static来进行修饰仅仅是在改文件中可以使用但是在其他的文件中则不能访问。 对各种情况进行一些测试吧 第一步测试在两个文件中定义相同名称的变量 unit1.c -------------------- int a 10; void printtest1() { printf(print test at %s, variable a %d/n, __FILE__, a); } unit2.c ------------------- int a 20; void printtest2() { printf(print test at %s, variable a %d/n, __FILE__, a); } main.c ------------------ void printtest1(); void printtest1(); int main(int argc, char *argv[]) { printtest1(); printtest2(); system(PAUSE); return 0; } 编译时提示错误 unit2.c multiple definition of a ,由于unit1.c和unit2.c都定义了a 第一步测试结论如果在不同的文件中定义相同名字的变量编译器无法通过编译 第二步测试把其中一个声明改成extern 这个时候把unit2.c改造一下 extern int a; void printtest2() { printf(print test at %s, variable a %d/n, __FILE__, a); } unit2中使用extern标示该变量是外部链接的, 这样编译通过了结果显示unit1和unit2中a的值都为10,OK,值相同了那么真的是同一个变量了吗修改一下值再确认一下 改造一下main.c修改a的值 extern int a; a 20; printtest1(); printtest2(); a 30; printtest1(); printtest2(); 这个时候输出为 unit1.c 20 unit2.c 20 unit1.c 30 unit2.c 30 可以确认的确是使用了同一个变量了。 第二步测试结论使用extern可以访问其他文件中定义的变量 第三步测试把其中一个声明使用static标示 首先在unit1.c这把a声明成static个时候编译器提示main.c和unit2.c中的a未定义static把unit1.c中的a定义为文件内部使用范围unit2.c和main.c中无法访问到该变量。 把uint2.c中的声明修改成int a; 这个时候输出为 unit1.c 10 unit2.c 20 unit1.c 10 unit2.c 30 OK结果显示unit1.c中的a和unit2.c中的a互相不影响了。再测试一下在unit1.c中使用extern int a看看能不能引用到unit2.c中的变量 void printtest1() { extern int a; a 10; printf(print test at %s, variable a %d/n, __FILE__, a); } 这个时候输出为 unit1.c 10 unit2.c 20 unit1.c 10 unit2.c 30 可以确认unit1.c中使用的a都是本文件内定义的变量,无法影响到unit2.c中的变量了。 第三步测试结论使用static标示的变量在文件内部有效其他文件中无法访问。并且在该文件中无法引用到其他文件的同名称变量 第四步测试两个文件都设置成extern 如果在unit1.c和unit2.c中都申明成extern会怎么样呢 unit1.c -------------------- extern int a; void printtest1() { printf(print test at %s, variable a %d/n, __FILE__, a); } unit2.c ------------------- exntern int a; void printtest2() { printf(print test at %s, variable a %d/n, __FILE__, a); } 这个时候所有使用a的地方都报编译错误提示没有定义变量。 第四步测试结论使用extern标示的变量必须已经定义过。 第五步测试static标示的函数 把unit1.c中的printtest1修改成static static void printtest1() 这时编译器报错main.c中使用的printtest1未定义。 第5步测试结论使用static标示的函数在其他文件中不能访问。