typedef的命名方案

7 c posix naming typedef

我正在开发一个广泛使用类似结构的库

typedef struct foo_bar_s {
    ...
} foo_bar_t;
Run Code Online (Sandbox Code Playgroud)

使用_t后缀是个坏主意,因为它是POSIX保留的命名空间.结构的_s后缀也很无用.所以我想我可以改变一切

typedef struct foo_bar {
    ...
} foo_bar;
Run Code Online (Sandbox Code Playgroud)

或者如果不需要结构名称

typedef struct {
    ...
} foo_bar;
Run Code Online (Sandbox Code Playgroud)

但是,我无法再将typedef与常规符号(变量等)区分开来.这真的是一个大问题,我应该为typedef使用不同的合适命名方案吗?或者这不重要吗?

我真的不太确定.你怎么看?另外,您对typedef命名方案有什么建议?

Mic*_*yan 8

虽然"_t"是保留的,但您不太可能遇到问题.但是,这个约定是旧版本C的残余,其中为了命名结构需要这种语法,所以现在你可以简单地写下面的内容(省略typedef和typedef名称):

struct name_of_struct
{
   type1 member1;
   type2 member2;
   // ...
   typeN memberN;
};

是的,您可以在C的当前标准中使用单行注释("// ...").

  • _t确实由POSIX保留 (6认同)
  • 在没有其他人被允许使用这些名称的意义上,POSIX不保留_t.而POSIX实现可能只使用此表单的类型名称. (4认同)
  • 实际上,请参阅:http://www.gnu.org/s/libc/manual/html_node/Reserved-Names.html根据文档:"以'_t'结尾的名称是为其他类型名称保留的."当然,如果一个人总是在一个人的函数和类型名称前加上他们的库名称(例如"mylibrary_suchandsuchtype_t"),那么他们就不太可能与C标准库的未来版本发生冲突. (2认同)

Nor*_*sey 5

我使用Dave Hanson的C接口和实现中使用的命名约定:类型以模块名称和大写字母T命名.例如,序列的类型是Seq_T,哈希表的类型是Table_T.在Hanson用于#define缩写  的模块的实现中T.这基本上是适用于C编程的Modula-3约定,但我发现在短暂的初始冲击后它运行良好.