Ошибка использования троичного оператора: "ОШИБКА: пустое значение не игнорируется, как должно быть"
(choice=='Y'||choice=='y')?((printf("\n...The program is now resetting...\n")&&(main()))):((printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0)));
Если я удалю exit(0)
вся программа работает правильно, но мне нужно включить exit(0)
,
Можете ли вы помочь мне?
3 ответа
От C11
стандарт, глава 6.5.13, Логическое И [&&
] оператор
Каждый из операндов должен иметь скалярный тип.
и из справочной страницы exit()
void exit(int status);
теперь void
не является допустимым значением (или скалярным типом). Итак, вы не можете написать
...:((printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0)));
|--------|
The return value of `exit()` is used
as one of the operands of `&&` here
Отсюда и ошибка. Вы не можете написать логику, используя возвращаемое значение exit()
(какой смысл, в основном?). Вы должны думать о чем-то альтернативном. (как звонить exit()
как самая следующая инструкция или подобное). Один из возможных подходов, упомянутый в ответе г-на @BLUEPIXY, заключается в использовании comma
оператор [,
], как показано ниже
.... (printf("\n\tThank you for trying out the BPCC App.\n")) , (exit(0))
Тем не менее, подход (вызов main()
рекурсивно) не считается хорошей практикой.
Попробуй это
(printf("message") && (exit(0),1))
или же
(printf("message") , exit(0))
Функция exit
объявляется следующим образом
_Noreturn void exit(int status);
Таким образом, вы не можете использовать его в таких выражениях
(printf("\n\tThank you for trying out the BPCC App.\n"))&&(exit(0))
Вместо оператора && вы можете использовать оператор запятой.
Таким образом, троичный оператор может выглядеть следующим образом
( choice == 'Y' || choice == 'y' )
? ( printf( "\n...The program is now resetting...\n" ) , ( void )main() )
: ( printf( "\n\tThank you for trying out the BPCC App.\n" ), exit( 0 ) );
Или следующим образом
( choice == 'Y' || choice == 'y' )
? ( printf( "\n...The program is now resetting...\n" ) , exit( main() ) )
: ( printf( "\n\tThank you for trying out the BPCC App.\n" ), exit( 0 ) );