C - 包含文件的typedef

时间:2017-02-03 12:21:44

标签: c

我目前正在开发一个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

1 个答案:

答案 0 :(得分:1)

您需要添加

#include "includes.h"
<{1>}中的

以便编译代码。

这是因为您依靠传递util.h指令#include typedef从MyStructType转换为util.h,但是你'在main.c中没有做同样的事。

最佳解决方案(出于可维护性目的)是最大限度地减少对传递包含的依赖:您应该在{em>所需的任何地方包含util.c(在这种情况下,在{{1}中) })