浅析C语言头文件和库的一些问题

 更新时间:2013年07月16日 10:22:45   作者:  
以下是对C语言中头文件和库的一些问题进行了详细的分析介绍,需要的朋友可以参考下
使用gcc的编译器 头文件没有包含stdlib.h,使用atoi函数(atoi函数在stdlib.h中才有声明),编译却没有出错

如果编译的时候加上-Wall选项,会有个警告,请问这是为什么?
这是因为C语言一个非常傻的规定:一个函数如果没有声明函数原型,其返回值类型就是int(所谓的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的头文件也不报错。至于这个警告,是为了避免你由于忘记声明函数原型而出错。

编译器对于没有定义过的函数原型直接当作它返回int,它不需要知道它已经定义过了
也就是说,当你以一个参数列表调用atoi时,编译器已经知道这个函数的参数列表是什么,它只不知道返回值而已,在这种情况下,编译器还需要什么额外的东西呢?它当然可以通过。
注意:编译器不关心某个函数在哪个头文件被定义,它只需要知道这个函数是什么原型即可
复制代码 代码如下:

#include<stdio.h>
//#include<stdlib.h>
int main()
{
int i;
double f;
char b[5] = "23";
char c[5] = "2.3";
i = atoi(b);
f = atof(c);
printf("i=%d f=%lf\n", i, f);
return 0;
}

gcc test.c -o test没有任何警告
gcc -Wall test.c -o test
出现警告:w9.c: In function `main':
w9.c:9: warning: implicit declaration of function `atoi'
w9.c:10: warning: implicit declaration of function `atof'
输出结果:
i=23 f=1717986918.000000
加上#include<stdlib.h>则结果正常
看来atoi和atof都在C标准库glibc中,但是很奇怪为什么C标准库函数sqrt和pow却不在glibc中

相关文章

  • C++ 虚函数表图文解析

    C++ 虚函数表图文解析

    最近学了设计模式中的简单工厂模式,对多态有了具体的认识。于是补了补多态、虚函数、虚函数表相关的知识,本文介绍了C++ 虚函数表,感兴趣的了解一下
    2021-05-05
  • 详细聊聊c语言中的缓冲区问题

    详细聊聊c语言中的缓冲区问题

    缓冲区又称为缓存,它是内存空间的一部分,也就是说在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,这篇文章主要给大家介绍了关于c语言中缓冲区问题的相关资料,需要的朋友可以参考下
    2021-11-11
  • Qt控件之QDialog使用及技巧小结

    Qt控件之QDialog使用及技巧小结

    QDialog是Qt中的一个类,继承自QWidget类,用于创建对话框窗口,可以显示模态或非模态的对话框,本文就来介绍一下Qt控件之QDialog使用及技巧小结,感兴趣的可以了解一下
    2023-10-10
  • C++实现扫雷游戏(控制台版)

    C++实现扫雷游戏(控制台版)

    这篇文章主要为大家详细介绍了C++实现扫雷游戏,控制台版的扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • c语言使用fdk_aac实现aac音频解码为pcm

    c语言使用fdk_aac实现aac音频解码为pcm

    这篇文章主要为大家详细介绍了c语言如何使用fdk_aac库实现aac音频解码为pcm的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • C语言堆与二叉树的顺序结构与实现

    C语言堆与二叉树的顺序结构与实现

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将详细介绍堆与二叉树的顺序结构与实现,需要的可以参考一下
    2022-05-05
  • C 二分查找 递归与非递归的实现代码

    C 二分查找 递归与非递归的实现代码

    C 二分查找 递归与非递归的实现代码,需要的朋友可以参考一下
    2013-03-03
  • C++中的各种容器的使用方法汇总

    C++中的各种容器的使用方法汇总

    这篇文章主要介绍了C++中的各种容器的使用方法,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • C语言数组入门之数组的声明与二维数组的模拟

    C语言数组入门之数组的声明与二维数组的模拟

    这篇文章主要介绍了C语言数组入门之数组的声明与二维数组的模拟,数组学习的同时也要相应理解C语言指针的作用,需要的朋友可以参考下
    2015-12-12
  • Qt项目实战之实现MP3音乐播放器

    Qt项目实战之实现MP3音乐播放器

    这篇文章主要为大家详细介绍了如何利用Qt实现MP3音乐播放器,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
    2023-03-03

最新评论