为什么 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 明白它应该将文件包含在项目中。
我最近研究了使用 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 明白它应该将文件包含在项目中。