C 如何处理term.h中的入侵标识符?
在测试一些代码(包括C 如何处理term.h中的入侵标识符?,c,identifier,C,Identifier,在测试一些代码(包括term.h)时,我发现了一些奇怪的错误,这些错误使用了常见的标识符,例如tab或columns。这是因为这个头定义了很多宏。以下是一些例子: /* from term.h */ #define columns CUR Numbers[0] #define lines CUR Numbers[2] #define bell CU
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]
但是,我没有找到任何关于这些宏常量的文档。它似乎是访问终端
数据结构的某些成员的快捷方式。当然,解决方案是#undef
源代码中使用的每个标识符。但它是非常严格的
所以我的问题是:为什么不在term.h的标识符前面加前缀?
它们通常在实际源代码中用作局部变量,因此会导致无法理解的错误 有两种方法来处理标识符冲突:
更改term.h中的标识符
更改代码中的标识符
第一个是否定的,我希望不需要解释原因<代码>术语.h
早在你的代码在大脑中形成思想之前就存在了。因此,创建冲突标识符完全是您的错^W问题^W的责任。:-)
也许还有另一个选择:
- 首先不要使用/包括
术语.h
awk'$1==“#定义“{print”#未定义“$2}”/usr/include/term.h
的结果。此文件已成为历史,更改它将破坏许多编译并使许多人感到困惑:-)@pbhd:I得到了,#undef tcsetattr(fd,
,这是一个语法错误。您需要使用regexp来匹配标识符。+1表示“不包含term.h
”。这对OP来说几乎没有什么有用的建议,但请在“不要使用过时的代码”类别。提及其他选项可能会使我的投票合法化;-)
嘿,我知道这是我的错。但是,这个标识符在源代码中经常使用,所以有点限制……但我同意你的答案。