昨天,我一直在观看有关编译器和链接器的讨论。它是关于C库函数定义的。我从未想过这一点,所以它激发了我做一些搜索,但我找不到我想要的东西。我想知道,您需要在源代码中添加的最小语法是什么才能启用printf()函数。我的意思是你需要来自stdio.h的函数声明。
答案 0 :(得分:3)
printf()
的C99声明是
int printf(const char *restrict, ...);
但大多数编译器也会接受
int printf(const char *, ...);
另见C99第7.1.4节,§2:
如果可以声明库函数而不参考a中定义的任何类型 标题,也允许声明该函数并使用它而不包括它 相关标题。
注意:在这种情况下,restrict
限定符与const
一起使编译器承诺格式字符串永远不会在printf()
内修改,即使指针再次作为可变参数之一传递。
答案 1 :(得分:1)
定义通常在共享库中编译。声明就是您所需要的。范围内没有声明会调用未定义的行为。因此,对于每个库,您通常都有一组(一组)头文件和已编译的二进制共享/静态库。您可以通过包含适当的标头并与库链接来编译源。要在范围内引入声明,请使用#include
指令。例如。对于printf
你要做的事情:
#include <stdio.h>
int main() {
printf("Hello, world\n");
return 0;
}
但是,关于C或C ++的任何体面的书都应该已经详细介绍了这个并且有更好的例子。
答案 2 :(得分:0)
这取决于您的编译器和平台。
在大多数情况下只是声明
int printf(const char *, ...);
但是,您的特定编译器/平台或C库实现甚至可以更改此声明,以用于调用约定目的。
总而言之,尝试自己声明事情是不值得的,因为这可能违反了一个定义规则。在这种情况下,您应该始终包含适当的头文件stdio.h(cstdio for C ++)。