0

我不确定术语,所以我不知道如何表达我的标题;如果有人想用正确的术语编辑它,那很好。

当我编写代码时,我总是这样做,我猜是按时间顺序排列的。我把我的主要放在底部,然后向上工作。但是,我最近阅读了一个教程,该教程做了我以前从未见过的事情。

在顶部,在包含之后,程序员写道:

void inccell(int pos, int width, unsigned char *board);
void deccell(int pos, int width, unsigned char *board);

我以前没见过这个;我总是这样做void myfunction (args) { stuff }。在这种情况下,我还没有看到它带有;. 在此之后,在程序的更下方,他定义了函数的内容:

void inccell(int pos, int width, unsigned char *board)
{
    ++board[(pos-width)-1];
    ++board[ pos-width   ];
    ++board[ pos-width +1];
    ++board[ pos-1       ];
    ++board[ pos+1       ];
    ++board[(pos+width)-1];
    ++board[ pos+width   ];
    ++board[ pos+width+1 ];

    return;
}

void deccell(int pos, int width, unsigned char *board)
{
    --board[(pos-width)-1];
    --board[ pos-width   ];
    --board[ pos-width +1];
    --board[ pos-1       ];
    --board[ pos+1       ];
    --board[(pos+width)-1];
    --board[ pos+width   ];
    --board[ pos+width+1 ];

    return;
}

;和的函数的参数{ }是相同的,据我所知,它不是“重载”;我相信使用了重载,因此可以调用具有不同参数集的函数,即myfunc(myint, mystr, mybool)两者myfunc(myint, mystr)都可以有效。

我在那个陈述中可能是错的。

但是,有人可以向我解释为什么他在顶部声明函数,如果他没有重载,它的目的是什么?

谢谢。

4

2 回答 2

1

这些是函数声明。它们只是通知编译器这些函数的存在和签名,以便它们的定义可以出现在调用点之后:

void foo(); // DECLARATION

int main()
{
    foo(); // CALL (would be illegal without the declaration, because the compiler
           //       wouldn't know about foo(), since it hasn't met its definition yet)
}

#include <iostream>

void foo() // DEFINITION
{ 
    std::cout << "Hello, world!"; 
}
于 2013-05-25T15:11:51.193 回答
1

他首先是声明函数,然后是定义它。

在定义之前使用函数时需要前向声明。(这是强制性的)

如果函数在顶部定义,则不需要函数声明。

它用于编译器检查参数的数据类型 mathch,填充函数调用的地址(BACKPATHCHING)......

于 2013-05-25T15:12:02.947 回答