【发布时间】:2016-11-02 16:03:00
【问题描述】:
我试图找出 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;
}
【问题讨论】:
-
那么你在理解这个宏的哪个部分有困难?
-
所有的宏我都看不懂。我是C语言的新手。不知道什么是ERR,然后下一部分(perror(source....)然后不知道为什么有反斜杠,然后是FILE,LINE对我来说很难理解
-
ERR是宏的名称(这是代码定义的),perror,fprintf和所有其他东西都是 C 标准库的一部分,你可以找到他们的在线定义。而反斜杠仅表示宏定义在下一行继续(因此您不必将所有内容都限制在一行中) -
@hegendroffer:
__FILE__和__LINE__是宏,将扩展到当前文件/翻译单元和当前行号。快速goolge search would've told you