ved*_*ved 13 c c++ coding-style typedef
以下MyStruct(标记MyStruct)的定义和MyStruct类型的类型定义似乎完全可以通过gcc(至少4.6.2)和g ++来完成.
typedef struct MyStruct {
int a;
int b;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
我的问题是:它是否容易出错(在C和/或C++中)或使用标签名称与类型名称相同的错误样式?
根据http://www.eetimes.com/discussion/programming-pointers/4024450/Tag-vs-Type-Names,它不是:
我永远不明白为什么他们为标签和typedef使用不同的名称,当一个名称做得很好时:
Run Code Online (Sandbox Code Playgroud)typedef struct tree_node tree_node;
但我经常看到代码样式如下:
typedef struct tagMyStruct {...} MyStruct;typedef struct _MyStruct {...} MyStruct; <是的,我知道下划线+大写字母在每种情况下,有人在某种程度上使标签名称与类型名称不同.它背后有任何实际原因吗?
旁注:我使用的是C++编译器,但我想与这些定义C兼容(我知道这对c ++来说是不好的风格).出于维护某些调试工具的可用性的原因,我需要所有标记名称都是有意义的(不是自动生成的__unknown_something标记,如果是未命名的结构,您可以,例如,在visual studio类视图中查看).
同样的问题/问题适用于工会和枚举.
语言方面,在C和C++中完全没问题,因为标签名称存在于单独的名称空间中(不是namespace).
在C++中,使用它绝对是一种糟糕的风格typedef,因为它是多余的.您可以同时使用MyStruct以及struct MyStruct你是否有typedef或没有.
如果您认为C兼容性比C++样式更重要,那么这是您的选择.:-)