如何确保用Xcode编写的代码(c ++)可以在其他平台上编译?

时间:2014-09-26 05:17:38

标签: c++ xcode platform

我是初学者试图在Xcode上做一些C ++编程。它工作正常,但当我尝试使用VS在我的Windows PC上编译相同的c ++文件时,出现了一些错误。在仔细查看我的代码后,我发现了一些导致错误的愚蠢错误,但Xcode似乎忽略了它们......

我的问题是,我需要更改任何设置以防止Xcode如此智能吗?

例如,以下代码实际上可以在xcode中编译:

#include <iostream>
using namespace std;

int main() {

    if (true or false){
        cout << "How is this possible? \n";
    }
    return 0;
}

还有其他情况下代码实际上是错误的,但它可以编译得很好Xcode这是烦人的部分,我想禁用它。

4 个答案:

答案 0 :(得分:1)

据我所知,您的代码没有任何问题。

ISO C ++标准未指定其他标准标头包含哪些标准标头。因此,Xcode直接或间接使用的iostream版本完全有可能包含ciso646。而Visual Studio的iostream版本不包括ciso646。其他标题有许多类似的情况。您只需要阅读错误消息并意识到您的错误(当您将文件移动到其他平台时)是由于缺少头文件。

答案 1 :(得分:1)

如果编写可移植代码意味着按照C ++标准规范编写代码会很好,但遗憾的是并非如此。虽然各种实现上有各种编译器选项可以帮助将不同的实现更紧密地结合在一起,但一般来说,您只需将代码放入目标环境并在那里进行实际测试。

因此,最终编写可移植代码意味着您必须学习所有要实现的实现所接受的C ++子集。


or是一个替代令牌&#39;在C ++中,VS拒绝它是不正确的。 Xcode中没有选项可以禁用对备用令牌的支持。但是,VS使用标头or作为宏具有<ciso646>的非标准支持,而Xcode确实有一个标头<ciso646>,它不执行任何操作(如标准所指定)。因此,您可以编写使用or的代码,并通过包含此标头在Xcode和VS中工作。

#include <iostream>
#include <ciso646> // does nothing in Xcode, allows `or` in VS
using namespace std;

int main() {

    if (true or false){
        cout << "How is this possible? \n";
    }
    return 0;
}

不幸的是,VS无法通过宏支持所有替代令牌,因此Xcode仍然会支持VS不支持的一些令牌。


  

还有其他情况下代码实际上是错误的,但它可以编译得很好Xcode这是烦人的部分,我想禁用它。

如果您提供具体示例,那么我可以提供有关如何编写可移植代码的其他建议。

答案 2 :(得分:0)

VS不支持or:您需要改为使用||

您可以添加一些特殊文件,但它不会将or充分注入语言,以便在所有实例中都可以使用。

如果你想抑制or的使用(你的编译器支持没有更好的方法)  #define它会发出编译器错误,例如

#define or OR

这至少意味着编译错误的性质在Xcode和VC上是相同的。

答案 3 :(得分:0)

我建议您使用其他开发环境对代码进行交叉检查,而不是更改Xcode设置。

如果您正在寻找便宜且全面的东西。下载VirtualBox Windows VM,并运行下载Dev C ++(bloodhshed)