代码之家  ›  专栏  ›  技术社区  ›  Oliver

奇怪的Eclipse C++定义行为

  •  0
  • Oliver  · 技术社区  · 17 年前

    (过度依赖IDE的情况)

    我有一些遗留C代码,我编译为C++用于单元测试的目的。C源是C++中有条件的 基于环境。

    例如( PRIVATE static ):

    #if!defined __cplusplus
    #define PRIVATE1 PRIVATE
    #endif
    

    ...

    PRIVATE1 const int some_var;
    

    问题是我似乎不知道是什么 PRIVATE1

    我搜索了MinGW /GCC包含路径,C++ ISO规范和C++书籍对我来说都是徒劳的。

    编辑:

    当然,我在发布之前检查了命令行和makefile。

    7 回复  |  直到 9 年前
        1
  •  5
  •   Pavel Minaev    17 年前

    在ISO C++中没有什么比这更可能的了。 PRIVATE1 PRIVATE )在项目的其他地方定义。请注意,这不需要是一个 #define 在.h文件中-它也可以通过makefile中的编译器开关定义。我建议在项目目录上做一个完整的grep。

        2
  •  4
  •   eduffy    17 年前

    如果 PRIVATE1 决心 PRIVATE 私有的 决心 static 然后 私家车1 决心 静止的 .

        3
  •  2
  •   anon anon    17 年前

    不太可能(但并非不可能)它们是由MinGW本身定义的。由C++或C实现的宏应该从下划线开始。

        4
  •  2
  •   Oliver    17 年前

    Eclipse C++托管项目有点,很愚蠢!

    #ifdef __cpluplus.
    

    然后,该项目由g++链接。

        5
  •  1
  •   Dolphin    17 年前

    最好的办法是查看预处理器的输出。您没有发布您正在使用的编译器,但是如果您检查文档,大多数文档都有一个选项“预处理到文件”,这将创建一个替换了所有宏的文件。这可能会帮助您了解发生了什么。在VisualStudio中,您使用/E选项(在C/C++->Preprocessor->Generate Preprocessed File下),该选项将foo.C转换为foo.i。与原始源文件相比,该文件通常是巨大的,因此向下滚动到底部以查看您的代码。

        6
  •  0
  •   Andreas Bonini    17 年前

    最有可能的是C++,它定义为“私有”。

        7
  •  0
  •   xian    17 年前

    你能用PRIVATE1声明一个函数吗?如果是这样,只需编写如下函数:

    PRIVATE1 void Foo() {
        // __FUNCSIG__ in Visual Studio, not sure about GCC
        std::cout << __FUNCSIG__ << std::endl;
    }