Как работает оператор ## в макросе? - PullRequest
0 голосов
/ 20 апреля 2020

Я изучал некоторые макрооперации, и я получил этот код, и я не смог понять, как этот код на самом деле работает и генерирует вывод? и есть ли (i- +) оператор, который существует или нет? Вот код

#include<stdio.h>
#define p(a,b) a##b 
#define call(x) #x 
int main()
{ 
   do{ int i=14,j=3; 
   printf("%d",p(i-+,+j)); 
}while(*(call(625)+3)); 
return 0; 
} 

Вывод равен 10. Будет очень полезно, если вы объясните это несколькими примерами.

1 Ответ

3 голосов
/ 20 апреля 2020

## в макросе является оператором конкатенации, он склеивает свои операнды вместе. Таким образом, после завершения препроцессора это выражение будет

i-++j

, что, конечно, просто означает i - (++j), то есть 14 - 4, что, конечно, 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...