您的位置:首页 > 其它

待补遗(4)[C]如何让编译器调用自定义函数而非同名库函数

2014-10-25 17:45 351 查看
#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函数了。

这是上述技术得以实现的根本原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: