为什么这个C代码与一些编译器编译而不是其他编译器?

为什么这个C代码与一些编译器编译而不是其他编译器?,第1张

概述我在做作业时注意到我的笔记本电脑上的编译比我们预期用于提交的机器上的编译器更宽松.我的笔记本电脑上的C编译器是AppleClang 7.0.2.7000181,提交框上的编译器是g 4.9.2.回想起来不应该编译的代码是: #include <iostream>std::tuple<int, int> foo() { return std::make_tuple(1, 1);} 我在做作业时注意到我的笔记本电脑上的编译器比我们预期用于提交的机器上的编译器更宽松.我的笔记本电脑上的C编译器是AppleClang 7.0.2.7000181,提交框上的编译器是g 4.9.2.回想起来不应该编译的代码是:

#include <iostream>std::tuple<int,int> foo() {    return std::make_tuple(1,1);}int main() {    auto pair = foo();    int x = std::get<0>(pair);    int y = std::get<1>(pair);    std::cout << x << "," << y << std::endl;    return 0;}

我也有一个CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)project(foo)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -Wall -Werror -Werror=sign-compare")set(SOURCE_fileS main.cpp)add_executable(foo ${SOURCE_fileS})

在我的笔记本电脑上,Clang愉快地编译了这段代码并打印出1,1.没有错误,没有警告,没有.在提交框中,我没那么幸运.

/home/nate/foo/main.cpp: In function 'std::tuple<int,int> foo()':/home/nate/foo/main.cpp:3:26: error: return type 'class std::tuple<int,int>' is incomplete std::tuple<int,int> foo() {                          ^/home/nate/foo/main.cpp:4:12: error: 'make_tuple' is not a member of 'std'     return std::make_tuple(1,1);            ^/home/nate/foo/main.cpp: In function 'int main()':/home/nate/foo/main.cpp:8:21: error: 'voID pair' has incomplete type     auto pair = foo();                     ^/home/nate/foo/main.cpp:9:13: error: 'get' is not a member of 'std'     int x = std::get<0>(pair);             ^/home/nate/foo/main.cpp:10:13: error: 'get' is not a member of 'std'     int y = std::get<1>(pair);             ^

这些错误是有道理的,因为我没有包含元组头,但我不明白为什么这个代码在我的笔记本电脑上完全编译.这里发生了什么?

解决方法 不同的编译器有不同的头文件. C头文件与您正在使用的编译器密切相关.

你可能拥有的是Clang的< iostream>本身#include元组头文件,无论出于何种原因;因此,引用std :: tuple的代码只会通过#includeing< iostream>来快乐编译.头.

当然,这将依赖于编译器的特定行为.

不同的编译器有不同的头文件. C标准不禁止一个头文件自动包含另一个头文件;但是为了使用特定的类,模板或其他资源,确保代码可以引用此类,模板或其他资源的唯一方法是明确包含其头文件.

总结

以上是内存溢出为你收集整理的为什么这个C代码与一些编译器编译而不是其他编译器?全部内容,希望文章能够帮你解决为什么这个C代码与一些编译器编译而不是其他编译器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1221542.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存