我有一个C文件中的int a[]
。现在在另一个.c文件中我有extern int *a
。使用extern与不同的类型,但同名变量C
我需要知道如果我尝试访问第二个文件中的变量a
将会是什么行为,为什么? 会发生什么问题?
我有一个C文件中的int a[]
。现在在另一个.c文件中我有extern int *a
。使用extern与不同的类型,但同名变量C
我需要知道如果我尝试访问第二个文件中的变量a
将会是什么行为,为什么? 会发生什么问题?
未定义的行为。所以什么都可能发生。
能否请您详细一点,为什么未定义行为? –
@vaibhavshukla:因为标准是这样说的。 (参见C99的6.2.7节)在更实际的层面上,请参阅这里的一些答案:http://stackoverflow.com/questions/6385850/pointer-array-extern-question。 –
如果我在第二个文件中包含第一个文件会怎么样?会有什么结果?链接错误或编译器错误? –
如果包含文件(声明)两次或声明的变量名为a,则可能会出现错误重定义;
当我试图上述编译器显示错误:
conflicting types for a;
//previous definition in other file...
这里没有包含任何文件... –
@dinesh:我dnt认为所以bcoz extern关键字说它的一个声明没有定义或者说当我们说extern时,它意味着某处其他文件变量已经被定义,那么怎么来重新定义错误? –
对不起,这是一个typo.actually都具有相同的名称“A” –