【问题标题】:c source with headers and include [closed]带有标题的c源代码并包含[关闭]
【发布时间】:2023-12-11 21:13:01
【问题描述】:

在c头文件中,为什么我做的某些类型的define不用包含,只要在c文件中包含def就可以直接在header中使用?因为我认为这在 c++ 中是不可能的,例如:

定义.h

typedef int _int32;

object.h

_int32 num;

void   init();

object.c

#include define.h

void init()
{
 num = 12;
}

【问题讨论】:

  • 您能否用更多的停顿和标点符号重新表述您的问题?我不明白你问什么...
  • 如果这是你唯一的代码,这肯定不会编译。
  • 你在哪里包括object.h?这一切都不同。
  • 我的意思是我没有包含define.h,然后我直接在object.h中使用类型_int32,然后它编译得很好我不明白。
  • @user1051003 请使用您正在编译的完整示例更新您的代码(gcc -c object.c 应该成功)。正如 Oil 指出的那样,当前的示例将无法编译。当您的示例编译时,我保证以某种方式 define.h 包含在 object.h 之前,这就是它起作用的原因。

标签: c header init


【解决方案1】:

你不能。要么你的编译器错了,要么你错了(我打赌后者)。发布您的整个代码。

我猜你要么:

  • define.h 中包含object.h

  • 包含其他一些声明为num的文件

  • 你没有编译你的源代码

无论如何,在您发布实际代码之前,我们无法确定。

编辑:

如果您的问题是您可以在没有包含的情况下使用_int32,请记住_int32 在某些平台上可能是基本类型。但在您的示例中,您使用的是num,这是不可能的。

【讨论】:

  • 天哪,你找到了原因,我确实在其他地方包含了 object.h。谢谢
【解决方案2】:

永远不要包含 object.h,否则会起作用。但是,通常情况下,_int32 num 仍会在 .c 文件中。

【讨论】:

  • 他的问题是为什么它可以在不包含“object.h”的情况下工作。
【解决方案3】:

我不确定你的问题到底是什么,但你可以通过让编译器生成预处理输出并查看它来学到很多东西。

【讨论】:

    最近更新 更多