gpt4 book ai didi

c++ - 范围内的结构与函数定义

转载 作者:IT老高 更新时间:2023-10-28 12:46:40 26 4
gpt4 key购买 nike

所以,据我所知,这在 C 中是合法的:

foo.c

struct foo {
int a;
};

bar.c

struct foo {
char a;
};

但同样的功能是非法的:

foo.c

int foo() {
return 1;
}

bar.c

int foo() {
return 0;
}

会导致链接错误(函数foo的多重定义)。

这是为什么呢?结构名称和函数名称之间有什么区别使 C 无法处理一个而不能处理另一个?这种行为是否也扩展到 C++?

最佳答案

Why is that?

struct foo {
int a;
};

定义创建对象的模板。它不创建任何对象或函数。除非在代码的某处使用了 struct foo,否则就编译器/链接器而言,这些代码行也可能不存在。

请注意,C 和 C++ 处理不兼容的 struct 定义的方式有所不同。

您发布的代码中 struct foo 的不同定义在 C 程序中是可以的,只要您不混用它们即可。

但是,它在 C++ 中是不合法的。在 C++ 中,它们具有外部链接,并且必须以相同的方式定义。见 3.2 One definition rule/5了解更多详情。

关于c++ - 范围内的结构与函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com