- 论坛徽章:
- 1
|
本帖最后由 shihyu 于 2010-03-09 23:20 编辑
- #include <stdio.h>
- char str[];
- int main()
- {
-
- char str[10];
- return 0;
- }
复制代码 为什么上面代码不会出现重复定义 , 改成下面就出现重复定义
- #include <stdio.h>
- int main()
- {
- char str[];
- char str[10];
- return 0;
- }
复制代码 http://learn.akae.cn/media/ch23s09.html
具有不完全类型的变量可以通过多次声明组合成一个完全类型,比如数组str声明两次:
char str[];
char str[10];
当编译器碰到第一个声明时,认为str是一个不完全类型,碰到第二个声明时str就组合成完全类型了,如果编译器处理到程序文件的末尾仍然无法把str组合成一个完全类型,就会报错。读者可能会想,这个语法有什么用呢?为何不在第一次声明时就把str声明成完全类型?有些情况下这么做有一定的理由,比如第一个声明是写在头文件里的,第二个声明写在.c文件里,这样如果要改数组长度,只改.c文件就行了,头文件可以不用改。
他意思我还是不太懂? 是.c很多文件只是用str 才这样做吗? 在头文件用extern char str[]; 不行吗?
谢谢 |
|