C Unix环境中的高级编程第三版Edn和#xA7;7.8,未声明函数的默认返回值为int?
在第7.8节“内存分配”中,我了解到: 因为这三个alloc函数返回一个通用void*指针,如果我们#include(为了获得函数原型),当我们将这些函数返回的指针赋给不同类型的指针时,我们不必显式地强制转换它。未声明函数的默认返回值为int,因此在int类型的大小与函数返回值(本例中为指针)的大小不同的系统上,使用没有正确函数声明的强制转换可能会隐藏错误C Unix环境中的高级编程第三版Edn和#xA7;7.8,未声明函数的默认返回值为int?,c,function,C,Function,在第7.8节“内存分配”中,我了解到: 因为这三个alloc函数返回一个通用void*指针,如果我们#include(为了获得函数原型),当我们将这些函数返回的指针赋给不同类型的指针时,我们不必显式地强制转换它。未声明函数的默认返回值为int,因此在int类型的大小与函数返回值(本例中为指针)的大小不同的系统上,使用没有正确函数声明的强制转换可能会隐藏错误 我的问题是:我们可以使用未声明的函数吗?我认为我们不能,那么为什么“未声明函数的默认返回值是int”?我完全糊涂了…C89/C90不需要预先
我的问题是:我们可以使用未声明的函数吗?我认为我们不能,那么为什么“未声明函数的默认返回值是int”?我完全糊涂了…C89/C90不需要预先声明函数;C99和C11可以。这本书大概是在C99流行之前最后一次更新的 或者,自C99流行以来,本节并未更新——第三版似乎是在2013年出版的,这是在C99流行之后,尽管C11当时处于边缘状态。(我的第二个Edn是从2005年开始的,但是§7.8没有“未声明函数的默认返回值是
int
”这句话。因此,这可能是第三个Edn中的一个添加,在这种情况下,添加它的原因除了引起混淆外,还不太清楚。)
不管这本书的更新历史如何,C90在使用前不需要声明函数是准确的,并且假定这些未声明的函数返回int
。自C99以来,严格遵守C标准要求在使用所有函数之前声明它们
摩托罗拉M680x0芯片上的一些系统中,函数在An(地址)寄存器中返回地址,但在Dn(数据)寄存器(通常为A0和D0)中返回数字。在这样的系统上,没有正确声明函数可能会导致代码在错误的寄存器中查找返回值。C89/C90不要求预先声明函数;C99和C11可以。这本书大概是在C99流行之前最后一次更新的 或者,自C99流行以来,本节并未更新——第三版似乎是在2013年出版的,这是在C99流行之后,尽管C11当时处于边缘状态。(我的第二个Edn是从2005年开始的,但是§7.8没有“未声明函数的默认返回值是
int
”这句话。因此,这可能是第三个Edn中的一个添加,在这种情况下,添加它的原因除了引起混淆外,还不太清楚。)
不管这本书的更新历史如何,C90在使用前不需要声明函数是准确的,并且假定这些未声明的函数返回int
。自C99以来,严格遵守C标准要求在使用所有函数之前声明它们
摩托罗拉M680x0芯片上的一些系统中,函数在An(地址)寄存器中返回地址,但在Dn(数据)寄存器(通常为A0和D0)中返回数字。在这样的系统上,没有正确声明函数可能会导致代码在错误的寄存器中查找返回值。C89/C90不要求预先声明函数;C99和C11可以。这本书大概是在C99流行之前最后一次更新的。就是这样!为什么不发布你的答案,这样我就可以把它标记为最喜欢的呢?C89/C90不需要预先声明函数;C99和C11可以。这本书大概是在C99流行之前最后一次更新的。就是这样!你为什么不把你的答案贴出来,这样我就可以把它标记为最喜欢的?