ifdef

时间:2015-10-06 11:47:34

标签: c++ typedef eclipse-cdt conditional-compilation indexer

我有索引器的问题。它批评了SOCKET在方法中的使用:

#ifndef TEST_H_
#define TEST_H_

#ifdef linux
typedef int SOCKET;
#endif

class Test {
public:
    void test(const SOCKET src);
};

#endif /* TEST_H_ */

我的eclipse版本是:版本:Luna Service Release 2(4.4.2)Build id:20150219-0600

我的CDT是8.6.0.201502131403

来自索引器的消息:输入' SOCKET'无法解决

一些事实:

  • ' linux的'定义了!
  • 如果我删除' ifdef'在typedef周围,索引器不再报告错误!

然而,代码将使用和不使用ifdef进行编译。但我想用ifdef解决索引问题。有什么想法吗?

此致 赖

1 个答案:

答案 0 :(得分:0)

ifdef是否在此屏幕截图中显示为灰色:

Screen Shot of Greyed out editor contents

如果是这样,那么CDT不知道定义了“linux”符号。要定义它,您可以选择一些选项,具体取决于您的设置。

Managed Make

托管制作意味着您让CDT为您创建makefile。

选项1:你是使用GCC的原生linux然后我怀疑出了问题,请提交一个bug。

选项2:您正在进行交叉编译,然后这是您项目/工作区的设置问题(不幸的是,此处需要更详细的信息)。

标准制作

标准制作意味着您自己编写makefile(或其他一些工具)。

选项1:您尚未在Eclipse CDT中运行构建,因此CDT不知道您的构建设置是什么。 CDT分析正在运行的make的输出以确定应该是什么设置。

选项2:您在CDT中运行make,但是命令回显被抑制(@ on命令)。尝试在没有它的情况下运行make。

选项3:您需要告诉CDT有关已定义的符号。告诉CDT:

  1. 打开项目属性(右键单击项目并选择“属性”)
  2. 打开“C / C ++ General” - “路径和符号”设置页面,然后选择“符号”选项卡
  3. 单击“添加”按钮以定义新符号
  4. 填写符号的详细信息。在你的情况下,你可能想要Name = linux和Value = 1(我在截图中使用了unknown_symbol,因为linux已经在我的系统上定义了)。您可能希望通过选中两个复选框将其应用于所有语言和所有构建配置。
  5. symbols

    1. 反复按OK,直到返回编辑器。您可能获得的其中一个对话框将提示您重建索引。对此说“是”。
    2. rebuild index prompt