Как и следующие коды исполнения (коды одинаковы, за исключением запятой во второй строке)Неожиданное поведение макросов в C
Этот код, как ожидается, выполнить и делает так же.
#include<stdio.h>
#define SWAP(a, b) int t; t=a, a=b, b=t //note here is no semi-colon at the end
int main()
{
int a=10, b=12;
SWAP(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
Но следующий не ожидается работать как SWAP(a, b)
будет заменен int t; t=a, a=b, b=t;;
.so два с запятой должен произвести ошибку !!!
#include<stdio.h>
#define SWAP(a, b) int t; t=a, a=b, b=t; //note the semi-colon here
int main()
{
int a=10, b=12;
SWAP(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
где вы понимаете, что две точки с запятой должны вызывать ошибку? – filipe
Почему «два полуколония должны произвести ошибку []]? Пробовали ли вы простой тест, чтобы убедиться, что компилятор принимает ';;' (без использования вашего макроса)? Производит ли он какие-либо ошибки или предупреждения? –
«Два полуколония должны производить ошибку !!!» - Зачем? –