C - 函数具有内部链接但未定义
C - Function has internal linkage but is not defined
我有这个文件夹结构:
我写了一个简单的函数来测试文件夹结构,看看是否所有头文件但是当我用make命令编译时,我有这个错误:
warning: function 'stampa' has internal linkage but is not defined
我的 lagrange.h
文件我有这个:
#ifndef LAGRANGE_H
static void stampa(int i);
#endif /* LAGRANGE_H */
在 lagrange.c
文件中我有这个:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
void stampa(int i){
printf("%d", i);
}
最后,int main.c
我只是调用函数 stampa
传递给他们一个数字。
错误解释:
编译错误是因为:
- 您在
lagrange.h
中声明了一个带有 static
关键字(即带有内部链接)的函数
- 并且您已将此文件
lagrange.h
包含在不同于 lagrange.c
的 main.c
文件中,其中未定义函数。
所以当编译器编译main.c
文件时,它遇到没有任何相关定义的static
声明,并在逻辑上引发错误。错误消息是明确的。
解决方案:
在你的情况下,解决方案是删除 static
关键字,因为 static
意味着该函数只能在定义它的 .c 文件中调用,这不是你的情况.
此外,一个好的做法可能是在定义它的同一个 .c 文件中声明任何 static
函数,而不是在 .h 文件中。
我有这个文件夹结构:
我写了一个简单的函数来测试文件夹结构,看看是否所有头文件但是当我用make命令编译时,我有这个错误:
warning: function 'stampa' has internal linkage but is not defined
我的 lagrange.h
文件我有这个:
#ifndef LAGRANGE_H
static void stampa(int i);
#endif /* LAGRANGE_H */
在 lagrange.c
文件中我有这个:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <stdio.h>
void stampa(int i){
printf("%d", i);
}
最后,int main.c
我只是调用函数 stampa
传递给他们一个数字。
错误解释:
编译错误是因为:
- 您在
lagrange.h
中声明了一个带有 - 并且您已将此文件
lagrange.h
包含在不同于lagrange.c
的main.c
文件中,其中未定义函数。
static
关键字(即带有内部链接)的函数
所以当编译器编译main.c
文件时,它遇到没有任何相关定义的static
声明,并在逻辑上引发错误。错误消息是明确的。
解决方案:
在你的情况下,解决方案是删除 static
关键字,因为 static
意味着该函数只能在定义它的 .c 文件中调用,这不是你的情况.
此外,一个好的做法可能是在定义它的同一个 .c 文件中声明任何 static
函数,而不是在 .h 文件中。