2011-11-23 54 views
0

嗯,我有一個頭(my_prog.h),它看起來是這樣的:在頭文件中包含頭文件並不會將它包含在實現文件中 - 或者我只是使用錯誤的命令進行編譯?

#ifndef __MY_HEADER_H 
#define __MY_HEADER_H 
#include <stddef.h> 
typedef struct { 
    size_t something; 
    size_t something_else; 
} 
void my_func(); 
#endif 

和執行文件(my_prog.c)我放哪兒:

#include "my_prog.h" 
static size_t min(size_t a, size_t b) {...} 
void my_func() {...} 

當我嘗試編譯my_prog .C到目標文件(我需要它與其他文件鏈接)I FET:

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘min’ 

我使用的編譯的命令是:

gcc -c my_prog.c -o my_prog.h 

有沒有錯誤說它找不到源代碼。當我包含在實現文件中時,它將編譯沒有問題。

+0

後最低編譯代碼,請。 –

+0

我試圖重現你的問題。我沒有得到那個錯誤信息。我得到的是'my_prog.h:8:1:error:expected';',identifier或'('before'void''。(另外,我建議使用'-Wall'或者'-Wextra'當使用'gcc'編譯時) – ibid

+0

請投票結束問題,正如@ k_wisniewski的下面的註釋所述,由於使用了'ifdef'而不是'ifndef',所以這是一個錯誤 – INS

回答

3
  1. 從函數體中刪除...。擁有它們是一個語法錯誤。

  2. 您還沒有給出一個typedef名稱,結構和;丟失:

    typedef struct { 
        size_t something; 
        size_t something_else; 
    } foo; 
        ^^^^ 
    
  3. 在編譯行,繼-o你指定你的頭文件的名稱。這是不正確的。如果編譯進行得很順利(如果你修改上面的1和2,編譯器會擦除my_prog.h的原始內容,並用目標文件覆蓋它。相反,這樣做:可複製的問題

    gcc -c my_prog.c -o my_prog.o 
    
+0

確定這確實是一個愚蠢的問題,我加了......只是說有一些我不想寫在這裏的身體(因爲它不重要)真正的問題是在我的真正的代碼我實際上有#ifdef而不是#ifndef。可以關閉此主題。 –