淺析C說話頭文件和庫的一些成績。本站提示廣大學習愛好者:(淺析C說話頭文件和庫的一些成績)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析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中