Я пытаюсь выяснить код на C, и я застрял в попытке понять, что делает часть препроцессора. Часть кода я не понимаю, заключается в следующем:Сложный синтаксис над препроцессором в C
#define ERR(source) (perror(source),\
fprintf(stderr,"%s:%d\n",__FILE__,__LINE__),\
exit(EXIT_FAILURE))
весь код очень короткий, и выглядит следующим образом:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ERR(source) (perror(source),\
fprintf(stderr,"%s:%d\n",__FILE__,__LINE__),\
exit(EXIT_FAILURE))
int main(int argc, char** argv) {
char name[22];
scanf("%21s",name);
if(strlen(name)>20) ERR("Name too long");
printf("Hello %s\n",name);
return EXIT_SUCCESS;
}
Итак, в какой части этого макроса у вас возникли проблемы с пониманием? – UnholySheep
все макрос я не понимаю. Я очень новичок в C. Я не знаю, что такое ERR, затем следующая часть (perror (source ....), тогда я не знаю, почему есть обратная косая черта, тогда __FILE __, __ LINE__ мне трудно понять – hegendroffer
' ERR' - это имя макроса (это то, что определяет код), 'perror',' fprintf' и все остальные элементы являются частью стандартных библиотек C, вы можете найти их определения в Интернете. И обратная косая черта просто означает определение макроса продолжается на следующей строке (так что вам не нужно вставлять все в одну строку). – UnholySheep