我正在学习C.这是我今天面临的一个问题。当我尝试为main.c
创建目标文件时,我得到:
cc -Wall -c main.c
main.c:6:18: warning: implicit declaration of function 'sum' is invalid in C99 [-Wimplicit-function-declaration]
我该如何避免这种情况?
functions.c:
int sum(int x, int y)
{
return x + y;
}
main.c:
#include <stdio.h>
#include "functions.h"
int main()
{
printf("%d", sum(1,1));
return 0;
}
function.h存在,但我没有在这里添加。
答案 0 :(得分:3)
通常,您的functions.h
会包含:
extern int sum(int x, int y);
可能包含标题保护,可能省略extern
* 。您应该在定义函数的文件中以及使用它的任何文件中包含标头。这两个部分都很重要;它们允许标题确保函数的使用与函数的定义一致。
C99要求在使用函数之前声明或定义函数,而不是像C ++。
FWIW:我通常使用GCC进行编译,通常使用选项:
gcc -g -O3 -std=c99 -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes \
-Wold-style-definition -Wold-style-declaration -Werror \
...other arguments as appropriate...
-Werror
表示我的代码在没有警告的情况下编译!您还会看到我将static
添加到单个文件程序中定义的函数以避免警告(也就是错误),尽管我并不总是懒得评论我为什么要进行此更改。
* 通常,标题应包含标题保护。对于既不需要任何其他headers也不定义任何类型的标题,几乎可以省略标题保护(无论如何我都将它们放入,但只要您认识到它们问题,省略它们也没关系。我更喜欢在函数上使用extern
,尽管没有必要。
对于变量,它是crucial。
答案 1 :(得分:1)
对于外观,您忘记输入
int sum(int x, int y);
在你的functions.h文件中
答案 2 :(得分:0)
制作两个文件:
functions.c:包含函数的定义
functions.h 包含函数的声明
*定义functions.c中的'sum'函数
*在functions.h中声明'sum'函数
答案 3 :(得分:0)
我不知道使用-Wall。您不包括funcion.c文件,然后您的程序将如何知道sum()。可能有不止一种方式实现这一点,但我描述的方式有两种 1) 你的文件名 function.h int sum(int x,int y) { 返回x + y; }
然后包括你的主要程序。 2) 文件名sum.c 然后求和函数 在编译时,您必须一次编译两个文件 cc sum.c main.c 那么你不会得到任何错误