c语言预编译问题
本帖最后由 涵天 于 2022-6-26 21:06 编辑c的预编译 #include <stdio.h> 是把所有 头文件内容 导入 还是 只导入函数声明? 为什么我用 #include "my.h" 导入自己写的简单头文件时, 再用 gcc -E 只进行预编译 出来的 预编译文件打开会显示 出完整的定义的函数?
这是hello.c
#include "my.h"
int main(void)
{
return my_function();
}
这是my.h
int my_function()
{
int variable = 0;
return 1;
}
void my_function2()
{
int variable2 = 0;
return 2;
}
# gcc -E hello.c -o hello_cpp.c
Administrator@windows MSYS ~/c
# cat hello_cpp.c
# 0 "hello.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "hello.c"
# 1 "my.h" 1
int my_function()
{
int variable = 0;
return 1;
}
void my_function2()
{
int variable2 = 0;
return 2;
}
# 2 "hello.c" 2
int main(void)
{
return my_function();
}
求解 谢谢! 哎呀my.h里面 第二个函数 void 返回2了 不过应该不影响这个问题吧 (汗 导入文件所有内容 风车呼呼呼 发表于 2022-6-26 21:11
导入文件所有内容
那为啥在预编译 时已经把头文件 全部复制进来 然后编译 汇编 之后为啥还要链接? 有点不懂 如果能回复一下就非常感谢了。。。 本帖最后由 jackz007 于 2022-6-26 22:09 编辑
顾名思义,include 就是包含的意思,代码编译的时候,被包含文件的全部内容会被物理地插入到 include 语句出现的位置,成为代码文件的一部分内容。
include 文件一般用在多代码文件项目中,通常是一个代码文件对应一个同名的 include 文件,其中主要定义同名代码文件中用到的数据类型、全局变量、常量、宏、函数声明等内容,一般不会出现实际代码。 涵天 发表于 2022-6-26 21:14
那为啥在预编译 时已经把头文件 全部复制进来 然后编译 汇编 之后为啥还要链接? 有点不懂 如果能回复一 ...
1.我不太了解是否有书籍上这么说,我印象里的第一步应该是叫作“预处理”,做一些文本式的处理(比如删除注释,按照预处理命令替换内容)
2.标准函数库包含头文件和库文件(分别存放标准函数的声明和具体定义),#include<stdio.h> 里面只是函数声明,假设要使用printf ()函数,那么就会把相应库函数链接到一起来。
3.也许你是初学,一个C程序是可以包含多个源文件的,所以需要链接。实际上,若你函数定义的那个文件与main函数文件在同一目录下,不使用include指令同样可以调用。如果是Linux环境就更直观,包含多个源文件的C程序在写编译指令时,就需要把每个文件名都加上,最终得到一个可执行文件
页:
[1]