c++ - 范围内的结构与函数定义
问题描述
所以,据我所知,这在 C 中是合法的:
foo.c
struct foo {
int a;
};
酒吧.c
struct foo {
char a;
};
但同样的功能是非法的:
foo.c
int foo() {
return 1;
}
酒吧.c
int foo() {
return 0;
}
并且会导致链接错误(函数的多重定义foo
)。
这是为什么?结构名称和函数名称之间有什么区别使 C 无法处理一个而不能处理另一个?这种行为是否也扩展到 C++?
解决方案
这是为什么?
struct foo {
int a;
};
定义用于创建对象的模板。它不创建任何对象或函数。除非struct foo
在代码中的某处使用,就编译器/链接器而言,这些代码行也可能不存在。
请注意,C 和 C++ 处理不兼容struct
定义的方式有所不同。
struct foo
只要您不混合使用它们,您发布的代码中的不同定义在 C 程序中是可以的。
但是,它在 C++ 中是不合法的。在 C++ 中,它们具有外部链接,并且必须以相同的方式定义。更多细节参见3.2 一个定义规则/5。
推荐阅读
- typescript - 如何 jest.mock simple-git/promise
- azure - Azure 数据工厂 - 删除活动时出错
- html - 模糊除 div 之外的整个页面
- azure - Microsoft Azure 语音 SDK - 禁用音频记录
- google-apps-script - Google 表单上的自定义菜单未显示
- reactjs - React github页面导致404?
- html - 如果有其他课程,如何仅申请一个课程?
- python - 在多个 Pandas DataFrames 中基于相同条件选择行
- python - EPI:生成素数的优化算法
- javascript - ASP.NET Core 失败的 AJAX 发布请求