我在使用Eclipse Indexer(Codan)时遇到了一些困难,它无法识别头文件中的某些数据声明。现在有一个新的偏好设置可以索引所有头文件变种,但很少有解释说明这是什么意思。启用该偏好设置似乎可以解决问题。但我仍然想知道该偏好设置确切的作用。
我在使用Eclipse Indexer(Codan)时遇到了一些困难,它无法识别头文件中的某些数据声明。现在有一个新的偏好设置可以索引所有头文件变种,但很少有解释说明这是什么意思。启用该偏好设置似乎可以解决问题。但我仍然想知道该偏好设置确切的作用。
a.h
,内容如下:#pragma once
#ifndef SYMBOL
#define SYMBOL int
#endif
struct S
{
SYMBOL sym;
};
现在,如果你像这样包含你的头文件:
struct UserSymbol
{
int i, j, k;
};
#define SYMBOL UserSymbol
#include "a.h"
S var;
int main()
{
var.sym.i = 123;
return 0;
}
如果是这样,Eclipse CDT可能无法识别sym.i
。
你可能有更复杂的例子,包含更深层的嵌套等等。
编辑:
但是,如果将a.h
包含在“索引所有特定头文件变量”列表中或勾选“索引所有头文件变量”,Eclipse将构建a.h
索引的几个变体,并且将“知道”您已定义了您的特定SYMBOL
。
sym.i
视为错误的构造,用波浪红线强调它,并标记警告符号(我认为这是最重要的),当您将鼠标指针放在i
符号上时不会显示提示。 - Serge Roussaks
也未被定义。 - ThomasMcLeodsym.i
?该头文件在模块中只被包含一次,并且在包含之前已经定义了SYMBOL
。我是否漏掉了什么? - ysapsym.i
”(以及为什么“可能”,在哪些情况下“可能”是“将会”?)。 除了一个我不理解的例子(尽管其他人理解了,特别是OP对答案感到满意),我也看不出从标题中“什么是头文件变体?”得到了回答。 - sancho.s ReinstateMonicaCellio