C/C++主函数是如何通过只包含.h文件就能找到.h文件中声明的函数定义的

程序从创建到成功运行的步骤:

  1. 预处理
    c/cpp语言预处理主要包括以下几个方面:
    a.宏替换
    使用 #define 指令可以在程序中定义宏,例如:

    `#define PI 3.1415926`
    

    预处理器在预处理阶段把c/cpp文件中的PI全部替换为3.1415926
    b. 头文件包含
    使用 #include 指令可以在c/cpp文件中引入头文件中的内容,例如:

    #include <stdio.h>`
    #include "myheader.h"`
    

    #include <stdio.h>这行代码被stdio.h里的内容替换,#include "myheader.h"这行代码被myheader.h里的内容替换,<>指的是标准库的代码," "指的是自己编写的代码。

  2. 编译(将c/cpp文件编译成汇编代码)

  3. 汇编(将汇编代码变成机器码,生成目标文件,每个.c文件都会生成一个目标文件

  4. 链接(生成可执行文件)

最后总结一下这个问题的答案CSDN

  1. 在编译c文件的第一步预处理时,#include “xxx.h”`的代码会被替换成"xxx.h"头文件里的内容,头文件中包含了函数声明,告诉编译器遇到这个函数先不要报错,链接的时候才会去寻找特定的函数定义。如果没有找到,链接就报错。并不是主函数去寻找的函数定义,而是链接器去找。 不是找h文件同名的c文件,而是由你指定链接的所有.o 或.out目标文件。
  2. 只有最后链接产生可执行文件的时候,才会去找每个函数的定义。去哪里找呢?就是去指定的库里找,库也是其他C文件产生的,那去哪些库里找呢,这个就是你要告诉编译器(准确说是链接器)的了,如果你用IDE开发的话,那可能是体会不到这个过程的,IDE帮你把你写的C文件产生的库都放到可以找到的位置了,如果是用gcc,那就需要用参数(-l -L)去指定这些库的名字及路径了。

使用VS进行测试:
创建了一个hello.h

#pragma once
void Hello();

创建了一个hello.cpp

#include <stdio.h>

void Hello() {
	printf("hello,world!");
}

创建了一个test.cpp

#include "hello.h";
int main() {
    Hello();
    return 0;
}

运行主程序输出"hello,world!",将hello.cpp改成任意名字,如a.cpp仍然能正确输出。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值