c++ - 编写同时适用于 C 和 C++ 的结构代码

标签 c++ c struct compatibility typedef

我知道定义和使用 struct 的两种可能方式:

#1 
struct person
{
    char name[32];
    int age;
};

struct person dmr = {"Dennis Ritchie", 70};

#2
typedef struct
{
    char name[32];
    int age;
} person;

person dmr = {"Dennis Ritchie", 70};

第一种方式的有趣特性是类型和变量可以具有相同的名称:

struct person person = {"Sam Persson", 50};

这是 C 中的惯用语吗?它保证在 C++ 中工作吗?或者是否有我应该注意的极端情况?

请注意,我对纯 C++ 答案不感兴趣(例如“使用 std::string 而不是 char[32]”)。这是一个关于C/C++兼容性的问题。

最佳答案

struct 只有在 POD 时才在 C 和 C++ 之间兼容-s.

我倾向于编写如下代码:

struct person_st { char name[32]; int age; };
typedef struct person_st Person_t;

关于c++ - 编写同时适用于 C 和 C++ 的结构代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7937907/

相关文章:

c# - 在控制台应用程序中使用图像而不是文本

C++:重载 [ ] 运算符以进行读写访问

c - 如何使用 malloc 更改结构的大小

c++ - clang/gcc 类特化不一致

c - 程序在完成之前退出

objective-c - 2^n 指数计算真的比移位效率低吗?

c - stdint.h 中的 {U,}INTn_C 宏有什么意义?

c++ - 在 std::multiset (C++) 中协调 typedef 和结构

c - C 中与 ‘operator*’ (操作数类型为 ‘node’ )不匹配

c++ - 如何将 C++ 程序的输出用作 Bash 脚本中的变量