GCC C++11无法查看#if windows和#if linux(重新询问)
GCC C++11 Fails to See #if windows And #if linux (Re-ask)
当使用Debian GCC版本4.7.2中的#if-windows/#if-linux编译器功能时,我在使用std11时无法使它们正常工作。
独立地,我可以让编译器毫无怨言地接受if定义。我还可以让编译器使用与c++11相同的代码,不需要任何if定义(因此没有条件)。但是,当我通过相同的编译器运行带有c++11标记的条件定义时,代码会被拒绝。
下面我包括了一个简单的例子,有两个备用电源,以及我得到的错误。两条干线之间的唯一区别是注释掉的线路。
运行次数:
g++ main.cpp -std=c++11 -o test
上面使用的是c++11标准。当运行comment main时,它可以完美地工作。但是当运行未注释的main时,它完全失败了,在本文的最后给出了错误。
g++ main.cpp -o test
以上内容未使用c++11标准。当运行注释的main或未注释的main[/b>时,它可以完美地工作。
以下是代码示例。
注释main.cpp:
#include <iostream>
//#if windows
//#include "WindowsSolution.hpp"
//#endif
//#if linux
#include "LinuxSolution.hpp"
//#endif
int main()
{
std::cout << myGlobalSolution.out() << std::endl;
return 0;
}
LinuxSolution.hpp:
class LinSolution{
public:
LinSolution(){
}
std::string out(){
std::string ret("Linux solution");
return ret;
}
};
LinSolution myGlobalSolution;
WindowsSolution.hpp:
class WinSolution{
private:
WinSolution(){
}
std::string out(){
std::string ret("Windows solution");
return ret;
}
};
WinSolution myGlobalSolution;
未注释的main.cpp:
#include <iostream>
#if windows
#include "WindowsSolution.hpp"
#endif
#if linux
#include "LinuxSolution.hpp"
#endif
int main()
{
std::cout << myGlobalSolution.out() << std::endl;
return 0;
}
下面是我在使用c++11标志使用未注释的main.cpp进行编译时得到的错误。
main.cpp: In function ‘int main()’:
main.cpp:13:15: error: ‘myGlobalSolution’ was not declared in this scope
简单常量linux
是GCC的扩展,而不是官方的OS常量。Debian的适当常数可能是__gnu_linux__
;你可以在这里找到各种系统的列表。通常,官方预定义的常量遵循在开始时使用__
的惯例。
您的代码在没有标准标志的情况下工作,因为默认情况下GCC以GNU语言模式(GNUC++)而不是标准语言模式(ISO C++)进行编译;GNU语言包括扩展(额外的语言特性,在本例中是遗留的OS常量)。当您传递-std=c++11
标志时,您正在请求ISO语言模式,这意味着GNU扩展被禁用,包括仅GNU常量。要获得GNU扩展和一组特定的ISO功能,请尝试请求GNU语言标准版本(例如-std=gnu++11
运行良好)。
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在linux上调试巨大的C++项目
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- GCC C++11无法查看#if windows和#if linux(重新询问)
- 对函数的未定义引用,当在Windows上使用if定义时(在Linux上可以)
- 结构 ifreq : "linux/if.h"和手册页中的不同定义
- Visual Studio尝试包括linux头文件,尽管if语句