在头文件中包含头文件并不会将其包含在实现文件中 - 或者我只是使用错误的命令进行编译?

时间:2011-11-23 08:12:01

标签: c gcc compilation include

好吧,我有一个标题(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编译为目标文件时(我需要它来链接其他文件)我来了:

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

我用于编译的命令是:

gcc -c my_prog.c -o my_prog.h

没有错误说它找不到来源。当我在实现文件中包含它时,它会编译无问题。

1 个答案:

答案 0 :(得分: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