测试一些代码,包括term.h
,我看到了一些使用tab
或columns
等常用标识符的奇怪错误。它来自这个标题定义了很多宏的事实。以下是一些例子:
/* from term.h */
#define columns CUR Numbers[0]
#define lines CUR Numbers[2]
#define bell CUR Strings[1]
#define insert_line CUR Strings[53]
#define tab CUR Strings[134]
但是,我没有找到任何关于这些macroconstants的文档。它似乎是访问TERMINAL
数据结构的某些成员的快捷方式。当然,解决方案是#undef
源代码中使用的每个标识符。但这是非常严格的。
所以我的问题是:为什么不在term.h
的标识符前加上?
它们通常用作实际源代码中的局部变量,因此会导致难以理解的错误。
答案 0 :(得分:5)
有两种方法可以处理标识符冲突:
term.h
首先是禁忌,原因是我希望无需解释。 term.h
早在您的代码形成为您脑中的思想之前就已存在。因此,这完全是你的错误^ Wproblem ^创建冲突标识符的责任。 : - )
也许还有另一种选择:
term.h
。答案 1 :(得分:1)
假设您必须使用term.h,一个选项是将该文件包含在特定模块中,以便您的整体代码不会发生冲突。但正如Jens所说,“没有名字冲突”是你的任务。不应仅仅因为使用与这些文件相同的名称而更改属于系统的公共头文件。