gpt4 book ai didi

c - C中包含头文件时,是否会自动包含同名的.c文件?

转载 作者:太空狗 更新时间:2023-10-29 17:08:58 25 4
gpt4 key购买 nike

我在网上和教科书上都看了一圈,这让我很困惑。

假设您在 stack.c 中有一些堆栈函数,并将它们的原型(prototype)放在 stack.h 中。例如,您的主程序 test.c 在顶部有 #include "stack.h"。这就是所有示例的显示方式。

所以它包含了原型(prototype),但它是如何实现它们的呢?头文件似乎不需要您 #include stack.c 。它是否只是搜索同一文件夹中的所有 .c 文件并尝试找到它们?

最佳答案

没有;它仅包含标题。

您单独编译源代码,并将其与使用它的代码链接。

例如(玩具代码):

堆栈.h

extern int pop(void);
extern void push(int value);

堆栈.c

#include "stack.h"
#include <stdio.h>
#include <stdlib.h>

enum { MAX_STACK = 20 };
static int stack[MAX_STACK];
static int stkptr = 0;

static void err_exit(const char *str)
{
fprintf(stderr, "%s\n", str);
exit(1);
}

int pop(void)
{
if (stkptr > 0)
return stack[--stkptr];
else
err_exit("Pop on empty stack");
}

int push(int value)
{
if (stkptr < MAX_STACK)
stack[stkptr++] = value;
else
err_exit("Stack overflow");
}

测试.c

#include <stdio.h>
#include "stack.h"

int main(void)
{
for (int i = 0; i < 10; i++)
push(i * 10);

for (int i = 0; i < 10; i++)
printf("Popped %d\n", pop());
return(0);
}

编译

c99 -c stack.c
c99 -c test.c
c99 -o test_stack test.o stack.o

或者:

c99 -o test_stack test.c stack.c

因此,您编译源文件(可选择生成目标文件)并链接它们。通常,stack.o 文件会被放入一个库(而不是标准 C 库)中,您会链接到该库。当然,标准 C 库函数也会发生这种情况。 C 编译器自动将 C 库(通常是 -lc)添加到链接命令中。

关于c - C中包含头文件时,是否会自动包含同名的.c文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068002/

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