编写在C和C++中都能工作的结构代码

fre*_*low 5 c c++ compatibility struct typedef

我知道两种可能的方法来定义和使用structs:

#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};
Run Code Online (Sandbox Code Playgroud)

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

struct person person = {"Sam Persson", 50};
Run Code Online (Sandbox Code Playgroud)

这是C中的惯用语吗?它可以保证在C++中工作吗?或者我应该注意哪些角落?

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

nin*_*alj 1

struct person person = {"Sam Persson", 50};
Run Code Online (Sandbox Code Playgroud)

对类型和变量使用相同的标识符并不符合习惯。在 Unix 中,通常使用变量名称的缩写版本,例如:struct stat st, , ... ,文件描述符变量的典型名称也是struct timeval tv如此。fd