在C中使用自己的头文件调用函数

标签 c assembly project header-files

我是这个网站的新手,并且在 C 语言方面经验不足,所以请原谅我可能在不知情的情况下犯下的任何错误。 好的,所以我在 C 中有两个文件,一个包含一个函数,另一个使用该函数。我想我需要为其创建一个头文件,但不知何故我无法创建它并且需要帮助。 这是文件 1:

#include<stdio.h>
int tempc=25,tempf;
int c2f(int c);
void main()
{ 
tempf=c2f(tempc);
printf("Celsius = %d,Farenheit=%d \n",tempc,tempf);
}
int c2f(int c)
{
int f;
f=9*c/5 + 32;
return f;
}

这是文件 2:

#include<stdio.h>
int tempc=25,tempf;
extern int c2f(int c);
void extern show(void);
void main()
{
tempf=c2f(tempc);
show(); 
}

主要问题来了。您不妨考虑一下显示功能。 实际上,我被要求将 f1 转换为 .asm 文件(使用 tcc -S f1.c),然后添加一个使用汇编语言显示 fn 的模块,创建 .asm 文件的 .obj 文件,并使用 f2 的 .obj 文件,我必须将它们放入项目中,然后构建所有内容以创建 .exe 文件。但我相信,如果我可以简单地使用 2 个文件作为 .c (即 header 部分已解决)运行程序,我可以完成其余的工作。 最后一个问题是,是否可以按原样保留这两个文件,并创建一个头文件->将其设为 .obj 并将其添加到项目并构建?

衷心感谢所有试图提供帮助的人。

最佳答案

头文件旨在用作向其他 C 模块“公开”函数的机制。例如,您在 c2f.c 中定义一个 c2f() 函数,然后在 c2f.h 中创建一个原型(prototype)(本质上只是一个占位符)。 c2f.h 中的原型(prototype)如下所示:

int c2f(int c);  /* Note the semicolon */

c2f() 的实现是在程序集还是 c 文件中都没有关系。头文件仅允许 C 模块调用 c2f()。这是因为您提供链接器信息来查找函数的实际实现。然后,链接器会将对该函数的所有调用与实现的实际地址进行匹配。因此,要使用 c2f,只需在使用它的文件中引用 c2f.h:

/* main.c */
#include "c2f.h"
...

关于在C中使用自己的头文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469779/

相关文章:

c - 在 ARM7TDMI 上获取参数地址时 GCC 是否损坏?

pointers - MIPS 汇编指针到指针?

jira - 我可以使用 JIRA 管理多个客户项目吗

java - 可以在 Eclipse 中导入非归档项目目录吗?

c - 段错误 11,使用指针并返回它们的问题

c - 这两个 c/c++ 图像处理库之间有什么显着区别?

c++ - 如何将 dll 作为服务运行?

assembly - 递归地反转汇编语言中的位

c# - 在 C# 中监视文件更改

c - 使用文本解释器和 execl 打印 agruments