如何处理term.h中的侵入式标识符?

时间:2012-12-23 17:20:00

标签: c identifier

测试一些代码,包括term.h,我看到了一些使用tabcolumns等常用标识符的奇怪错误。它来自这个标题定义了很多宏的事实。以下是一些例子:

/* 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的标识符前加上? 它们通常用作实际源代码中的局部变量,因此会导致难以理解的错误。

2 个答案:

答案 0 :(得分:5)

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

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

    首先是禁忌,原因是我希望无需解释。 term.h早在您的代码形成为您脑中的思想之前就已存在。因此,这完全是你的错误^ Wproblem ^创建冲突标识符的责任。 : - )

    也许还有另一种选择:

    • 首先不要使用/包含term.h

答案 1 :(得分:1)

假设您必须使用term.h,一个选项是将该文件包含在特定模块中,以便您的整体代码不会发生冲突。但正如Jens所说,“没有名字冲突”是你的任务。不应仅仅因为使用与这些文件相同的名称而更改属于系统的公共头文件。