Как можно вызвать следующую программу never_called
, если она никогда не будет
вызывается в коде?
#include <cstdio>
static void never_called()
{
std::puts("formatting hard disk drive!");
}
static void (*foo)() = nullptr;
void set_foo()
{
foo = never_called;
}
int main()
{
foo();
}
Это отличается от компилятора компилятором. Компиляция с помощью Clang with
оптимизация включена, функция never_called
выполняется во время выполнения.
$ clang++ -std=c++17 -O3 a.cpp && ./a.out
formatting hard disk drive!
Компиляция с GCC, однако, этот код просто сбой:
$ g++ -std=c++17 -O3 a.cpp && ./a.out
Segmentation fault (core dumped)
Версия компиляторов:
$ 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) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.