В C, я использовал, чтобы иметь возможность использовать isnan
макрос без скобок в if
состоянии, как это:C Условный оператор скобки с IsNaN макро
#include <math.h>
#include <stdio.h>
void main() {
float x,y,z;
x=0; y=0; z=x/y;
if isnan(z) { // <--- no parens around isnan
printf("z isnan!");
}
}
компилируется на Ubuntu 15.10 с GCC 5.2. 1-22ubuntu2.
Однако на Ubuntu 16.04.1 LTS с GCC 4.7.4-3ubuntu12, я получаю эту ошибку компилятора GCC:
флагerror: expected '(' before '__builtin_isnan'
Какой компилятор позволяет мне опускать скобки в if
состоянии?
Нет, компилятор не позволит вам опустить скобки вокруг оператора 'if', хотя они могут быть предоставлены макросом (препроцессором). Ваш код отлично работает в MSVC, где (см. Следующий комментарий) 'isnan' является макросом * только на C *. –
isnan определяется как макрос в некоторых версиях и как функция в других. в c99 это макрос, поэтому опускание скобки может работать, так как оно должно быть заключено в скобки (как в примере @WeatherVane). возможно, '-std = c99' будет работать. –
Ссылка на комментарий от @ A.S.H Я редактировал свой предыдущий, который сказал: это может зависеть от того, как вы его реализуете. В MSVC я могу иметь # #define TEST (x) (a == x) ', а затем' int a = 1; если TEST (1) printf («Да \ n»); 'и никаких скобок не требуется. –