gpt4 book ai didi

c++ - GCC C++ 11无法看到#if Windows和#if linux(重新询问)

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:36 26 4
gpt4 key购买 nike

当使用DebianGCC4.7.2版中的IfWindows/IfLinux编译器功能时,我无法让它们在使用std11时正常工作。
独立地,我可以让编译器毫无怨言地接受if定义。我还可以让编译器在c++11中使用相同的代码,而不需要任何if定义(因此不是有条件的)。但是当我通过同一个编译器运行条件定义时,使用c++11的标记,代码被拒绝。
下面我包括了一个简单的例子,两个备用电源,以及我得到的错误。两条主电源之间的唯一区别是注释掉的线路。
跑:

g++ main.cpp -std=c++11 -o test

上面使用的是c++11标准。运行commented main时,它工作得很好。但是当运行未注释的main时,它完全失败,在本文的最后给出了错误。
g++ main.cpp -o test

上面没有使用c++11标准。当运行注释的main或未注释的main时,它工作得很好。
下面是代码示例。
评论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;
}

下面是在使用未注释的main.cpp编译时,使用c++11标志时出现的错误。
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语言模式(GNU C++)而不是标准语言模式(ISO C++);GNU语言包括扩展(额外的语言特性,在这种情况下,遗留OS常量)。当您传递-std=c++11标志时,您正在请求ISO语言模式,这意味着GNU扩展被禁用,包括GNU only常量。要同时获得GNU扩展和一组特定的ISO特性,请尝试请求GNU语言标准版本(例如-std=gnu++11工作正常)。

关于c++ - GCC C++ 11无法看到#if Windows和#if linux(重新询问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com