为什么这个define指令似乎不起作用?

时间:2014-02-06 10:49:34

标签: c

我是这里的菜鸟程序员。我正在努力学习C.我正在尝试让主程序运行另一个文件。但是,我收到编译时错误。我的IDE说:错误。函数print的隐式声明也表示ROW和COL没有在这里定义。当然我有3个文件,我不明白为什么我会收到这些错误。我想我在头文件中正确定义了ROW和COL,就像你应该的那样。有人能看到这个简单代码的问题吗?现在我有以下代码:

//p750_eightqueens.h
#ifndef P750_EIGHTQUEENS_H_INCLUDED
#define P750_EIGHTQUEENS_H_INCLUDED
#define ROW 8
#define COL 8

void go(int row, int col);

void print(int array[ROW][COL]);

#endif // P750_EIGHTQUEENS_H_INCLUDED

//p750_eightqueens.c

void go(int row, int col) {
int a[ROW][COL],i,j;
for(i=0;i<ROW;i++) {
    for(j=0;j<COL;j++){
        a[i][j]=(i==row&&j==col?1:0);
    }
}
print(a);
}

void print(int array[ROW][COL]) {
int i,j;
for(i=0;i<ROW;i++) {
    for(j=0;j<COL;j++){
        printf("%i",a[i][j]);
        if (j!=COL-1) printf(" ");
    }
    printf("\n");
}
} 
//now in main.c
#include<stdio.h>
#include<stdlib.h>
#include "p750_eightqueens.h"

int main(){

go(4,4);
return 0;
}

1 个答案:

答案 0 :(得分:5)

您还需要在p750_eightqueens.c中添加头文件。 您的.c文件彼此独立编译,因此您的p750_eightqueens.c不了解您的定义和函数声明。

如果您编译C程序,则每个编译单元(.c - file)都是自己编译的,并且需要该文件中使用的所有包含和声明。之后,您将拥有目标文件(.o),然后由链接器将其合并为单个可执行文件。链接器搜索已使用函数的实现并将它们放在一起,以便不同的编译单元可以调用其他函数。