我目前正在开发一个c项目并保持我的代码组织我使用包含文件。一个文件includes.h
有一个typedef
,我不想在另一个包含的文件util.h/util.c
中访问它。我按以下顺序将它们包含在main.c
中:includes.h
util.h
。
main.c
:
#include <stdio.h>
#include <stdlib.h>
//similar includes
#include "includes.h"
#include "util.h"
int main()
{
MyStructType somename;
somename.number = 5;
util_foo(somename);
return 0;
}
includes.h
:
#pragma once
struct structname
{
int number;
};
typedef struct structname MyStructType;
util.h
:
#pragma once
#include "includes.h" //added line (>accepted answer)
int util_foo(MyStructType blabla);
util.c
:
#include <stdio.h>
#include "util.h"
int util_foo(MyStructType blabla)
{
printf("%d\n", blabla.number);
return 0;
}
我用这个命令编译:{{1}}
但这不编译,你知道为什么这不起作用吗?或者如何在不完全改变项目结构的情况下修复它?
编辑:
建议将gcc -o main *.c
替换为:
#pragma once
答案 0 :(得分:1)
您需要添加
#include "includes.h"
<{1>}中的以便编译代码。
这是因为您依靠传递util.h
指令将#include
typedef从MyStructType
转换为util.h
,但是你'在main.c
中没有做同样的事。
最佳解决方案(出于可维护性目的)是最大限度地减少对传递包含的依赖:您应该在{em>所需的任何地方包含util.c
(在这种情况下,在{{1}中) })