国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

程序的編譯相關(guān)操作(C語言)

這篇具有很好參考價(jià)值的文章主要介紹了程序的編譯相關(guān)操作(C語言)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

程序的編譯相關(guān)操作(C語言),C語言,c語言,開發(fā)語言,程序編譯

??????????????????????????????
????????????秋已深??????????????
???????? ???? 冬將至 ????????????
??????????人間至此秋色盡??????????
??????????一世繁華一世荒??????????
??????????????????????????????

??程序環(huán)境

??程序翻譯環(huán)境

在這個(gè)環(huán)境中源代碼被轉(zhuǎn)換為可執(zhí)行的機(jī)器指令。

程序的編譯相關(guān)操作(C語言),C語言,c語言,開發(fā)語言,程序編譯

??程序執(zhí)行環(huán)境

1. 程序必須載入內(nèi)存中。在有操作系統(tǒng)的環(huán)境中:一般這個(gè)由操作系統(tǒng)完成。在獨(dú)立的環(huán)境中,程序的載入必須由手工安排,也可能是通過可執(zhí)行代碼置入只讀內(nèi)存來完成。

2. 程序的執(zhí)行便開始。接著便調(diào)用main函數(shù)。

3. 開始執(zhí)行程序代碼。這個(gè)時(shí)候程序?qū)⑹褂靡粋€(gè)運(yùn)行時(shí)堆棧(stack),存儲(chǔ)函數(shù)的局部變量和返回地址。程序同時(shí)也可以使用靜態(tài)(static)內(nèi)存,存儲(chǔ)于靜態(tài)內(nèi)存中的變量在程序的整個(gè)執(zhí)行過程一直保留他們的值。

4. 終止程序。正常終止main函數(shù);也有可能是意外終止。

??程序預(yù)處理

??相關(guān)符號(hào)介紹

???預(yù)定義符號(hào)

NULL:表示空指針,用于指示指針變量沒有指向任何對(duì)象。

EOF:表示文件結(jié)束符,用于在文件輸入時(shí)表示已經(jīng)到達(dá)文件末尾。

sizeof:用于獲取數(shù)據(jù)類型或變量所占用的內(nèi)存空間大小。

const:用于聲明常量,表示其值不可修改。

volatile:用于聲明變量的值可能會(huì)在程序運(yùn)行期間被意外修改。

signed:用于聲明有符號(hào)類型的變量,可以表示正數(shù)和負(fù)數(shù)。

unsigned:用于聲明無符號(hào)類型的變量,只能表示非負(fù)整數(shù)。

void:用于聲明無類型類型的變量或函數(shù),表示不返回任何值。

do-while:用于創(chuàng)建循環(huán)結(jié)構(gòu),先執(zhí)行循環(huán)體,再判斷循環(huán)條件。

for:用于創(chuàng)建循環(huán)結(jié)構(gòu),通常用于需要執(zhí)行固定次數(shù)的循環(huán)操作。

if:用于條件判斷,根據(jù)條件是否成立來執(zhí)行不同的代碼塊。

switch:用于多分支條件判斷,根據(jù)不同的條件執(zhí)行不同的代碼塊。

while:用于循環(huán)結(jié)構(gòu),先判斷循環(huán)條件,再執(zhí)行循環(huán)體。

......

這些都是一些普通的預(yù)定義符號(hào)

__FILE__      //進(jìn)行編譯的源文件
__LINE__     //文件當(dāng)前的行號(hào)
__DATE__    //文件被編譯的日期
__TIME__    //文件被編譯的時(shí)間
__STDC__    //如果編譯器遵循ANSI C,其值為1,否則未定義

這些都是C語言內(nèi)置的預(yù)定義符號(hào)。大家可以試著去編譯下,看看效果,平常我們都很少用到。

???#define定義標(biāo)識(shí)符

在C語言中,#define是預(yù)處理指令,它用來定義標(biāo)識(shí)符或常量。當(dāng)你使用#define定義一個(gè)標(biāo)識(shí)符時(shí),編譯器會(huì)將其替換為你在定義時(shí)指定的文本。例如,你可以使用#define定義一個(gè)常量:

#define PI 3.14159
//在這個(gè)例子中,當(dāng)你使用PI時(shí),編譯器會(huì)將其替換為3.14159。
#define  max 100
//在這個(gè)例子中,當(dāng)你使用PI時(shí),編譯器會(huì)將其替換為3.14159。

???define定義宏

#define Add(x) ((x) * (x))
//在這個(gè)例子中,Add(x)會(huì)被替換為((x) * (x))。
//注意宏的參數(shù)在替換時(shí)需要用括號(hào)括起來,以避免因?yàn)檫\(yùn)算符優(yōu)先級(jí)產(chǎn)生的問題。
//例如,如果你不使用括號(hào),Add(x + 2)會(huì)被展開為x + 2 * x + 2,而不是你預(yù)期的(x + 2) * (x + 2)。

需要注意的是,#define定義的標(biāo)識(shí)符在預(yù)處理階段就會(huì)被展開,而不會(huì)在運(yùn)行時(shí)進(jìn)行計(jì)算。因此,使用宏進(jìn)行計(jì)算可能會(huì)影響程序的性能。

