#c #header-files
#c #заголовочные файлы
Вопрос:
Я пытаюсь создать свой первый заголовочный файл на C.
В одном каталоге находятся три файла.
myHeaderFile.h
// It is a good practise to only declare function in header file.
int myHeaderFunction();
myHeaderFile.c
#include "myHeaderFile.h"
int myHeaderFunction()
{
return 1;
}
main.c
#include<stdio.h>
#include"myHeaderFile.h"
int main()
{
printf("main function.n");
int output;
output = myHeaderFunction();
printf("%dn",output);
return 0;
}
Хронология:
- Я создал первый файл
myHeaderFile.h
и сохранил его. - Затем я создал
myHeaderFile.h
и сохранил его. - Затем я создал
main.h
и сохранил его. (Я не запускал ни один из приведенных выше файлов ‘ - Я открыл консоль и написал команду, как написано ниже.
- Затем я запускаю
main.h
, и он выдает ошибку, как указано ниже.
Я открываю консоль в том же каталоге и набираю:
gcc -Wall -o combined main.c myHeaderFile.c
Он создает файл с именем combined.exe
А затем я запускаю main.c, и он выдает ошибку
undefined reference to `myHeaderFunction'
collect2.exe: error: ld returned 1 exit status
Есть несколько ответов на ошибку
undefined reference to `myHeaderFunction'
, но она включает в себя слишком много функций, файлов и команд gcc, которые я не понимал как новичок.
Поэтому я прошу не закрывать этот ответ и дать решение, специфичное для этой проблемы.
Комментарии:
1. «И затем я запускаю main.c» — что это значит? Вы запускаете исполняемые программы, но не запускаете исходные файлы.
2. Вы работаете в Windows, верно? Разве вывод двоичного файла не должен быть с
.exe
расширением (-o combined.exe
)?3. » Все файлы создаются и хранятся таким же образом, как показано здесь». — Приводит ли приведенный вами пример к этой ошибке?
4. @Crowman Я открываю файл в VS Code (в котором был код) и нажимаю CTRL ALT N, который, я думаю, является командой для запуска. Но дает ли это какую-либо информацию для решения проблемы?
5. @Ash Вы не можете запустить
main.c
— это исходный код, а не исполняемый файл.combined.exe
создается программа, это то, что вы хотите запустить. И это ничего не делает. Вероятно, так оно и есть, но делает это так быстро, что закрывается еще до того, как вы успеваете его увидеть (он открывает новую консоль, печатает, а затем консоль закрывается, когда программа завершает свою работу). Запускайте./combined.exe
с консоли вместо двойного щелчка.