Articles of неопределенное поведение

Is `y = x = x + 1;` неопределенное поведение?

Этот код: y = x = x + 1; неопределенное поведение в C?

Обоснование для сравнения указателей вне массива должно быть UB

Итак, стандарт (со ссылкой на N1570 ) говорит о сравнении указателей: C99 6.5.8 / 5 Реляционные операторы Когда сравниваются два указателя, результат зависит от относительных местоположений в адресном пространстве объектов, на которые указывает. … [snip очевидные определения сравнения в совокупности] … Во всех остальных случаях поведение не определено. Каково обоснование этого экземпляра UB, в отличие […]

Доступ к элементу массива с использованием неопределенного поведения char?

Поскольку непонятно, что такое неопределенное поведение и что нет в C, мне интересно, если доступ к элементу массива с использованием символа является неопределенным поведением. Например: char c = ‘A’; int a[3000]; printf(“%i\n”, a[c]); Я знаю, что на самом деле символы и ints являются взаимозаменяемыми, но, тем не менее, я не уверен.

Является ли неопределенный указатель разыменованным неопределенным поведением в Objective-C?

В C и C ++ разыменование нулевого указателя является неопределенным поведением. Как насчет Objective-C? Другими словами, что должен гарантировать этот код? *(long*)0 = 0; Предыстория: Интересно, может ли этот ответ вызвать неопределенное поведение, потенциально вызывающее случайные вещи, такие как оптимизируемое утверждение или даже более странные вещи. Конечно, я не поддерживаю это. Тем не менее, важно […]

Если функция никогда не возвращается, она действительна, чтобы опустить оператор return

Рассмотрим функцию foo() которая никогда не сможет выйти: int foo(int n) { if(n != 0) return n; else for(;;); /* intentional infinite loop */ return 0; /* (*) */ } Действительно ли C опускает окончательный возврат-заявление? Будет ли это вызывать неопределенное поведение, если я оставлю это окончательное утверждение?

Чтение неопределенного значения вызывает UB?

Различные уважаемые, высокопоставленные пользователи на SO продолжают настаивать на том, что чтение переменной с неопределенным значением «всегда UB». Итак, где именно это упоминается в стандарте C? Очень ясно, что неопределенное значение может быть либо неопределенным значением, либо ловушечным представлением: 3.19.2 неопределенное значение либо неопределенное значение, либо ловушечное представление 3.19.3 неопределенное значение действительное значение соответствующего типа, […]

Как будут обрабатываться операнды внутри (a + = 3, 5, a), чтобы напечатать значение «a»?

Фрагмент кода: int main() { int a = 1, b = 2, c = 3; printf(“%d”, a += (a += 3, 5, a)); } Хотя он отображает 8 в терминале в качестве выхода. Но я не понимаю эту концепцию.

Это неопределенное поведение в C / C ++

int foo(int c){ return c; } int main(void){ int a=5,c; c = foo(–a) + a; } Будет ли он ссылаться на неопределенное поведение в C / C ++? Думаю, что нет. После прочтения всех ответов я не могу понять, является ли это неопределенным поведением или неопределенным поведением.

Любой компилятор C, где «==» оценивается больше одного?

Поскольку любое ненулевое значение означает true, но операторы > , < , == и т. Д., Возвращающие 1 для true, мне любопытно, есть ли какие-либо известные компиляторы C, где эти операторы могут привести к значению, превышающему 1 . Другими словами, существует ли какой-либо компилятор, где int i = (a==b) ; приведет к неопределенному поведению, если […]

Точки последовательности при вызове функций в C и неопределенное / неуказанное поведение

Я пытаюсь настроить свое понимание точек последовательности на C – просто хотел что-то проверить. В настоящее время я считаю, что (1) не определено, тогда как (2) просто неопределено, исходя из того, что в (2) есть точки последовательности после оценки аргументов для g и h (поэтому мы не изменяем i два раза между точки последовательности), но […]