我正在阅读PJ Plauger的“标准C库”,这真的很有趣。该书不仅说明了如何使用该库,而且还说明了其实现方法。
我已经阅读完本ctype.h
节,并且在标头中将函数声明为两个宏AND函数。例如
int isdigit(int);
但是也
#define isdigit(c) (_Ctype[(int)(c)] & _DI)
我不明白为什么两者都使用?
另外,如果我尝试重新创建自己的自定义ctype
标头和实现,则只有删除宏(注释中的注释),我才能成功编译。
书中并没有真正解释这方面。有人可以解释一下吗?
C标准中没有任何内容强制编译器将其实现为宏。宏很可能是C没有内联的旧时的残差。尽管如果需要,智能编译器应该能够内联该函数,而无需显式的内联关键字。因此,类似函数的宏之所以存在,是因为编译器是由不擅长编译器的人实现的。