我正在搜索此信息一段时间。在互联网上搜索时,许多站点都说一个Function引用是这样写的:
//Example 1 #includevoid somma (int a, int b, int *c) { *c = a + b; } int main (void) { int a = 4; int b = 2; int c = 8; somma(a, b, &c); printf("Risultato somma: %d", c); return 0; }
但这就是我在学校学到的:
#includevoid somma(int a, int b, int &c) { c = a + b; } int main(void) { int a = 4; int b = 2; int c = 8; somma(a, b, c); printf("Risultato somma: %d", c); return 0; }
这实际上使我感到困惑,因为如果我尝试编译程序(编写的方式就像我在学校学习的那样),则会遇到编译错误,其中涉及到函数本身:
[ripasso2.c 2019-08-25 21:19:47.684] ripasso2.c:3:30: error: expected ';', ',' or ')' before '&' token void somma(int a, int b, int &c) { ^ [ripasso2.c 2019-08-25 21:19:47.684] ripasso2.c: In function 'main': ripasso2.c:13:5: warning: implicit declaration of function 'somma' [-Wimplicit-function-declaration] somma(a, b, c); ^~~~~
我究竟做错了什么?我把指针弄混了吗?
这个:
void somma(int a, int b, int &c) {
是不是有效的C语法。这是C ++语法。如果他们在学校以C的身分教给您,那就错了。
编译器会对此产生错误,然后还警告您somma
未声明该函数,因为无法正确处理该事实。这实际上只是一个错误。
有效的C声明是第一个:
void somma (int a, int b, int *c) {
如果要编译C ++版本(使用的版本int &c
),则必须使用g++
,而不是gcc
。您可以通过简单的安装sudo apt install g++
(假设您使用的是Linux),然后可以像使用一样编译程序gcc
。