th3g3ntl3man
th3g3ntl3man

Reputation: 2106

C - Function has internal linkage but is not defined

I have this folder structure:

structure

I wrote a simple function to test the folder structure, for seen if all header file but when I compile with the make command, I have this error:

warning: function 'stampa' has internal linkage but is not defined

I the lagrange.h file I have this:

#ifndef LAGRANGE_H

static void stampa(int i);

#endif /* LAGRANGE_H */

and in the lagrange.c file I have this:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include <stdio.h>

void stampa(int i){
    printf("%d", i);
}

in the end, int main.c I simply call the function stampa passing them a number.

Upvotes: 20

Views: 34874

Answers (1)

Laurent H.
Laurent H.

Reputation: 6526

Explanation of the error:

The compilation error occurs because:

  1. You have declared a function with static keyword (i.e. with internal linkage) inside lagrange.h
  2. And you have included this file lagrange.h in main.c file different from lagrange.c, where the function is not defined.

So when the compiler compiles main.c file, it encounters the static declaration without any associated definition, and raises logically the error. The error message is explicit.

Solution:

In your case the solution is to remove the static keyword, because static means that the function can be called only in the .c file where it is defined, which is not your case.
Moreover, a good practice may be to declare any static function in the same .c file where it is defined, and not in .h file.

Upvotes: 41

Related Questions