《c专家编程》第五章p102写到:c语言中可以通过编写与库函数同名的函数来取代该库函数的行为。而且不仅自己所进行的所有对该库函数的调用将被自己版本的函数调用所取代,而且所有调用该函数的系统调用也将用你的函数取而代之。
原来以为这种函数重名情况,编译器是会报错的,但是居然是直接取而代之,感到好奇,于是实验之。
在windows的codeblock上编写仍然编写同名函数,直接printf,代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
unsigned intstrlen(const char * str)
{
printf("It is my function!\n");
return 0;
}
int main()
{
const char ch[6] = "abcdef";
int length = strlen(ch);
printf("length:%d\n",length);
return 0;
}
运行之后结果如下:
还真的是这样!