【发布时间】:2022-01-27 21:01:20
【问题描述】:
考虑下一段代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
int printf(const char *format, ...)
{
va_list args;
return 1;
}
int main()
{
printf("Hello there");
return 0;
}
确实,printf 什么也没打印。这意味着,编译器“更喜欢”这个函数而不是<stdio.h> 中声明的函数。但是C不允许函数覆盖,据我了解,它应该抛出一个冲突错误的错误。
谁能解释这种行为?
【问题讨论】:
-
不是 C 的错。询问链接器。
-
顺便说一句,如果你想以定义的方式替换
printf,请用另一个名称定义你自己的版本,例如MyPrintf,然后在函数内部定义int (*printf)(const char * restrict,...) = MyPrintf.虽然printf保留用于文件范围或外部链接,但您可以将其用于您自己的目的,使用块范围而不是链接。但是,您必须在要使用它的每个函数中定义它。
标签: c