#include <stdio.h>
#include <ctype.h>
int main(void)
{
printf("%c\n", toupper('a'));
return 0;
}
执行结果:
使用自定义函数代替同名库函数
#include <stdio.h>
#include <ctype.h>
#define toupper(ch) xtoupper(ch)
int xtoupper(char ch){
puts("I'm function xtoupper.");
if('a' <= ch && ch <= 'z')
ch -= 'a' - 'A';
return ch;
}
int main(void)
{
printf("%c\n", toupper('a'));
return 0;
}
执行结果:
原因,尽管函数使用者调用的是库函数toupper()函数,但由于宏
#define toupper(ch) xtoupper(ch)
的替换原早于编译器后续进行的函数调用,导致执行完宏替换后,函数调用者书写的toupper已经被替换为xtoupper函数了。
这是上述技术得以实现的根本原因。