原创 【C語言】靜態鏈接庫與動態鏈接庫的製作與使用

一、函數庫簡述 簡單來說,函數庫就是一些事先寫好的模塊化的函數的集合,可以供給其他程序員使用。最開始沒有函數庫,每個程序員寫程序都要從零開始寫,時間長了慢慢地就積累下來了一些優質的函數庫。後來有組織把各種函數庫收攏在一起,經過校準

原创 【Makefile】初探Makefile大法

一、Makefile的引入 1.1 用途 Makefile是用來管理工程的,一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,Makefile定義了一系列的規則來指定,哪些文件先編譯、後編譯、重新編譯,甚至於進行

原创 【C++】命名空間namespace詳解

一、命名空間的引入 C++中,名稱(name)可以是符號常量、變量、宏、函數、結構體、枚舉、類和對象等等。而在大型工程中,難免會有重名的現象,命名空間namespace,就是C++引入的一種解決名稱衝突的機制 1.1 如何解決命名

原创 【C語言】預處理、宏定義、內聯函數

一、由源碼到可執行程序的過程 1. 預處理: 源碼經過預處理器的預處理變成預處理過的.i中間文件 gcc -E test.c -o test.i 2. 編譯: 中間文件經過編譯器編譯形成.s的彙編文件 gcc -S test.i

原创 Ubuntu18.04安裝arm-linux-gcc交叉編譯工具

1.下載工具包 先下載arm-linux-gcc工具包: 網盤下載 CSDN下載(免積分) 2.開始安裝 獲得管理員權限: $ su 進入/usr/local目錄下 $ cd /usr/local 將下載的工具包移動到當前目錄

原创 【CMake】初探CMake的使用

建立測試文件 touch external_test.cpp external_test.h main.cpp CMakeLists.txt 在CMakeLists.txt中添加相關指令 CMAKE_MINIMUM_RE

原创 代碼段(.text)、數據區(.data)和bss段

一、三個常用段 編譯器在編譯程序的時候,將程序中的所有元素分成一些部分,各部分構成一個段,段是可執行程序的組成部分。 代碼段:程序中的可執行部分,是由函數堆疊而成的 數據段(數據區、靜態數據區、靜態區):程序中的數據,C語言中

原创 【Cpp】alignof()與alignas()

一、繼承C使用的內存對齊 C++中繼承了C語言裏的內存對齊機制,也可以程序員進行干預,如下文章: 往小對齊:#pragma pack的使用 往大對齊:attribute((aligned(n))) 二、alignof()與alig

原创 【8086彙編】2.訪問寄存器與內存

一、寄存器及數據存儲 寄存器是CPU內部的信息存儲單元,在8086CPU中有14個寄存器: 通用寄存器:AX、BX、CX、DX 變址寄存器:SI、DI 指針寄存器:SP、BP 指令指針寄存器:IP 段寄存器:CS、SS、DS

原创 error while loading shared libraries: libmpfr.so.4: cannot open shared object file的簡單解決方法

Ubuntu18.04在進行arm-linux-gcc交叉編譯時遇到的一個問題: error while loading shared libraries: libmpfr.so.4: cannot open shared obj

原创 【Cpp】inline關鍵字

一、保留了C中inline的特性 詳見:預處理、宏定義、內聯函數 關鍵點如下: inline必須與函數定義體放一起,聲明處可不放(保險做法爲都放) inline函數一般是直接在頭文件中直接定義,無需額外聲明 inline函數

原创 【Cpp】NULL與nullptr(C++11起)

一、先來談談NULL NULL是一個宏,其定義如下 #ifndef __cplusplus #define NULL (void *)0 #else #define NULL 0 #endif 在C語言中,NULL就是(voi

原创 【Cpp】引用的本質

一、什麼是引用 引用是C++中的一個新的語言特性,從表面來說,引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。引用的聲明如下: 類型標識符 &引用名 = 目標變量名; 這裏面的&不是位運算、不是取地址,

原创 【8086彙編】1.8086彙編預備知識

一、機器語言到彙編語言 1.1 機器語言與機器指令 機器語言是機器指令的集合 機器指令是一臺機器可以正確執行的命令 機器指令由一串二進制數表示,如01010000 1.2 彙編語言與彙編指令 彙編語言的主體是彙編指令

原创 二重指針

一、二重指針的本質 二重指針與一重指針本質上都是指針變量,指針變量的本質也就是變量,都是用來指向別的東西的,在32位機上都是佔4字節內存空間 二重指針指向的變量類型是一個一重指針 1.1 測試代碼段 int a = 1