注意:

  1. 宏參數(shù)和#define 定義中可以出現(xiàn)其他#define定義的符號(hào)。但 是對(duì)于宏,不能出現(xiàn)遞歸。
  2. 當(dāng)預(yù)處理器搜索#define定義的符號(hào)的時(shí)候,字符串常量的內(nèi)容并不被搜索。

??宏和函數(shù)的對(duì)比

宏和函數(shù)在C語言中都用于實(shí)現(xiàn)代碼的復(fù)用和簡(jiǎn)化,但它們?cè)趯?shí)現(xiàn)方式和用途上有一些不同。

執(zhí)行方式:函數(shù)在程序運(yùn)行時(shí)被調(diào)用,執(zhí)行對(duì)應(yīng)的代碼塊。宏在預(yù)處理階段進(jìn)行文本替換,不占用函數(shù)調(diào)用的時(shí)間和空間。

類型檢查:函數(shù)具有強(qiáng)類型檢查,編譯器會(huì)檢查函數(shù)參數(shù)類型和返回值類型。宏在替換時(shí)不會(huì)進(jìn)行類型檢查,容易出現(xiàn)錯(cuò)誤。

安全性:函數(shù)是安全的,因?yàn)樗鼈冇袇?shù)類型檢查和返回值。宏可能會(huì)出現(xiàn)錯(cuò)誤或不安全的表達(dá)式。

調(diào)試:函數(shù)可以設(shè)置斷點(diǎn)進(jìn)行調(diào)試,而宏不能進(jìn)行調(diào)試。

作用域:函數(shù)具有局部作用域,宏具有全局作用域。

性能:函數(shù)調(diào)用需要一定的開銷,包括保存寄存器、棧操作等。宏替換沒有這些開銷,但可能會(huì)增加代碼大小,降低運(yùn)行速度。

使用場(chǎng)景:函數(shù)是可重用的代碼塊,通常用于封裝復(fù)雜邏輯。宏通常用于替換簡(jiǎn)單的文本或常量,提高代碼可讀性。

在實(shí)際編程中,應(yīng)根據(jù)具體需求選擇使用宏還是函數(shù)。如果需要類型檢查、安全性高或需要調(diào)試的代碼塊,應(yīng)使用函數(shù)。如果需要替換簡(jiǎn)單的文本或常量,提高代碼可讀性,可以使用宏。

??其它預(yù)處理命名

除了#define,C語言中還有其他一些預(yù)處理命名,包括:

#include:用于包含頭文件,將頭文件中的代碼插入到程序中。

#ifndef、#define、#endif:用于防止頭文件被重復(fù)包含。

#if、#elif、#else、#endif:用于條件編譯,根據(jù)條件決定是否編譯某段代碼。

#warning:用于在編譯時(shí)輸出警告信息。

#error:用于在編譯時(shí)輸出錯(cuò)誤信息。

#line:用于改變預(yù)處理器所報(bào)告的當(dāng)前文件名和行號(hào)。

#pragma:用于改變編譯器的特定設(shè)置。

這些預(yù)處理命名都是在編譯階段進(jìn)行處理的,可以用來控制編譯過程、生成特定代碼或輸出信息等。

程序的編譯相關(guān)操作(C語言),C語言,c語言,開發(fā)語言,程序編譯文章來源地址http://www.zghlxwxcb.cn/news/detail-831816.html

