C-跨包含文件的typedef

C-跨包含文件的typedef,c,C,我目前正在从事一个c项目,为了使我的代码有条理,我使用了include文件。一个文件includes.h有一个typedef,我不想在另一个包含文件util.h/util.c中访问它。我按照以下顺序将它们都包含在main.c中:includes.h util.h 主要条款c: util.h: util.c: 您需要添加 #include "includes.h" 在util.h中,以使代码能够编译 这是因为您依赖于可传递的include指令将MyStructType typedef从main.

我目前正在从事一个c项目,为了使我的代码有条理,我使用了include文件。一个文件includes.h有一个typedef,我不想在另一个包含文件util.h/util.c中访问它。我按照以下顺序将它们都包含在main.c中:includes.h util.h

主要条款c:

util.h:

util.c:

您需要添加

#include "includes.h"
在util.h中,以使代码能够编译

这是因为您依赖于可传递的include指令将MyStructType typedef从main.c获取到util.h,但在util.c中没有这样做


出于可维护性的目的,最好的解决方案是尽量减少对可传递包含的依赖:您应该在需要的地方包括includes.h。在本例中,在util.h中。

有关编译器错误的问题应该始终包括完整的错误消息。下次我会这样做,我认为没有必要,因为这不是一个明确的错误,但是我把系统弄错了。就我个人而言,我一次都不喜欢布拉格语。它是非标准的,它有一个严重的致命缺陷。看,谢谢,我要改变这一点。
#pragma once
struct structname
{
    int number;
};

typedef struct structname MyStructType;
#pragma once

#include "includes.h" //added line (>accepted answer)

int util_foo(MyStructType blabla);
#include <stdio.h>

#include "util.h"

int util_foo(MyStructType blabla)
{
    printf("%d\n", blabla.number);
    return 0;
}
#ifndef STH_SIMILAR_TO_FILENAME
#define STH_SIMILAR_TO_FILENAME
//code
#endif
#include "includes.h"