C++基礎知識(2)

来源:https://www.cnblogs.com/jiweilearn/archive/2019/02/22/10420495.html
-Advertisement-
Play Games

作為介面的函數頭 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 作者必須保證頭文件中所聲明的函數類型及參數列表,與庫文件中的實現是相同的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、併發、進程、線程的基本概念和綜述 併發,進程,線程要求必須掌握 1、併發 兩個或更多的任務(獨立的活動)同時發生(進行):一個程式同時執行多個獨立的任務。 以往電腦,單核CPU(中央處理器):某一個時刻只能執行一個任務:由操作系統調度,每秒中進行多次所謂的“任務切換”。 併發的假象(不是真正的 ...
  • 對比JDK1.7,JDK1.8在運行時的記憶體分配上進行了調整。本篇對JDK1.8版本進行簡要介紹。 先以一張圖片描述運行時記憶體: 程式計數器 記錄當前線程執行的位元組碼行號。如果執行的是native方法,值為null。 虛擬機棧 每一個線程執行時,都對應有一個虛擬機棧,生命周期與線程相同。一個虛擬機棧 ...
  • 基於Python結合InfluxDB及Grafana圖表實時採集Linux多主機性能數據 by:授客 QQ:1033553122 實現功能 測試環境 環境搭建 使用前提 使用方法 運行程式 效果展示 實現功能 無需在被監控主機上安裝代理,一鍵對Linux遠程伺服器不同主機執行性能監控、性能數據採集命 ...
  • 第一次接觸大發的時候,我還只有二十歲。當時跟同村的幾個人在工地上,晚上無聊的時候就會聚在一起打牌,有一天晚上正好多了我一個人插不上手。我自己又無聊,就問他們有沒有別的好玩的,他們就跟我說起了北京賽車。說起來,玩堵這種事真的是不需要天賦,也不需要有人教的,比如我就是無師自通,跟我說了一下規則我玩了一會 ...
  • [toc] ECB模式介紹 電碼本模式(Electronic Codebook Book (ECB) 這種模式是將整個明文分成若幹段相同的小段,然後對每一小段進行加密。 pkcs5padding和pkcs7padding的區別 pkcs5padding和pkcs7padding都是用來填充數據的一種 ...
  • leetcode初級演算法 問題描述 給定一個整數數組,判斷是否存在重覆元素。 如果任何值在數組中出現至少兩次,函數返回 true。如果數組中每個元素都不相同,則返回 false。 該問題表述非常簡單 查看數組中是否有相同元素 解法一:(未通過-超出時間限制) 思路:利用list的內置函數count計 ...
  • Java程式的入口 main()方法的簽名為:public static void main(String[] args) {...} ,其中, ♦ public修飾符:Java類由JVM調用,為了讓JVM可以自由調用這個main()方法,所以使用public修飾符把這個方法暴露出來。 ♦ stat ...
  • https://www.luogu.org/blog/Nvwang/p1969-ji-mu-tai-sai ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...