C - функция имеет внутреннюю связь, но не определена - PullRequest
0 голосов
/ 27 июня 2018

У меня есть такая структура папок:

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 голосов
/ 29 июня 2018

Объяснение ошибки:

Ошибка компиляции возникает из-за:

  1. Вы объявили функцию с ключевым словом static (т.е. с внутренней связью) внутри lagrange.h
  2. И вы включили этот файл lagrange.h в main.c файл, отличный от lagrange.c, где функция не определена.

Поэтому, когда компилятор компилирует файл main.c, он встречает объявление static без какого-либо связанного определения и логически выдает ошибку. Сообщение об ошибке явное.

Решение:

В вашем случае решение состоит в том, чтобы удалить ключевое слово static, поскольку static означает, что функция может быть вызвана только в файле .c, где она определена, а это не ваш случай.
Более того, хорошей практикой может быть объявление любой функции static в том же файле .c, где она определена, а не в файле .h.

...