在浏览一些快板教程时,我发现了一个奇怪的电话。
int al_init();
函数al_init()
初始化allegro,以便可以使用allegro函数。 int al_init();
行是什么?如果我更改代码的这一行以排除int
它的工作方式相同,但如果我完全删除该行,则它不起作用。这条线在做什么?我唯一可以想象的是它创建了一个整数并为其赋予了al_init()
函数的返回值,失败可能是-1
而成功可能是0
等。但是如果这是做什么的,那么你怎么能检查返回值?
答案 0 :(得分:2)
在C / C ++中有函数声明和函数定义:
声明如下所示:
int a_function();
void another_function();
double yet_another_function();
说明:
int
,void
,double
)描述函数返回的值的类型。 int
(这就是当您从int
中移除int al_init()
时的原因,但是当您完全删除声明时却无法工作)void
意味着它不应该返回一个值(即使从技术上讲它可以,但这是为了罕见的情况)定义看起来像这样:
int a_function() {
std::cout << "hello world!";
int x = 1;
int y = 2;
return (x + y);
}
注意区别:
;
{
和}
,但没有;
!a_function
的函数,它不需要参数,并返回类型为int
的值。答案 1 :(得分:1)
你确定你没有看到函数声明吗?
答案 2 :(得分:1)
根据C的句法规则,原型定义为:
<return-type> function-name (param1, param2, ..);
函数调用定义为:
function-name(param1, param2,...);
。所以它显然定义了一个函数原型而没有调用该函数。
根据上述规则,另一条规则是: 对于隐式整数返回类型,假设原型被定义为任何可执行功能代码的外部。如果它在函数内部,它将被称为函数调用而不是函数原型定义。
除此之外,让我们从问题开始:
在浏览一些快板教程时,我发现了一个奇怪的电话。
int al_init();
这是不正确的,它看起来像一个函数原型或声明
函数al_init()初始化allegro以便使用allegro 功能可以使用。什么是int al_init();线?如果我 更改代码的这一行以排除int它的工作方式相同,但是如果 我完全取出它不起作用。
什么不起作用?停止编译?这很明显,因为它无法找到al_init()
函数。它没有“int”的原因也是因为它隐含地假设它返回一个整数。
这条线在做什么?
告诉编译器al_init()
库函数是在其他地方定义的,通常在.lib
或.a
或.dll
中,您可能希望在程序中使用它
我唯一能想到的是它会创建一个整数并分配 它是al_init()函数的返回值,
对代码的解释绝对不正确,它不会创建任何整数,也不会为其赋值。
因为失败可能为-1,成功等可能为0但是如果 这就是这样做,那么你怎么能检查回报 值?
由于您想知道该函数返回了什么,您可以在实际调用al_init()时执行此操作:
int retval = al_init();
printf("al_init() returned %d",retval);