為什麼頭文件除了函數名都被注釋
① 為什麼VC的頭文件裡面的函數只有聲明卻沒有定義
定義是有的,有一些定義被編譯成了二進制碼了,在頭文件中應該可以看到預處理把這些文件包含進去了,就像你要靜態調用dll文件就要用預處理把lib文件包含進去一樣,至於各個函數的功能,如果是純運算的那就是編譯器的製作者寫的,如果是對文件讀寫,創建窗口,這些就是調用了API函數
② keil自帶頭文件中為什麼只有庫函數的聲明,它們的具體定義呢
那些庫函數並沒有給出C語言的源程序,都編譯成了庫文件XX.LIB。用戶是看不到的,可能是為了保密吧。
③ 為什麼Win-Tc裡面的頭文件只有函數的定義卻沒有函數的實現
函數的實現已經被編譯成dll文件和lib,提供用戶調用!在頭文件中只給出函數的聲明,目的是為了系統對函數的參數類型進行行檢查!
④ 為什麼頭文件里已經包含了函數的聲明,調用還要聲明
定義只能有一次,而聲明的次數不限。任何標識符在使用前至少要有聲明,將聲明放在頭文件中,就可以在需要使用到標識符時隨時把頭文件包含進來即可。如果把定義放進頭文件中,那每包含一次頭文件,標識符就定義了一次,這樣在多文件的編譯連接時很容易出問題的。 包含其實就相當於把被包含文件的內容加入到其中,和用被包含文件中的內容替換掉對應的包含語句沒有區別。使用頭文件的好處就是免除了重復勞動的麻煩。 反正最終編譯器都是把被包含文件的內容合並到一塊才編譯的。所以這樣,LZ覺得運行時的調用跟調用任何一個函數有區別嗎。
⑤ C語言函數在頭文件里被聲明是什麼含義
一次問題這么多啊,只是聲明函數原型嘛,沒有什麼特別的意思
編譯器將會對所有已申明原型的函數,在實際調用的處做嚴格的參數類型+返回類型的合法性檢查,形參與實參類型、返回值類型與接收返回值的變數類型完全合法時沒有警告,否則 不合法的報錯,有損失數據的隱式的強制轉換則會有警告
如果沒有函數的原型申請,則實際調用函數時,編譯器不檢查調用格式是否合法的
除了通知編譯器做嚴格的合法性檢查之外,原型申明並不會把未引用的函數鏈接進最終程序中。
你所擔心的問題是不存在的,放心吧,編譯器沒那麼傻,編譯器有優化能力
⑥ C語言里有時候頭文件光是聲明了函數卻沒有定義函數,為啥就能用那
頭文件的函數的實現文件都在其他文件中,比如VC++就是在那些.LIB和.DLL文件中。這樣可以把實現文件轉化為LIB和DLL,就可以保護你的源代碼。而只留出來頭文件,給別人看,別人用頭文件作為介面,調用LIB或者DLL中的函數。
⑦ C語言如何實現頭文件不定義函數名,然後c文件里就不編譯該函數,或者其他能實現這樣效果的辦法
採用條件編譯即可。
在.h頭文件中加上
#if1
#defineFUNC_ENABLE
voidfun();
#endif
在.c中加上
#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif
當我們不想編譯該函數時,加#if 1改為#if 0即可。
例子:
#include<stdio.h>
#if1
#defineFUNC_ENABLE
voidfun();
#endif
#ifdefFUNC_ENABLE
voidfun(){printf("OK ");}
#endif
intmain(void){
fun();
return0;
}
⑧ matlab裡面有些庫函數全是注釋,比如sum,但也能運行,那麼sum封裝到哪裡了
應該說,樓上的回答比較接近正確答案,但並非正確答案。
MATLAB 最底層、最核心的代碼,例如sum,並非如樓上所說那樣,使用mex指令生成mexw32或mexw64文件,而是直接封裝在主程序matlab.exe或者位於bin文件夾的某個dll文件中(根據版本不同,封裝所在的具體文件也不一樣,但可以肯定不是在mex文件中)。這類函數稱為內建函數(built-in function)。
你可以使用下面的命令:
which sum -all
看到sum函數的所在位置,很明顯,這是一個內建函數。至於sum.m文件,可以看到,處於被遮蔽(Shadowed)的狀態,調用的時候不會調用它,其存在的作用在於,用戶使用help sum命令的時候,可以為用戶提供一個簡短的幫助。內建函數的代碼以二進制形式存在,你不可能看到它是怎樣實現的。
有些函數是樓上所說的mex文件,比如gamma函數。使用mex的目的以及執行過程也基本如樓上所說,但有一點要糾正:mex文件並非「類似」dll文件,而就是一種特殊的dll文件。
至於toolbox,你的理解當然是不對的。matlab目錄下對應的是matlab基本模塊。因為matlab價錢很貴,正版一般只購買部分模塊,最少的情況下,可以只購買一個基本模塊。其他目錄都是各工具箱,有些最初是由外面的牛人開發,後來被MathWorks公司收購了,有些則從開始就是MathWorks公司自己編寫的。新版經常會增加一些新產品,但也有的產品因為和原開發者產生糾紛而不再包含在新版中(不計產品更名、合並這一類的調整)。
⑨ 為什麼不包含頭文件卻可以調用函數,誰來解釋
舊的C語言中,函數原型聲明不是必需的。
對於沒有聲明的函數,被認為是返回int類型