麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

淺析C語言頭文件和庫的一些問題

2020-01-26 15:59:36
字體:
來源:轉載
供稿:網友
使用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中
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 欧美中文字幕一区二区 | 中文欧美日韩 | 视频在线91| 一区二区三区欧美日韩 | 国产乱淫av一区二区三区 | 国产羞羞视频 | 日韩电影av在线 | 嗯~啊~用力~高h | 欧美 亚洲 视频 | av在线免费看网站 | 暴力肉体进入hdxxxx古装 | 欧美精品欧美极品欧美激情 | 欧美日韩a∨毛片一区 | 色播视频在线播放 | 最新在线中文字幕 | 免费99热在线观看 | 亚洲第一成网站 | 国产精品久久久久久模特 | 欧美精品免费一区二区三区 | 在线播放黄色网址 | 羞羞答答www网站进入 | 欧美一级精品片在线看 | 国产亲子伦在线观看 | 欧美性生交大片 | 国产又白又嫩又紧又爽18p | 国产一区二区欧美 | 欧美精品久久久久久久久久 | 久久精品视频1 | 密室逃脱第一季免费观看完整在线 | 欧美一区在线观看视频 | 久久久久一区二区三区四区五区 | 成人毛片100部 | 国产91九色 | 草莓视频在线导航 | 欧美精品一区二区久久 | 一级免费特黄视频 | 爱性久久久久久久 | 国产精品自在线拍 | 国产免费美女 | 看一级毛片 | 免费毛片观看 |