为什么 CodeBlocks 编译器无法识别我在 C 头文件中声明的函数?

Why is the CodeBlocks compiler not recognizing a function that I declared in a header file in C?

我最近研究了使用 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

这是代码:

main.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;
}

matrix_product.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

main.c 似乎是 CodeBlocks 中添加到项目中的唯一源文件。使用 Project->Add files 将源文件 matrix_product.c 添加到项目中,它也会对其进行编译,并使用它生成的目标文件 link (ld)。

只是将文件放在同一个文件夹中并不能使 CodeBlocks 明白它应该将文件包含在项目中。