1
我想弄清楚在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(源....),然后我不知道为什么会有反斜杠,那么__FILE __,__ LINE__很难让我理解 – hegendroffer
' ERR'是宏的名称(这是代码定义的),'perror','fprintf'和所有其他东西都是C标准库的一部分,你可以在网上找到它们的定义,而反斜杠只是表示宏定义在下一行继续(所以你不必将所有东西都压缩成一行) – UnholySheep