Eclipse Luna CDT:什么是头文件变量?

3

我在使用Eclipse Indexer(Codan)时遇到了一些困难,它无法识别头文件中的某些数据声明。现在有一个新的偏好设置可以索引所有头文件变种,但很少有解释说明这是什么意思。启用该偏好设置似乎可以解决问题。但我仍然想知道该偏好设置确切的作用。

1个回答

3
假设你有一个头文件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


在这种情况下,“s”是什么? - ThomasMcLeod
@ThomasMcLeod,Eclipse会将sym.i视为错误的构造,用波浪红线强调它,并标记警告符号(我认为这是最重要的),当您将鼠标指针放在i符号上时不会显示提示。 - Serge Roussak
但是 s 也未被定义。 - ThomasMcLeod
@ThomasMcLeod,已修复。 - Serge Roussak
2
为什么Eclipse CDT无法识别sym.i?该头文件在模块中只被包含一次,并且在包含之前已经定义了SYMBOL。我是否漏掉了什么? - ysap
1
和@ysap一样,我不明白为什么“Eclipse CDT 可能无法识别sym.i”(以及为什么“可能”,在哪些情况下“可能”是“将会”?)。 除了一个我不理解的例子(尽管其他人理解了,特别是OP对答案感到满意),我也看不出从标题中“什么是头文件变体?”得到了回答。 - sancho.s ReinstateMonicaCellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接