gpt4 book ai didi

c - 包含另一个 .h 文件只能看到我的结构,但看不到我的函数

转载 作者:行者123 更新时间:2023-11-30 17:39:46 24 4
gpt4 key购买 nike

为了简单起见,假设我有一个 Page.h 文件,其中包含以下内容...

#ifndef PAGE_H
#define PAGE_H

typedef struct Pgmap{
int test;
}Page;

void printPage();
#endif

Page.c 定义 printPage() 并具有...

#include "Page.h"

而且,我还有另外一对使用上面的结构/函数的 .c/.h 文件。

在 Test.h 中我...

#include "Page.h"

,我的 Test.c 有

#include "Test.h"

此时我可以使用我的 Page 结构,但是当我尝试使用 printPage() 时,我在尝试编译时收到“ undefined reference 'printPage()' 错误。

那么为什么我的包含适用于结构,而不适用于函数?如果有什么区别的话,我的 gcc 是 gcc(SUSE Linux) 4.6.2

最佳答案

它之所以有效,是因为 header 包含结构的声明,但函数的代码位于 C 文件中。您需要将编译后的 C 文件(称为“目标文件”)链接在一起。

例如,将“Page.c”编译为“Page.h”,然后在构建“Test.c”时,也将其链接到“Page.o”,因为需要该模块的功能。

在 C 中,仅仅因为您在 C 文件中#include "something.h",编译器不会自动知道如何查找事物的定义在 header 中声明的内容(例如任何函数或外部变量)。

编译器基本上只能看到 header 文本,粘贴到#include 发生的位置。没有什么神奇的方法可以让它找到代码。您甚至可能没有相应的 C 文件,因为 C 支持分发二进制文件,即预编译库。

关于c - 包含另一个 .h 文件只能看到我的结构,但看不到我的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com