C-函数具有内部链接,但未定义
我有以下文件夹结构: 我编写了一个简单的函数来测试文件夹结构,以查看是否所有头文件,但当我使用make命令编译时,出现以下错误: 警告:功能“stampa”具有内部链接,但未定义 在C-函数具有内部链接,但未定义,c,makefile,compilation,gnu-make,C,Makefile,Compilation,Gnu Make,我有以下文件夹结构: 我编写了一个简单的函数来测试文件夹结构,以查看是否所有头文件,但当我使用make命令编译时,出现以下错误: 警告:功能“stampa”具有内部链接,但未定义 在lagrange.h文件中,我有: #ifndef LAGRANGE_H static void stampa(int i); #endif /* LAGRANGE_H */ #include <stdlib.h> #include <stdio.h> #include <mat
lagrange.h
文件中,我有:
#ifndef LAGRANGE_H
static void stampa(int i);
#endif /* LAGRANGE_H */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
void stampa(int i){
printf("%d", i);
}
在lagrange.c
文件中,我有:
#ifndef LAGRANGE_H
static void stampa(int i);
#endif /* LAGRANGE_H */
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
void stampa(int i){
printf("%d", i);
}
#包括
#包括
#包括
#包括
无效stampa(int i){
printf(“%d”,i);
}
最后,intmain.c
我只是调用函数stampa
传递一个数字 错误解释:
发生编译错误的原因是:
lagrange.h
lagrange.h
包含在main.c
文件中,该文件与未定义函数的lagrange.c
文件不同main.c
文件时,会遇到没有任何关联定义的static
声明,并在逻辑上引发错误。错误消息是明确的
解决方案:
在您的情况下,解决方案是删除static
关键字,因为static
意味着该函数只能在定义它的.c文件中调用,而不是您的情况。此外,一个好的做法可能是在定义它的同一.c文件中声明任何
静态
函数,而不是在.h文件中。放在一边:您忘记在LAGRANGE.h
中放置#define LAGRANGE\u h
从LAGRANGE.h
中删除static
关键字,最好将头文件包含在相应的.c文件中。因此,在lagrange.cstatic
中应该有一个#include“lagrange.h”
,当定义函数时意味着“仅在这个源文件中”。如果将它放在头文件中,它要么没有意义,要么在包含它的每个文件中创建一个新的函数副本。不是你想要的东西。别忘了把东西放在匿名名称空间也会使它成为静态文件。e、 例如,名称空间{…}
仅对该代码转换单元可见。