相关疑难解决方法(0)

未在代码中调用的函数在运行时调用

format_disk如果以下程序从未在代码中调用过程,如何调用它?

#include <cstdio>

static void format_disk()
{
  std::puts("formatting hard disk drive!");
}

static void (*foo)() = nullptr;

void never_called()
{
  foo = format_disk;
}

int main()
{
  foo();
}
Run Code Online (Sandbox Code Playgroud)

这与编译器不同.通过优化启用Clang进行编译,该函数never_called在运行时执行.

$ clang++ -std=c++17 -O3 a.cpp && ./a.out
formatting hard disk drive!
Run Code Online (Sandbox Code Playgroud)

但是,使用GCC进行编译时,此代码只会崩溃:

$ g++ -std=c++17 -O3 a.cpp && ./a.out
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

编译器版本:

$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
$ gcc --version
gcc (GCC) 7.2.1 20171128
Copyright (C) …
Run Code Online (Sandbox Code Playgroud)

c++ g++ compiler-optimization undefined-behavior clang++

24
推荐指数
1
解决办法
2262
查看次数