最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C語言中如何實(shí)現(xiàn)多文件編程

2021-05-09 13:17 作者:Aryan的黑貓  | 我要投稿

????眾所周知源代碼是通過 預(yù)編譯、編譯、匯編、鏈接、?最后生成的可執(zhí)行文件的↓

通過Linux的GCC可以主動(dòng)的進(jìn)行全過程

但是在很多時(shí)候初學(xué)者會(huì)在不知情的情況下直接忽略了鏈接這一實(shí)質(zhì)性的過程,畢竟大多數(shù)的初學(xué)者都是優(yōu)先選擇IDE(集成開發(fā)環(huán)境)

所以這一期專欄讓我們用C語言的角度來進(jìn)行多文件的鏈接(調(diào)用)吧!



首先看一下這段代碼清單↓

main函數(shù)部分

這是一段非常簡(jiǎn)單的調(diào)用函數(shù)的小例子;即便把這些代碼寫的再?gòu)?fù)雜,它也只局限于這一單個(gè)文件中。

那么應(yīng)該如何突破單個(gè)文件的局限呢?

首先介紹 extern關(guān)鍵字;有它當(dāng)做“向?qū)А备嬖V編譯器其他文件的位置就可以解決多文件調(diào)用的問題了。

其次看一下這塊代碼↓

當(dāng)然這塊代碼的用法還有很多,這里只舉例了一種配合extern關(guān)鍵字的使用方法。

(文章結(jié)尾還會(huì)更多的介紹一下 #ifdnef #endif的)



有了#define 的支持以及 extern的指向就可以實(shí)現(xiàn)多文件的簡(jiǎn)單鏈接調(diào)用了↓

下面寫一個(gè)簡(jiǎn)易的凱撒密碼環(huán)的加密程序來做一個(gè)多文件調(diào)用的實(shí)驗(yàn)↓

庫頭文件部分

鏈接頭文件部分

CaesarFunction函數(shù)部分

main函數(shù)部分

嫌麻煩的同學(xué)可以把調(diào)用文件換成 HelloWorld (doge?↑

?寫好頭文件?就可以直接在main方法中直接調(diào)用咱們寫好的程序文件了。


后記-?#ifndef #endif?與 #pragma?once?的區(qū)別

為了避免同一個(gè)頭文件被包含(include)多次,C/C++中有兩種宏實(shí)現(xiàn)方式:

一種是#ifndef #endif 方式;另一種是#pragma once方式。

在能夠支持這兩種方式的編譯器上,二者并沒有太大的區(qū)別。但兩者仍然有一些細(xì)微的區(qū)別。



#ifndef

#ifndef的方式受C/C++語言標(biāo)準(zhǔn)支持。它不僅可以保證同一個(gè)文件不會(huì)被包含多次,也能保證內(nèi)容完全相同的兩個(gè)文件(或者代碼片段)不會(huì)被不小心同時(shí)包含。

當(dāng)然,缺點(diǎn)就是如果不同頭文件中的宏名不小心“撞車” 可能就會(huì)導(dǎo)致你看到頭文件明明存在,但編譯器卻硬說找不到聲明的狀況——這種情況有時(shí)非常讓人郁悶。

由于編譯器每次都需要打開頭文件才能判定是否有重復(fù)定義,因此在編譯大型項(xiàng)目時(shí),ifndef會(huì)使得編譯時(shí)間相對(duì)較長(zhǎng),因此一些編譯器逐漸開始支持#pragma once的方式。

#pragma once

#pragma once 一般由編譯器提供保證:同一個(gè)文件不會(huì)被包含多次。注意這里所說的“同一個(gè)文件”是指物理上的一個(gè)文件,而不是指內(nèi)容相同的兩個(gè)文件。

你無法對(duì)一個(gè)頭文件中的一段代碼作pragma once聲明,而只能針對(duì)文件。

其好處是,你不必再擔(dān)心宏名沖突了,當(dāng)然也就不會(huì)出現(xiàn)宏名沖突引發(fā)的奇怪問題。大型項(xiàng)目的編譯速度也因此提高了一些。

對(duì)應(yīng)的缺點(diǎn)就是如果某個(gè)頭文件有多份拷貝,本方法不能保證他們不被重復(fù)包含。當(dāng)然,相比宏名沖突引發(fā)的“找不到聲明”的問題,這種重復(fù)包含很容易被發(fā)現(xiàn)并修正。

另外,這種方式不支持跨平臺(tái)!

#pragma once 方式產(chǎn)生于#ifndef之后,因此很多人可能甚至沒有聽說過。目前看來#ifndef更受到推崇。因?yàn)?ifndef受C/C++語言標(biāo)準(zhǔn)的支持,不受編譯器的任何限制;而#pragma once方式卻不受一些較老版本的編譯器支持,一些支持了的編譯器又打算去掉它,所以它的兼容性可能不夠好。

后記原鏈接:https://blog.csdn.net/fanyun_01/article/details/77413992





C語言中如何實(shí)現(xiàn)多文件編程的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
通辽市| 西丰县| 无棣县| 土默特右旗| 和田市| 灵山县| 景谷| 庐江县| 金阳县| 偃师市| 卢龙县| 昌黎县| 凤山市| 八宿县| 东方市| 汕尾市| 安图县| 栾城县| 东台市| 启东市| 托克逊县| 大同县| 盐边县| 临安市| 织金县| 儋州市| 泰顺县| 阳城县| 灵川县| 博兴县| 嘉善县| 丘北县| 莱阳市| 高台县| 肇州县| 彝良县| 班戈县| 易门县| 徐水县| 拜泉县| 当阳市|