好吧,我有一个标题(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
没有错误说它找不到来源。当我在实现文件中包含它时,它会编译无问题。
答案 0 :(得分:3)
从函数体中删除...
。拥有它们是语法错误。
您尚未为结构指定typedef名称且缺少;
:
typedef struct {
size_t something;
size_t something_else;
} foo;
^^^^
在编译行中,在-o
之后指定了头文件的名称。这是不正确的。如果编译顺利(如果你修复了上面的1和2),编译器会擦除my_prog.h
的原始内容并用目标文件覆盖它。而是做:
gcc -c my_prog.c -o my_prog.o