LINUX.ORG.RU

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

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

Он так и делает. В виду того, что это приводит к разным ошибкам на уровне процессора (или библиотеки длинной арифметики, если разрядность процессора меньше типа), то в общем виде поведение программы, которая попытается делить на 0 — не определено. Что не так?

Не так то, что ты не понимаешь, что такое undefined behaviour в C. Undefined behaviour относится к поведению компилятора. В данном случае, если в коде есть деление на 0 без проверки, то компилятор может выдать любое говно. Например:

int a, b;
scanf("%d %d\n", &a, &b);
int c = a / b;

if(b == 0) {
  puts("OOOOPS!");
}

В данном случае, блок if будет выкинут, потому что компилятор считает, что b не может быть 0.

Собери программу с санитайзером (для gcc и clang -fsanitize=undefined,address). В бинарник будет вшита библиотека, которая остановить программу в случае UB и напишет где и когда оно произошло.

Повторюсь, ты не понимаешь, что такое undefined behaviour в C. Впрочем, мы уже выяснили выше, что ты и программировать-то не умеешь.

UBSan работает далеко не всегда. Это раз. Два, для его срабатывания нужно воспроизвести все условия в коде, что может быть сложнее чем кажется. А всё потому что каким-то кретинам почти 50 лет назад сложно было язычок спроектировать.

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

Он так и делает. В виду того, что это приводит к разным ошибкам на уровне процессора (или библиотеки длинной арифметики, если разрядность процессора меньше типа), то в общем виде поведение программы, которая попытается делить на 0 — не определено. Что не так?

Не так то, что ты не понимаешь, что такое undefined behaviour в C. Undefined behaviour относится к поведению компилятора. В данном случае, если в коде есть деление на 0 без проверки, то компилятор может выдать любое говно. Например:

int a, b;
scanf("%d%d\n", &a, &b);
int c = a / b;

if(b == 0) {
  puts("OOOOPS!");
}

В данном случае, блок if будет выкинут, потому что компилятор считает, что b не может быть 0.

Собери программу с санитайзером (для gcc и clang -fsanitize=undefined,address). В бинарник будет вшита библиотека, которая остановить программу в случае UB и напишет где и когда оно произошло.

Повторюсь, ты не понимаешь, что такое undefined behaviour в C. Впрочем, мы уже выяснили выше, что ты и программировать-то не умеешь.

UBSan работает далеко не всегда. Это раз. Два, для его срабатывания нужно воспроизвести все условия в коде, что может быть сложнее чем кажется. А всё потому что каким-то кретинам почти 50 лет назад сложно было язычок спроектировать.