Когда вы набираете код if(a > b, c, d)
, вы используете оператор запятой (и не хотите).
Я не понимаю, что именно вы спрашиваете. Во всех случаях компьютеру приходится (иногда) делать три сравнения. Почему ты не можешь записать их все по буквам?
Возможно, вы могли бы использовать причудливые препроцессоры трюки, но в вашем конкретном случае вы не должны.
Конечно, тест if
может быть длинным выражением, которое занимает несколько строк. Допустимо и обычно писать что-то вроде
if (a > b
&& a > c
&& a > d
&& somelongandcomplexcondition(a,b,c)
&& a*a > 34)
Обратите внимание, что Ответ Руслана вычисляет макс. Возможно, вы не захотите, особенно если b
и c
являются длинными и сложными подвыражениями с побочными эффектами.
Подумайте, например, о тесте вроде if (c > 1 && a > 1 && a > b && a > b/c)
; Вы полагаетесь на ленивую оценку «а затем» &&
, чтобы избежать деления на ноль.
Если вы хотите узнать больше о C11 , см. Справочник C и обратитесь к его стандартному n1570 .
Если вы хотите узнать больше о C ++ 11 , см. Справочник C ++ и обратитесь к его стандарту n3337 (или другому, более молодому стандарту) как C ++ 17 ).
И C, и C ++ точно определяют, каким может быть оператор if
.
Не путайте C и C ++, они разные языки программирования, и оба они указаны в их стандартной спецификации. Некоторые компиляторы, в частности GCC , предоставляют расширения для них. Вы несете ответственность за решение использовать специфичные для компилятора расширения или придерживаться языкового стандарта (и надеяться, что ваш код будет компилироваться многими компиляторами, соблюдающими этот стандарт).
В некоторых особых случаях ваши тесты (или ваш код на C или C ++) настолько длинные и повторяющиеся, что вы могли бы рассмотреть некоторый подход метапрограммирования : затем вы напишите какой-нибудь скрипт (или некоторую метапрограмму) испускать C (или C ++) код в файле (и позже вы можете скомпилировать этот сгенерированный файл или #include
его и т. д.). Есть несколько примеров генераторов кода на C или C ++ (например, bison , SWIG и т. Д.), Которые могут вас вдохновить. Вы также можете использовать какой-нибудь универсальный препроцессор, такой как GPP или m4, или чтобы ваш скрипт на awk или python (или ваша другая программа на C ++) генерировал какой-то файл на C или C ++ и т. Д. Конечно, вы настроите свой автоматизация сборки (например, ваш Makefile
) для таких особых случаев.