到了這里,關(guān)于程序的編譯相關(guān)操作(C語言)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Go語言time庫,時(shí)間和日期相關(guān)的操作方法

    Go語言time庫,時(shí)間和日期相關(guān)的操作方法

    用于處理時(shí)間、日期和時(shí)區(qū)的核心庫。在實(shí)際開發(fā)中,常常需要與時(shí)間打交道,例如記錄日志、處理時(shí)間差、計(jì)算時(shí)間間隔等等。因此,掌握time庫的使用方法對(duì)于Go開發(fā)者來說非常重要。 在Go語言中,時(shí)間表示為time.Time類型,日期表示為time.Time類型或者time.Date類型,時(shí)區(qū)表示

    2024年02月14日
    瀏覽(33)
  • 【BOOST程序庫】正則表達(dá)式相關(guān)操作

    基本概念這里不解釋了,代碼中詳細(xì)解釋了BOOST程序庫中對(duì)于正則表達(dá)式常用方法的詳細(xì)用法。

    2024年02月15日
    瀏覽(23)
  • ARM架構(gòu)Linux操作系統(tǒng)上C語言版本的CycloneDDS中HelloWorld的編譯過程(交叉編譯工具鏈)

    ARM架構(gòu)Linux操作系統(tǒng)上C語言版本的 CycloneDDS 中 HelloWorld 的編譯過程與源碼編譯過程中的 roundtrip 示例編譯是一樣的,因?yàn)閷?shí)在ARM架構(gòu)上,所以需要將 idlc_generat e注釋掉,自己手動(dòng)添加源代碼和頭文件,之后在進(jìn)行 cmake 和 make 操作

    2024年02月15日
    瀏覽(32)
  • 抖音小程序?qū)崿F(xiàn)less語言編譯樣式
  • 【編譯原理】詞法分析程序設(shè)計(jì)(C語言)

    【編譯原理】詞法分析程序設(shè)計(jì)(C語言)

    ??給定下表所示的一個(gè)簡(jiǎn)單語言的詞法規(guī)則描述完成以下任務(wù): (1)畫出識(shí)別該語言詞法規(guī)則的 狀態(tài)轉(zhuǎn)換圖 ; (2)依據(jù)狀態(tài)轉(zhuǎn)換圖,設(shè)計(jì)并編制詞法分析程序,實(shí)現(xiàn)從輸入源程序中,識(shí)別出各類單詞,即 、標(biāo)識(shí)符、常數(shù)、運(yùn)算符、界符 五大類,并輸出各個(gè)單詞

    2024年02月15日
    瀏覽(99)
  • Ubuntu 用gcc/CMakefile編譯器 編譯、運(yùn)行c語言程序

    Ubuntu 用gcc/CMakefile編譯器 編譯、運(yùn)行c語言程序

    目錄 一. 在Ubuntu系統(tǒng)下用c語言編寫一個(gè)簡(jiǎn)單的輸出hello world 的程序,并編譯、運(yùn)行。 1.1 gcc/g++簡(jiǎn)介 1.2 c++程序輸出 Hello World: 1.3?c語言程序輸出 Hello World: 二. 編寫一個(gè)主程序文件main1.c和一個(gè)子程序文件sub1.c,實(shí)現(xiàn)函數(shù)間的調(diào)用 2.1? 編寫sub1.c 和main1.c 函數(shù) 2.1.1 編寫sub1.c函數(shù)

    2024年02月04日
    瀏覽(27)
  • 【JavaScript】JavaScript 簡(jiǎn)介 ④ ( 解釋型語言 和 編譯型語言 | 計(jì)算機(jī)程序本質(zhì) | 編譯器 和 解釋器 )

    【JavaScript】JavaScript 簡(jiǎn)介 ④ ( 解釋型語言 和 編譯型語言 | 計(jì)算機(jī)程序本質(zhì) | 編譯器 和 解釋器 )

    計(jì)算機(jī) 的 程序 是在 CPU 上執(zhí)行的 , CPU 上執(zhí)行的只有匹配該 CPU 的機(jī)器碼指令 , 不同類型的 CPU 執(zhí)行的 機(jī)器碼指令 格式不同 , X86 和 ARM 執(zhí)行的 機(jī)器碼 指令格式是不同的 ; 機(jī)器碼指令 是 二進(jìn)制的 , 所有在 計(jì)算機(jī) 上執(zhí)行的程序 , 都是 若干 二進(jìn)制機(jī)器碼 的集合 ; 計(jì)算機(jī) 只能執(zhí)

    2024年03月22日
    瀏覽(32)
  • 編譯原理1.6習(xí)題 程序設(shè)計(jì)語言基礎(chǔ)

    編譯原理1.6習(xí)題 程序設(shè)計(jì)語言基礎(chǔ)

    圖源:文心一言 編譯原理習(xí)題整理~???? 作為初學(xué)者的我,這些習(xí)題主要用于自我鞏固。由于是自學(xué),答案難免有誤,非常歡迎各位小伙伴指正與討論!???? 第1版:自己的解題,與AI老師的判卷~???? 編輯: 梅頭腦??? 審核: 文心一言 題源: 龍書《編譯原理》 Alfre

    2024年01月19日
    瀏覽(95)
  • 從頭開發(fā)一個(gè)RISC-V的操作系統(tǒng)(三)編譯與鏈接

    從頭開發(fā)一個(gè)RISC-V的操作系統(tǒng)(三)編譯與鏈接

    目標(biāo):通過這一個(gè)系列課程的學(xué)習(xí),開發(fā)出一個(gè)簡(jiǎn)易的在RISC-V指令集架構(gòu)上運(yùn)行的操作系統(tǒng)。 這個(gè)系列的大部分文章和知識(shí)來自于:[完結(jié)] 循序漸進(jìn),學(xué)習(xí)開發(fā)一個(gè)RISC-V上的操作系統(tǒng) - 汪辰 - 2021春,以及相關(guān)的github地址。 在這個(gè)過程中,這個(gè)系列相當(dāng)于是我的學(xué)習(xí)筆記,做

    2024年04月09日
    瀏覽(19)
  • 后端開發(fā)有哪幾種語言? - 易智編譯EaseEditing

    后端開發(fā)有哪幾種語言? - 易智編譯EaseEditing

    后端開發(fā)是構(gòu)建應(yīng)用程序的一部分,負(fù)責(zé)處理服務(wù)器端的邏輯、數(shù)據(jù)庫交互和數(shù)據(jù)處理。有許多編程語言可用于后端開發(fā),以下是一些常見的后端開發(fā)語言: Java: Java是一種廣泛使用的面向?qū)ο缶幊陶Z言,具有強(qiáng)大的跨平臺(tái)能力。在后端開發(fā)中,Java通常與Java EE(Java Platfor

    2024年02月11日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包