main.c не может прочитать функции, которые я объявляю в файле .h и определяю в другом файле .c (в C) - PullRequest
0 голосов
/ 12 февраля 2019

недавно я пытался понять использование extern и создать свой собственный заголовочный файл в c.Я написал простую программу, которая меняет значения чисел и показывает их.Конечно, я знаю, что могу сделать это более простым способом, но у меня есть проблема с моим кодом.Я написал в том же проекте main.c, header.c, header.h.

MAIN.c это то, что

#include <stdio.h>
#include <stdlib.h>
#include "header.h"

   int x,y;
  int main()
   {

 x = 3;
 y = 4;
 swap();
 show(x,y);
 return 0;


 }

Header.c это то, что:

    #include "header.h"

     void swap(){
     const int hilf = x;
     x=y;
    y=hilf;
    }

        void show (int i,int j)
    {
    printf("%d %d\n",i,j);
    swap();
    printf("%d %d\n",i,j);


    } 

и заголовочный файл таков:

        #ifndef HEADER_H_INCLUDED
        #define HEADER_H_INCLUDED
        #include <stdio.h>
        extern int x,y;
        extern void swap(void);
        extern void show(int,int y);

        #endif // HEADER_H_INCLUDED

Я получаю эту ошибку в основной функции:
"неопределенная ссылка на 'своп'" "неопределенная ссылка на 'шоу' '

Что я должен сделать, чтобы исправить код или где моя ошибка?

Я жду ваших ответов ..

1 Ответ

0 голосов
/ 12 февраля 2019
pi@raspberrypi:~/Downloads $ gcc main.c  
/tmp/ccmKPwcW.o : in the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status

но

pi@raspberrypi:~/Downloads $ gcc main.c  header.c 
pi@raspberrypi:~/Downloads $ 

вы пропустили ссылку на header.o

Конечно, можно через

pi@raspberrypi:~/Downloads $ gcc -c main.c 
pi@raspberrypi:~/Downloads $ gcc -c header.c 
pi@raspberrypi:~/Downloads $ gcc main.o
main.o : Ine the function « main » :
main.c:(.text+0x20) : undefined reference to « swap »
main.c:(.text+0x3c) : undefined reference to « show »
collect2: error: ld returned 1 exit status

Редактировать послезамечание об OP

-------------- Сборка: отладка в Deneme (компилятор: GNU GCC Compiler) --------------- mingw32-g ++. exe -o bin \ Debug \ trial.exe obj \ Debug \ main.o obj \ Debug \ main.o: в функции main ':

C: / Users / bb/Documents/trial/main.c:11: неопределенная ссылка на своп '

C: /Users/bb/Documents/trial/main.c: 12: неопределенная ссылка на `show'

collect2.exe: ошибка: ld вернул 1 состояние выхода Процесс завершен со статусом 1 (0 минут, 0 секунд) 3 ошибок, 0 предупреждений (0 минут, 0 секунд(s))

Как вы можете видеть в mingw32-g++.exe -o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\main.o, вы упускаете связь с header.o , потому что вы связываетесь два раза main.o .

Должно быть mingw32-g++.exe -o bin\Debug\trial.exe obj\Debug\main.o obj\Debug\header.o

Дополнительное замечание: header. * - очень странное имя для пары файлов, где один не является файлом заголовка

...