2011-11-23 61 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。可以关闭此主题。 –