LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

но UB - это UB по определению

Капитан Очевидность в треде! Все в машину!

да и UB - это не неявное поведение.

А что это? Классический пример с UB:

#include <cstdio>
#include <cstdlib>
typedef int (*Function)();
static Function Do;
static int EraseAll() {
// return system(“rm -rf /”);
  return puts("OOOPS!");
}
void NeverCalled() {
 Do = EraseAll; 
}
int main() {
 return Do();
}

Объясни мне, почему это программа вызывает puts(), если явного вызова puts() из main() там нет? Собирать clang++ -O2 ....

Исходная версия hateyoufeel, :

но UB - это UB по определению

Капитан Очевидность в треде! Все в машину!

да и UB - это не неявное поведение.

А что это? Классический пример с UB:

#include <cstdio>
#include <cstdlib>
typedef int (*Function)();
static Function Do;
static int EraseAll() {
// return system(“rm -rf /”);
  return puts("OOOPS!");
}
void NeverCalled() {
 Do = EraseAll; 
}
int main() {
 return Do();
}

Объясни мне, почему это программа вызывает puts(), если явного вызова puts() из main() там нет?