2010-01-29 120 views
17
#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

为什么不能编译,我得到一条消息说隐式声明函数addNumbers()“隐式函数声明”是什么意思?

+0

除了之前的主声明功能的addNumbers,这里是我的2关于C风格美分(不适用于C++): 1)没有参数的函数应该有签名(void) - 因此'int main(void)'; 2)main应该返回C中的值 - 因此'return 0'是强制性的。 – 2010-01-29 10:43:25

+0

所以我怎么能打印它然后,因为当我运行它只是什么都没有显示,我试图从主要返回总和printf(addNumbers(a,b))改变;但无济于事 – bob 2010-01-29 10:45:30

+0

这是另一个问题。此外,我敢肯定,如果您使用stackoverflow.com – sharptooth 2010-01-29 10:47:19

回答

8

您需要在main()中调用它之前声明该函数。要么在主要之前移动它,要么至少在主要位置声明它。 此外,您应该在主函数的末尾添加return 0,因为它应该返回int

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
    return 0; 
} 
+1

@ruibm:_Also,你应该在概率的主要功能的结束,因为它应该返回int_添加返回0:**电话**那可选 – 2010-01-29 10:45:13

+2

是的,我知道它是,但它是一个良好的编程习惯和如果打开迂回模式,编译器会发出警告。 – rui 2010-01-29 10:49:26

+0

进一步挑剔,在C中它是一个“功能”,而不是“方法”。否则很好。 – Vatine 2010-01-29 10:56:05

6

您必须将整个addNumber()函数移动到main函数之上或提供原型。之前主要

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

int main() 
{ 
    int a = 4; 
    int b = 3; 

    addNumbers(a, b); 
} 

UPDATE

int addNumbers(int a, int b); 

int main() 
{ 
// code of main() here 
} 

int addNumbers(int a, int b) 
{ 
//code of addNumbers() here 
} 
4

看跌的addNumbers:后者做了以下方式

要打印,printf("%i",addNumbers(a, b));将在上述情况下显示7

19

要么在main()之前定义该功能,要么在main()之前提供其原型。

因此,无论这样做:

#include <stdio.h> 

int addNumbers(int a, int b) 
{ //definition 
} 

int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

或该:

int addNumbers(int a, int b); 

或:

#include <stdio.h> 

int addNumbers(int, int); 
int main() 
{ //Code in main 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ // definition 
} 
+0

作为一个方面说明,函数声明通常不是在.h文件中完成的吗? – Powerlord 2010-01-29 14:55:47

+1

@R。 Bemrose:当有多个源文件时,是的。当只有一个源文件时,就像这里一样,该函数应该声明为一个静态函数(因为它不需要从任何其他文件访问,因为只有一个文件需要编译)。 – 2010-01-30 06:01:38

1

使用它由main()之前或者添加一个原型之前声明函数在main()之前移动整个addNumbers函数。

2

您可以将整个功能,其中它被称为点以上,或使用功能的原型,就像这样:

#include <stdio.h> 

int addNumbers(int a, int b); // function prototype 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
+0

行为未定义。根据标准:您必须在使用之前声明该功能。 – 2010-07-20 07:06:13

2

你需要的addNumbers功能的正向声明或它的定义上升在第一次使用前:

// 2161304 
#include <stdio.h> 

// forward declaration 
int addNumbers(int a, int b); 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    addNumbers(a, b); 
} 

// alternatively move this up before main ... 
int addNumbers(int a, int b) 
{ 
    return a + b; 
} 

关于mainreturn

程序会无需编译。主要由标准定义的签名是:

int main(void) 
int main(int argc, char **argv) 

有三个便携式返回值:

0, EXIT_SUCCESS, EXIT_FAILURE 
它们在 stdlib.h定义

0

如果您的编译器符合C99标准,则会抛出错误“隐式声明”,因为默认提升在C99标准中已过时。如果您尝试使用C89标准进行编译,这将是允许的。

在C99标准函数原型是必要

0

由于编译器执行一个又一个线,它看到在函数调用时,它必须有关于函数的主要功能是calling.so的信息我的朋友在使用它之前需要告诉编译器该函数。

1

我同意声明和定义的事情,但我没有得到任何编译错误与上述code.My gcc版本是“4.4.1-4ubuntu9”。任何想法。

我做了一些修改,以测试代码。

#include <stdio.h> 

int main() 
{ 
    int a = 4; 
    int b = 3; 
    printf("%d", addNumbers(a, b)); // Printf added. 
} 

int addNumbers(int a, int b) 
{ 
    return a + b; 
} 
0

您必须在使用前声明该函数。 在处理功能时请记住这4个基本部分。

  1. 宣言
  2. 呼叫
  3. 定义
  4. 返回
相关问题