I have this folder 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.
Internal linkage refers to everything only in scope of a translation unit. External linkage refers to things that exist beyond a particular translation unit. In other words, accessible through the whole program, which is the combination of all translation units (or object files).
The static keyword, when used in the global namespace, forces a symbol to have internal linkage. The extern keyword results in a symbol having external linkage.
The compilation error occurs because:
static
keyword (i.e. with internal linkage) inside lagrange.h
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With