gpt4 book ai didi

c++ - 铛坚持编译未调用的函数

转载 作者:行者123 更新时间:2023-12-03 07:38:04 27 4
gpt4 key购买 nike

从使用英特尔编译器和VC迁移到Apple clang 12.0。
在我的代码中,某些项目从未调用过这些函数(但包含在其他项目中则需要使用)。 Clang坚持编译未调用的函数并检测错误,而Intel和VC只是跳过了编译。
对于某些项目,这些错误很难修复。
是否有一个Clang标志表示“如果不调用就不要编译”?
编辑:示例:

template <class T> class A
{
public:
void foo() { garbage }; // <--- syntax error
};

int main() {
A<int> my_obj;
//my_obj.foo(); // <--- when unremarked, will fail all compilers
}
Compiler Explorer demo: Intel vs. Clang
Intel和VC编译器会放松,直到对foo()的调用进入现场为止。

最佳答案

Clang具有一种试图像MSVC一样表现的模式。这是作为clang-cl的一部分引入的,clang-cl的驱动程序接受许多与MSVC相同的参数。您可以在user manualMSVC compatibility页面上找到有关它的一些信息。
长话短说,在clang中有一个-fdelayed-template-parsing选项可以接管模板的错误行为。据我所知,这并不是100%的匹配,但这已经足够了。
如果将其添加到Artyer的示例中,它将编译代码,请参见compiler-explorer
根据我在MSVC旁边添加clang作为第二个编译器的经验(我仍然在Windows上使用clang-cl,我不必处理多个OS和/或STL的复杂性),我想向您推荐将此选项作为临时工作来使工作正常进行。花点时间删除它,因为这将有助于使代码更易于维护。
编辑:如果您想更多地了解为什么编译错误是正确的选择,则可以查找2 phase lookup一词。您可以在以下MSVC编译器中找到其介绍的公告:https://devblogs.microsoft.com/cppblog/two-phase-name-lookup-support-comes-to-msvc/
从网上可以看到,intel编译器没有进行两阶段查找,或者至少没有报告错误。

关于c++ - 铛坚持编译未调用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65510205/

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