Порядок вычисления в логических выражениях. - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Мне стыдно такое спрашивать, но всё же. Что-то нагуглить не получается. Есть выражение вида
A || B
Гарантируется ли, что

B

не будет вычислен в том случае, если

A == true

? Т.е. компилятор не может по своему желанию переставить аргументы? Интересует поведение и в

C

и в

C++

.

Решение задачи: «Порядок вычисления в логических выражениях.»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
int my_exit(int code)
{
    fprintf(stderr, "Something's wrong...\n");
    exit(1);
    return code;
}
 
int main()
{
    if(1 || my_exit(0))
        printf("Hello, World!\n");
    exit(0);
}

Объяснение кода листинга программы

В этом коде есть две функции: my_exit и main.

  1. Функция my_exit принимает целочисленный аргумент code и выполняет следующие действия:
    • Выводит сообщение об ошибке в стандартный поток ошибок (stderr): Something's wrong...\n.
    • Вызывает функцию exit с аргументом 1, что приводит к завершению программы с кодом ошибки 1.
    • Возвращает значение аргумента code.
  2. Функция main выполняет следующие действия:
    • Проверяет условие 1 || my_exit(0). Логическое ИЛИ возвращает истину, так как 1 истинно, а результат вызова функции my_exit с аргументом 0 (что приводит к возврату 1) также истинно. Таким образом, выполняется блок кода после этого условия.
    • Выводит сообщение Hello, World!\n в стандартный поток вывода (stdout).
    • Вызывает функцию exit с аргументом 0, что приводит к завершению программы без ошибок. Список действий:
  3. Вызов функции my_exit с аргументом 0.
  4. Вывод сообщения Something's wrong...\n в стандартный поток ошибок.
  5. Вызов функции exit с аргументом 1.
  6. Возврат значения аргумента 0.
  7. Проверка условия 1 || my_exit(0).
  8. Вывод сообщения Hello, World!\n в стандартный поток вывода.
  9. Вызов функции exit с аргументом 0.
  10. Завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы