【问题标题】:Advanced Programming in the Unix Environment 3rd Edn, §7.8, the default return value for undeclared functions is int?Unix 环境中的高级编程第 3 版,第 7.8 节,未声明函数的默认返回值是 int?
【发布时间】:2016-10-31 02:00:46
【问题描述】:

APUE 3rd Edn,第 7.8 节,内存分配中,我读到了这个:

因为三个alloc函数返回一个通用的void *指针,如果我们#include(获取函数原型),当我们将这些函数返回的指针分配给不同的指针时,我们不必显式强制转换类型。未声明函数的默认返回值是 int,因此在没有正确函数声明的情况下使用强制转换可能会在 int 类型的大小与函数返回值(在本例中为指针)的大小不同的系统上隐藏错误。

我的问题是:我们可以使用未声明的函数吗?我认为我们不能,那为什么“未声明函数的默认返回值是 int”?我完全糊涂了……

【问题讨论】:

  • C89/C90 不需要预先声明函数; C99 和 C11 可以。这本书大概是在 C99 流行之前最后一次更新。
  • 就是这样!您为什么不发布您的答案,以便我可以将其标记为收藏?

标签: c function


【解决方案1】:

C89/C90 不需要预先声明函数; C99 和 C11 可以。这本书Advance Programming in the Unix Environment, 3rd Edn 大概是在 C99 流行之前最后一次更新。

或者,自 C99 流行以来,此部分没有更新 - 似乎第三版是在 C99 流行之后的 2013 年发布的,尽管当时 C11 处于临界状态。 (我的第二版来自 2005 年,但第 7.8 节没有“未声明函数的默认返回值是 int”这句话。所以,也许这是第三版中的一个补充,在这种情况下,它小于清楚为什么添加它而不是引起混淆。)

不管本书的更新历史如何,C90 并不要求在使用前声明函数,并且假定此类未声明的函数返回int,这仍然是准确的。从 C99 开始,严格遵守 C 标准要求所有函数在使用前声明。


在摩托罗拉 M680x0 芯片上的某些系统中,函数在 An(地址)寄存器中返回地址,但它们在 Dn(数据)寄存器中返回数字(通常是 A0和 D0)。在这样的系统上,没有正确声明函数可能会导致代码在错误的寄存器中查找返回值。

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多