4

测试一些代码,包括term.h,我看到一些使用常用标识符的奇怪错误,例如tabor 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]

但是,我没有找到有关这些宏常量的任何文档。这似乎是访问TERMINAL数据结构某些成员的捷径。当然,解决方案是针对#undef源代码中使用的每个标识符。但它是非常严格的。

所以我的问题是:为什么不给 的标识符加上前缀term.h
它们经常在实际源代码中用作局部变量,因此会导致难以理解的错误。

4

2 回答 2

5

有两种方法可以处理标识符冲突:

  1. 更改标识符term.h
  2. 更改代码中的标识符

第一个是禁止的,原因我希望不需要解释。term.h早在你的代码在你的大脑中形成一个想法之前就已经存在了。因此,创建冲突标识符完全是您的错^Wproblem^Wresponsibility。:-)

也许还有另一种选择:

  • 首先不要使用/包含term.h
于 2012-12-23T18:28:07.487 回答
1

假设您必须使用 term.h 的一种选择是将包含该文件的内容隔离到特定模块中,这样您的整体代码就不会发生冲突。但正如 Jens 所说,“避免名称冲突”是您的任务。属于系统的公共头文件不应仅仅因为您使用与它们相同的名称而被更改。

于 2012-12-23T19:04:21.100 回答