作為介面的函數頭 C++函數可被其他函數激活或調用,函數頭描述了函數與調用它的函數之間的介面。 在C語言中,省略返回類型相當於說函數的類型為int,然而,C++逐步淘汰了這種用法 也可以使用下麵的變體: int main(void) 在括弧中使用關鍵字void明確地指出,函數不接受任何參數,在C++ ...
作為介面的函數頭
C++函數可被其他函數激活或調用,函數頭描述了函數與調用它的函數之間的介面。
在C語言中,省略返回類型相當於說函數的類型為int,然而,C++逐步淘汰了這種用法
也可以使用下麵的變體:
int main(void)
在括弧中使用關鍵字void明確地指出,函數不接受任何參數,在C++(不是C)中,讓括弧空著與在括弧中使用void等效(在C中,讓括弧空著意味著對是否接受參數保持沉默)
如果編譯器到達main()函數末尾時沒有遇到返回語句,則認為main()函數以如下語句結尾:
return 0;
這條隱含的返回語句只適用於main()函數,而不適用於其他函數
C++預處理器和iostream文件
C++和C一樣,也使用一個預處理器,該程式在進行主編譯之前對源文件進行處理,有些C++實現適用翻譯器程式將C++程式轉換為C程式,雖然翻譯器也是一種預處理器,但這裡不討論這種預處理器,而只討論這樣的預處理器,即它處理名稱以#開頭的編譯指令,不必執行任何特殊的操作來調用該預處理器,它會在編譯程式時自動運行。
#include <iostream>
該編譯指令導致預處理器將iostream文件的內容添加到程式中,這是一種典型的預處理器操作:在源代碼被編譯之前,替換或添加文本
#include <iostream>編譯指令導致iostream文件的內容隨源代碼文件的內容一起被髮送給編譯器。實際上,iostream文件的內容將取代程式中的代碼行#include <iostream>,原始文件沒有被修改,而是將源代碼文件和iostream組合成一個複合文件,編譯的下一階段將使用該文件
頭文件名
像iostream這樣的文件叫做包含文件(include file),由於它們被包含在其他文件中;也叫頭文件(header file),由於它們被包含在文件起始處,C語言的傳統是,頭文件使用擴展名h,將其作為一種通過名稱標識文件類型的簡單方式,例如,頭文件math.h支持各種C語言數據函數,但C++用法變了,現在對老式C的頭文件保留了擴展名h(C++程式仍可以使用這種文件),而C++頭文件則沒有擴展名,有些C頭文件被轉換為C++頭文件,這些文件被重新命名,去掉了擴展名h(使之成為C++風格的名稱),併在文件名稱前面加上首碼c,標明來自C語言
C++舊式風格 以.h結尾 iostream.h C++程式可用
C舊式風格 以.h結尾 math.h C、C++程式可用
C++新式風格 沒有擴展名 iostream C++程式可以使用,使用namespace std
轉換後的C 加上首碼c,沒有擴展名 cmath C++程式可以使用,可以使用不是C的特性,如namespace std
名稱空間
如果使用iostream,而不是iostream.h,則應使用下麵的名稱空間編譯指令來使iostream中的定義對程式可用:
using namespace std;
這叫做using編譯指令,iostream文件中定義了名稱空間std,特別地,頭文件string中也有名稱空間std,
如果使用如下編譯:
#include<iostream>
#include<string>
using namespace std;
則,iostream文件和string文件中的名稱空間std都被包含進來
詳細解釋:https://plutoblog.iteye.com/blog/986024
函數原型
在使用函數之前,C++編譯器需要知道函數的參數類型和返回值類型,也就是說,函數是返回哪些類型信息,C++提供這種信息的方式是使用函數原型語句
函數原型之於函數就想變數聲明之於變數,之處涉及的類型。例如,C++庫將sprt()函數定義成將一個可能帶小數部分的數字作為參數,並返回一個相同類型的數字
double sqrt(double)
第一個double意味著sqrt()將返回一個double值,括弧中的double意味著sqrt()需要一個double參數
原型結尾的分號表明它是一條語句,這使得它是一個原型,而不是函數頭,如果省略分號,編譯器將把這行代碼解釋為一個函數頭,並要求接著提供定義該函數的函數體
對於C++庫中的每一個函數,都在一個或多個頭文件中提供了其原型
不要混淆函數原型和函數定義,可以看出,原型只描述函數介面,也就是說,它描述的是發送給函數的信息和返回的信息,而定義中包含了函數的代碼,庫文件中包含了函數的編譯代碼,而頭文件中則包含了原型
頭文件和庫文件的區別
C++庫函數存儲在庫文件中,庫文件是以二進位文件形式存在的,其中封裝著函數介面,在編程中可以由其它源文件調用。庫文件可分為靜態庫和動態庫兩種。
頭文件是指在C/C++編程中,可以寫在程式裡面,以#include 的形式包含的文件,是對庫文件中函數的聲明,對於C語言,一般以.h作為擴展名;對於C++,可以沒有擴展名,也可以以.h或者.hpp做擴展名。規範中對頭文件的擴展名並沒有做約定,
二者的區別為:
1 頭文件是文本文件,是可供閱讀的;庫文件是二進位文件,不可直接閱讀。
2 頭文件在編譯中使用;庫文件在鏈接中使用。
3 頭文件中是函數或定義的聲明,及少量內聯函數的使用,一般不包含非靜態函數實現;庫文件中包含函數的實現。
4 頭文件是手動編寫的,庫文件是編譯生成的。
二者也有聯繫:
1 雖然沒有規定調用庫函數必須引用頭文件,但一般約定,當調用庫函數的時候需要引用介面函數所在的頭文件。
2 一個庫文件均有一組頭文件與其對應。
3 庫文件和對應頭文件的作者應為同一個。
4 作者必須保證頭文件中所聲明的函數類型及參數列表,與庫文件中的實現是相同的。