微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有可以使用特定编译器编译的功能?

如何解决是否有可以使用特定编译器编译的功能?

因为我不确定是否可以在此处发布本书的示例代码,所以请让我用普通的单词来解释它。

我正在学习C,并在我的教科书中尝试了一些包含strerrorlen_s()strerror_s()代码。当我在macOS上使用clang编译代码时,遇到错误提示函数'strerror_s'/'strerrorlen_s'的隐式声明在C99中无效。

这本书的作者似乎使用可视C ++编译了代码,我猜想是因为我使用了不同的编译器而出现了错误。我猜对了吗?

请让我知道从教科书中张贴示例代码是否没有法律问题,您是否希望我这样做。我将添加代码

谢谢您的时间。

解决方法

您基本上是正确的。

strerrorlen_s()和strerror_s()是C11函数:https://en.cppreference.com/w/c/string/byte/strerror

您的Visual Studio编译器支持它们,而您的MacOS编译器显然不支持。

建议:针对“ C11支持MacOS”的Google,以查看针对您的特定环境哪些编译器支持C11。例如:

How to compile C++ with C++11 support in Mac Terminal

正如其他人指出的那样,您应该使用clang ++而不是g ++。 另外,您应该使用libc ++库而不是默认库 libstdc ++; libstdc ++包含的版本很旧, 因此不包含C ++ 11库功能。

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

如果尚未安装Xcode的命令行工具,则可以运行 编译器和其他工具,而无需使用xcrun 工具。

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp

如果有特定警告要禁用,您可以通过 编译器这样做的附加标志。警告结束时 消息中会显示最具体的标志,该标志将启用 警告。要禁用该警告,请在警告名称前添加no-。

,

与您使用与作者不同的C ++ 版本,这不太可能是编译器问题。重新阅读本书的开头。将会有一个引言或前缀,表明作者使用的C ++版本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。