我试着制作一个简单的lexer,我找到了这个github页面:https://github.com/DoctorWkt/acwj/tree/master/01_Scanner,在他的源代码中我看到了:
数据.h:
...
#ifndef extern_
#define extern_ extern
#endif
extern_ int Line;
extern_ int Putback;
extern_ FILE *Infile;
...C.主要:
...
#define extern_
#include "data.h"
#undef extern_
...如果我只使用extern关键字,这个关键字不起作用,但它适用于extern_,那么有什么区别呢?
发布于 2020-09-03 18:40:48
#define extern_告诉预处理器,每当它看到它时,就用任何东西替换extern_。
所以在这种情况下,extern_没有任何意义。
但我敢打赌,在其他文件中,他们不使用#define extern_。在这种情况下,头文件中的#define extern_ extern被激活,因为#ifndef extern_是真(extern_尚未定义)。这告诉预处理程序将extern_替换为extern。因此,在一个文件中,变量是在没有extern的情况下定义的,而在其他所有文件中,它们都有extern。(这有什么用?如果你知道extern的工作原理,你就会知道原因)
https://stackoverflow.com/questions/63727664
复制相似问题