【问题标题】:The reason why we need a function prototype for methods that is imported from its header file我们需要从头文件导入的方法的函数原型的原因
【发布时间】:2018-08-16 01:19:34
【问题描述】:

我目前正在研究 K&R 的指针。

在第 109 页中,作者声明了方法的函数原型

int getline(char *, int);
char *alloc(int);

即使在此之后,源文件也会在开始时导入它们的标准库。

#include<stdio.h>
#include<string.h>

他们的声明不是在他们的头文件中完成的吗?作者在自己的头文件中声明了这些方法的函数原型的原因是什么?

【问题讨论】:

  • Stdio.h & stdlib.h 不声明您的自定义函数。它们声明了大多数 C 编译器附带的标准库提供的函数。
  • 我不知道这本书,但是不知道吗?这些不是标准功能。也许他们在写它的时候回来了,但它一本非常古老的书。
  • POSIX 在那本书写成几十年后添加了一个getline() 函数,其原型与那本书不同。这可能会给您带来问题?

标签: c header-files function-prototypes


【解决方案1】:

有一个 getline 函数在 2010 年左右引入(在本书编写很久之后),但它与您提到的函数不同。库函数的原型是:

size_t getline (char ** __lineptr, size_t * __n, FILE * __stream) ;

C 中也没有alloc。有三个类似名称的库函数用于内存分配。

void *malloc(size_t n);
void *calloc(size_t n, size_t size
void *realloc(void *p, size_t size) 

我相信您会在 K&R 中找到上述函数作为库的一部分。

所以 K&R 必须声明 getlinealloc 函数的原型并实现它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多