C-函数具有内部链接,但未定义

时间:2018-06-27 20:26:38

标签: c makefile compilation gnu-make

我有这个文件夹结构:

structure

我编写了一个简单的函数来测试文件夹结构,以查看是否所有头文件都存在,但是当我使用make命令进行编译时,出现此错误:

  

警告:函数'stampa'具有内部链接,但未定义

我的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并传递一个数字。

1 个答案:

答案 0 :(得分:6)

错误的说明:

发生编译错误是因为:

  1. 您已在static内使用lagrange.h关键字(即具有内部链接)声明了一个函数
  2. 您已将此文件lagrange.h包含在main.c文件中,该文件与lagrange.c不同,其中未定义功能。

因此,当编译器编译main.c文件时,它将遇到没有任何相关定义的static声明,并在逻辑上引发错误。错误消息是明确的。

解决方案:

对于您而言,解决方案是删除static关键字,因为static意味着该函数只能在定义它的.c文件中调用,而不是您的情况。 br /> 此外,一个好的实践可能是在定义它的同一.c文件中而不是.h文件中声明任何static函数。