如何将C ++中的变量命名为函数调用?

时间:2012-11-05 03:24:23

标签: c++ allegro

在浏览一些快板教程时,我发现了一个奇怪的电话。

int al_init();

函数al_init()初始化allegro,以便可以使用allegro函数。 int al_init();行是什么?如果我更改代码的这一行以排除int它的工作方式相同,但如果我完全删除该行,则它不起作用。这条线在做什么?我唯一可以想象的是它创建了一个整数并为其赋予了al_init()函数的返回值,失败可能是-1而成功可能是0等。但是如果这是做什么的,那么你怎么能检查返回值?

3 个答案:

答案 0 :(得分:2)

在C / C ++中有函数声明和函数定义:

声明如下所示:

int a_function();
void another_function();
double yet_another_function();

说明:

  • 函数名称前的标识符(例如intvoiddouble)描述函数返回的值的类型。
  • 如果您没有指定一个,则默认为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,...);。所以它显然定义了一个函数原型而没有调用该函数。

C89和以前的规则是:

根据上述规则,另一条规则是: 对于隐式整数返回类型,假设原型被定义为任何可执行功能代码的外部。如果它在函数内部,它将被称为函数调用而不是函数原型定义。


除此之外,让我们从问题开始:

  

在浏览一些快板教程时,我发现了一个奇怪的电话。 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);