Для начала давайте рассмотрим, что возвращает функция printf
. Из C Standard
3 Функция printf
возвращает количество переданных символов или отрицательное значение, если произошла ошибка вывода или кодирования.
Так условие этого if
оператора
if(printf("Hello"))
оценивается как истинное, поскольку printf()
возвращает ненулевое значение.
Тогда этот switch
оператор
switch(printf("World"))
оценивается.
Теперь давайте рассмотрим, как работает оператор switch
. Из C Standard
4 Оператор switch
заставляет элемент управления переходить к инструкции, являющейся телом переключателя, или переходить от нее, в зависимости от значения управляющего выражения и от наличие метки по умолчанию и значений любых меток дел на или в теле переключателя. Метка регистра или значения по умолчанию доступна только в ближайшем включающем операторе switch.
Так как инструкция body оператора switch
не имеет метки (включая метку по умолчанию), то элемент управления передается мимо тела заявления. То есть оператор while
(который является оператором тела оператора switch
) не выполняется.
Если вы хотите получить ожидаемый вами результат, то, например, вставьте метку default
.
#include <stdio.h>
int main()
{
if(printf("Hello"))
switch(printf("World"))
default: while(printf("There"))
{
return 0;
}
}
В этом случае выходные данные программы будут
HelloWorldThere
Или использовать нулевой оператор как оператор тела оператора switch.
#include <stdio.h>
int main()
{
if(printf("Hello"))
switch(printf("World")); // <==
while(printf("There"))
{
return 0;
}
}