C / C ++函数定义

时间:2010-03-15 07:45:45

标签: c++ c printf declaration

昨天,我一直在观看有关编译器和链接器的讨论。它是关于C库函数定义的。我从未想过这一点,所以它激发了我做一些搜索,但我找不到我想要的东西。我想知道,您需要在源代码中添加的最小语法是什么才能启用printf()函数。我的意思是你需要来自stdio.h的函数声明。

3 个答案:

答案 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 ++)。