a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > C > 正文

淺析C語(yǔ)言頭文件和庫(kù)的一些問題

2020-01-26 15:59:36
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
使用gcc的編譯器 頭文件沒有包含stdlib.h,使用atoi函數(shù)(atoi函數(shù)在stdlib.h中才有聲明),編譯卻沒有出錯(cuò)

如果編譯的時(shí)候加上-Wall選項(xiàng),會(huì)有個(gè)警告,請(qǐng)問這是為什么?
這是因?yàn)镃語(yǔ)言一個(gè)非常傻的規(guī)定:一個(gè)函數(shù)如果沒有聲明函數(shù)原型,其返回值類型就是int(所謂的implicit declaration)。由于atoi恰好真返回int,所以你即使不包含它的頭文件也不報(bào)錯(cuò)。至于這個(gè)警告,是為了避免你由于忘記聲明函數(shù)原型而出錯(cuò)。

編譯器對(duì)于沒有定義過(guò)的函數(shù)原型直接當(dāng)作它返回int,它不需要知道它已經(jīng)定義過(guò)了
也就是說(shuō),當(dāng)你以一個(gè)參數(shù)列表調(diào)用atoi時(shí),編譯器已經(jīng)知道這個(gè)函數(shù)的參數(shù)列表是什么,它只不知道返回值而已,在這種情況下,編譯器還需要什么額外的東西呢?它當(dāng)然可以通過(guò)。
注意:編譯器不關(guān)心某個(gè)函數(shù)在哪個(gè)頭文件被定義,它只需要知道這個(gè)函數(shù)是什么原型即可
復(fù)制代碼 代碼如下:

#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
出現(xiàn)警告:w9.c: In function `main':
w9.c:9: warning: implicit declaration of function `atoi'
w9.c:10: warning: implicit declaration of function `atof'
輸出結(jié)果:
i=23 f=1717986918.000000
加上#include<stdlib.h>則結(jié)果正常
看來(lái)atoi和atof都在C標(biāo)準(zhǔn)庫(kù)glibc中,但是很奇怪為什么C標(biāo)準(zhǔn)庫(kù)函數(shù)sqrt和pow卻不在glibc中
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 国产高清小视频 | 午夜激情在线免费观看 | 一本一道久久久a久久久精品91 | 国产一区免费在线观看 | 国产激情偷乱视频一区二区三区 | 日韩精品视频在线观看免费 | 久久久com | 色婷婷亚洲 | 亚洲午夜精品一区二区三区他趣 | 亚洲天天 | 91污在线 | 欧美成人高清视频 | av超碰在线 | 免费的国产视频 | 娇小12一13sexvideo | 午夜a级片| 日本在线观看视频一区 | 日韩深夜福利 | 久二影院| 黑人巨大精品欧美一区二区一视频 | 中文字幕在线观看 | 日韩视频欧美视频 | 三级网站视频 | 日韩一区二区三区四区五区 | 本道综合精品 | 成人在线免费观看 | 亚洲精品视频在线看 | 天天综合网91| 性做久久久久久久免费看 | 日韩在线视频第一页 | 无码一区二区三区视频 | 国产精品国产成人国产三级 | 亚洲一区二区在线播放 | 国产精品自拍av | 久久久久久国产精品美女 | 国产精品午夜电影 | 亚洲欧美日韩精品久久亚洲区 | 亚洲国产成人精品女人 | 四虎影音| 超碰97久久 | 四季久久免费一区二区三区四区 |