Почему компилятор CodeBlocks не распознает функцию, которую я объявил в файле заголовка в C? - PullRequest
1 голос
/ 09 мая 2020

Недавно я изучал определение функций с помощью файла заголовка в C. Я следил за учебным курсом в Интернете, но столкнулся с проблемой: если я использую командную строку и запускаю исполняемый файл, созданный в папке моего проекта, он принимает входные данные из моего файла main. c и передает его через функцию, например Я ожидал, что это произойдет.

Команда, которую я ввел в командной строке, была: gcc matrix_product.c main.c

Внутри main я могу вызвать функцию (которую я назвал matrix_product), и она ее распознает. Однако, когда я пытаюсь создать его внутри CodeBlocks, компилятор показывает 2 ошибки:

undefined reference to 'matrix_product'

error: ld returned 1 exit status

Это код:

основной. c

#include <stdio.h>
#include <stdlib.h>
#include "matrix_product.h"
#define N 3

int main()
{
    int i,j;
    int m[N][N]={
                {1,2,3},
                {4,5,6},
                {7,8,9}
                };

    matrix_product(m,3);

    for(i=0;i<N;i++){ 
        if(i==1){printf("M^2 = ");
        }else{printf("      ");}

    for(j=0;j<N;j++){
         printf("%d ",m[i][j]);
    }
        printf("\n");
    }
    return 0;
}

матрица_продукт. c

#include <stdio.h>
#include "matrix_product.h"

void matrix_product(int m[][3],int DIM)
{
    int i,j,k;
    int tmp[DIM][DIM];

     for(i=0;i<DIM;i++){
        for(j=0;j<DIM;j++){
            tmp[i][j]=m[i][j];
            m[i][j]=0;
        }
    }

    for(i=0;i<DIM;i++){
        for(j=0;j<DIM;j++){
            for(k=0;k<DIM;k++){
                m[i][j]+=tmp[i][k]*tmp[k][j];
            }
        }
    }
}

matrix_product.h

#ifndef MATPROD
#define MATPROD

void matrix_product(int m[][3],int DIM);

#endif // MATPROD

1 Ответ

0 голосов
/ 09 мая 2020

main.c кажется единственным исходным файлом, добавленным к проекту в CodeBlocks. Добавьте исходный файл matrix_product.c в проект, используя Project->Add files, и он тоже скомпилирует его и свяжет (ld) с созданным им объектным файлом.

Просто файл находится в той же папке не заставляет CodeBlocks понять, что он должен включать файл в проект.

...