首页 > 其他分享 >第四天——搞懂问题

第四天——搞懂问题

时间:2023-08-03 23:35:10浏览次数:41  
标签:文件 include 头文件 函数 stdio 问题 第四天 搞懂 main

问题1:#include <stdio.h> 和 #include "stdio.h" 有什么区别?

1、#include<>一般用于包含系统头文件,诸如stdlib.h、stdio.h、iostream等;
2、#include""一般用于包含自定义头文件,比如我们自定义的test.h、declare.h等。'

这是因为:
查找范围不同:
""会优先查找自己项目工程下文件,查到后就不会再去系统类库中找。
<>会从系统类库中去找。

问题2:stdio.h 文件在哪里?里面是什么内容?

预处理指令

发现都是#开头的。
#include 则是关注的重点,它的目的就是把多个编译单元(也就是c或者cpp文件)公用的内容,单独放在一个文件里减少整体代码尺寸;或者提供跨工程公共代码。

用gcc -E hello.c >cat.txt 将预处理时的操作给输出到cat.txt文件中,然后发现stdio.h在这里

然后按照路径去找。找到了

然后打开后发现其实和 cat.txt里前面内容差不多,extern 一些函数,以及include其它头文件,还有define一些魔数。

给出问题答案:stdio.h文件为usr/include下,里面的内容就是引用一些extern函数,include别的头文件以及用define定义一些宏或者魔数。
该问题参考文章
https://blog.csdn.net/weixin_45283376/article/details/123739001

问题3:为什么入口是 main 函数?可以写一个程序入口不是 main 吗?

这个问题作者给出了回答,main函数其实是由_start函数去调用,这个_start函数被定义在crt1.o中。
如果不用main函数,则需要做到_start函数执行的功能:

_start 函数主要功能有两个,第一是准备参数,我们的 main 不使用任何参数,所以这一部分可以忽略。
第二是处理返回值,具体的处理方式是使用 main 函数的返回值调用 exit 系统调用进行退出。
所以如果我们不使用启动文件的话,只需要自己使用系统调用退出即可。

如果不用启动文件,这时候指令为

gcc -e nomain -nostartfiles -c hello.c
ld -e nomain -o hello hello.o

其中-e指定了入口为nomain函数,而-nostartfiles则告诉编译器此时不用使用启动文件

标签:文件,include,头文件,函数,stdio,问题,第四天,搞懂,main
From: https://www.cnblogs.com/hanabi-521/p/17604762.html

相关文章

  • 算法工程师学习运筹学 笔记一 P,NP,NPC问题
    算法的时间复杂度我之前理解的时间复杂度,是指的解决一个问题所需要的时间。但其实并不准确,时间复杂度应该是 当问题规模扩大后,程序需要的时间长度增长得有多快。时间复杂度有两种类型:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;......
  • Java面试题 P56:微服务篇:微服务-什么是服务雪崩?怎么解决这个问题?
         ......
  • 安卓逆向8,解决app抓包抓不到的问题(转载)
    有时候app抓不到包,这不是工具的问题,而是你没有搞清楚网络协议,网络协议网络协议,比如http协议,这是全球通用的,大家约定好的,你要开发软件,就要遵守这个协议,浏览器都是只能抓到应用层,TCP/IP五层模型五层协议:应用层:用户使用的应用程序都归属于应用层,作用为规定应用程序的数据格式......
  • Java中properties文件中的中文乱码问题
    问题代码:1//目标:使用Properties读取属性文件中的内容。2//1、创建properties对象3Propertiesproperties=newProperties();456//2、使用properties对象加载属性文件中的键值对数据。7properties.load(newFileInputSt......
  • tflearn 数据集太大无法加载进内存问题?——使用image_preloader 或者是 hdf5 dataset
    tflearn数据集太大无法加载进内存问题?Hi,all!I'mtryingtotraindeepnetonabigdatasetthatdoesn'tfitintomemory.Isthereanywaytousegeneratorstoreadbatchesintomemoryoneverytrainingstep?I'mlookingforbehavioursimilartofit_genera......
  • 关于powerbuilder的全局函数重载问题
    今天在调试反编译器,发掘几个网上下载的源码,是pb7写的程序,总是报错。最后ue打开仔细观察,发掘在一个func内赫然放着2个函数体。在最开始开发反编译器时,是从最简单的struct和func开始开发的,所以当初为struct和func单独写了函数,而且认定func内只有一个函数体。这就奇怪了。莫非是以前我......
  • BFPRT 算法 (TOP-K 问题)——本质就是在利用分组中位数的中位数来找到较快排更合适的p
    下面为代码实现,其所求为前k小的数:#include<iostream>#include<algorithm>usingnamespacestd;intInsertSort(intarray[],intleft,intright);intGetPivotIndex(intarray[],intleft,intright);intPartition(intarray[],intleft,intright,intpivo......
  • 最小费用最大流问题,MCMF模板
    //最小费用最大流structMCMF{structnode{intvi,id,wi,ci;};constintinf=0x3f3f3f3f;intS,T,mxflow,cost;std::vector<int>dis,to,cur;std::vector<bool>vis;std::vector<std::vector<node>>......
  • 最大权匹配问题,KM模板
    classKM{public://MAXN最大点数oo无穷大staticconstintMAXN=405,oo=1000101010;intnl,nr,m;//左边的点数,右边的点数,边数intresult[MAXN];//左边点最大权匹配的匹配longlongans;KM(intnl,intnr,intm):nl(nl)......
  • 动态规划--选择问题
    1.路径选择1.1.HouseRobber给一个自然数数组,在不允许相邻取的情况下,求可取的最大和Input:[1,2,3,1]Output:4取1,3和为4方法:设定状态dp[n]表示前n项在不能相邻取情况下最大和取法的最大和(结果),要用前面信息表示dp[n]\[dp[n]=max(value[n]+dp[n-2],dp[n-1])\]defr......