2014-02-06 85 views
1

我是一名菜鳥程序員。我正在努力學習C.我試圖讓一個主程序運行另一個文件。但是,我收到編譯時錯誤。我的IDE說:錯誤。函數print的隱式聲明,還有它說ROW和COL在這裏沒有定義。當然,我有3個文件,我不明白爲什麼我得到這些錯誤。我認爲我在頭文件中正確定義了ROW和COL,就像你應該這樣做。有人可以看到這個簡單的代碼有問題嗎?現在,我有以下代碼:爲什麼這個define指令似乎不起作用?

//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; 
} 
+0

tl; dr。嘗試將其歸結爲要點。 – thang

+0

'p750_eightqueens.c'實際上是否包含'#include「p750_eightqueens.c」'行? – unwind

回答

5

您需要在p750_eightqueens.c頭文件了。 您的.c文件彼此獨立編譯,因此您的p750_eightqueens.c不知道您的定義和函數聲明。

如果編譯C程序,每個編譯單元(.c -file)都是自己編譯的,並且需要該文件中使用的所有包含和聲明。之後,你有目標文件(.o),然後由鏈接器將它們合併爲一個可執行文件。鏈接器搜索所使用函數的實現並將它們放在一起,以便不同的編譯單元可以在其他函數中調用函數。

+0

謝謝。這是我第一次將其他文件添加到我的程序,所以很抱歉,如果這是一個愚蠢的問題。 –

+0

我添加了一些解釋,以防您不熟悉C編譯過程。 –

+0

非常有用謝謝! –

相關問題