gpt4 book ai didi

c++ - 具有预处理器分支实现的结构是否违反了 ODR?

转载 作者:太空狗 更新时间:2023-10-29 19:51:26 25 4
gpt4 key购买 nike

在同时使用 C 和 C++ 的项目中,.h 文件包含类型的定义。如果该定义取决于 header 是否包含在 ccpp 文件中,我是否违反了单一定义规则?

// my_header.h
struct MyStruct
{
#ifdef __cplusplus
std::size_t member;
int surprise;
#else
unsigned member;
#endif
};

我知道 ODR 与不同的翻译单元有关,但在“我的情况”中,不同的翻译单元最终不会对一个通用结构有不同的实现吗?我在生产代码中看到过这一点,最初我想知道链接器在这种情况下做了什么。

有什么想法吗?

最佳答案

只要您使用一种编译器(C 或 C++),就不会有问题。头文件的扩展名无关紧要。

但是,如果您将来自不同语言的翻译单元链接在一起,那么是的,您违反了 ODR。

总的来说,这看起来很容易出错。我会给 C++ 类型一个完全不同的名称。您可以使用宏在两者之间切换,也许使用围绕 typedef?

的预处理器

关于c++ - 具有预处理器分支实现的结构是否违反了 ODR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43801137/

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