c – 两个文件中相同函数/全局变量的不同声明
在C和C的情况下,我有两个关于同一函数和全局变量的声明的两个问题.
>不同的函数声明 请考虑以下代码片段: file_1.c void foo(int a); int main(void) { foo('A'); } file_2.c #include <stdio.h> void foo(char a) { printf("%c",a); //prints 'A' (gcc) } 正如我们所看到的,原型与定义中的定义不同 如果是C语言,由于未定义,上述程序无效 但是当涉及到C然后是什么?由于原型与之相同 我们有两个文件和两个不同的相同声明 file_1.c #include <stdio.h> extern int a; int main(void) { printf("%d",a); //prints 65 (g++ and gcc) } file_2.c char a = 'A'; 在C和C中,输出都是65. 虽然我想知道两种标准对这种情况的评价 在C11标准中,我发现了以下片段:
请注意,它指的是两个或更多定义的存在 解决方法
Q1.根据C99规范,第6.5.2.2.9节,它是C中未定义的行为:
表达式“指向”采用int的函数,而函数被定义为采用char. Q2.变量的情况也是未定义的行为,因为您正在读取或从char分配int.假设4字节整数,这将访问超过其有效的内存位置的三个字节.您可以通过声明更多变量来测试这一点,如下所示: char a = 'A'; char b = 'B'; char c = 'C'; char d = 'D'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |