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

C語言——可執(zhí)行程序過程

這篇具有很好參考價值的文章主要介紹了C語言——可執(zhí)行程序過程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 我們在編寫代碼的時候,不知道大家是否和一開始的我一樣,在運行代碼的時候就直接CTRL+F5運行了呢??一開始,我只知道會生成一個.exe的可執(zhí)行文件,中間的原理我一點也不知道。
  • 今天就由我?guī)ьI(lǐng)大家對生成可執(zhí)行的文件有更深的一層理解。

  • ?程序的翻譯環(huán)境和執(zhí)行環(huán)境

  • 在ANSI C的任何一種實現(xiàn)中,存在兩個不同的環(huán)境。
  • 第一種是翻譯環(huán)境,在這個環(huán)境中源代碼被轉(zhuǎn)換為可執(zhí)行的機器指令。第二種是執(zhí)行環(huán)境它用于 實際執(zhí)行代碼。
  • C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言
  • ?組成一個程序的每個源文件通過編譯過程分別轉(zhuǎn)換目標代碼。
  • 每個目標文件由鏈接器捆綁在一起,形成一個單一而完整的可執(zhí)行程序。
  • 鏈接器同時也會引入標準C庫函數(shù)中任何被該程序所用到的函數(shù),而且它可以搜索程序員個人的程序庫,將其需要的函數(shù)鏈接到程序中。

  • 翻譯也分為幾種過程:

  • C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言
  • ?在預(yù)處理中,我們可以通過在Linux環(huán)境下,用gcc text.c -E -o text.i 來看一看在預(yù)處理中編譯器做了什么
  • C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言
  • ?我們發(fā)現(xiàn)短短10行的代碼變成了700多行,這是因為在預(yù)處理中,包含的頭文件被展開了,而且宏已經(jīng)被替換了。
  • 在這里,大家有沒有想過一個問題呢??在預(yù)處理階段中,到底是宏替換先執(zhí)行還是去注釋先執(zhí)行呢???

C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言?C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言

?文章來源地址http://www.zghlxwxcb.cn/news/detail-647498.html

  • ?經(jīng)過證明,我們發(fā)現(xiàn)去注釋是先執(zhí)行的,如果是宏替換先執(zhí)行的話,那么就不會有Hello World的輸出了。
  • ?


    預(yù)定義的符號:

  • _FILE_? //進行編譯的源文件
  • _LINE_ //文件當(dāng)前的行號
  • _DATE_ //文件被編譯的日期
  • _TIME_ //文件被編譯的時間
  • _STDC_ //如果編譯器遵循ANSI C ,其值為1,否則為定義

關(guān)于宏的定義,其實本質(zhì)上就是在預(yù)處理的階段被替換。C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言

  • 我們來看這個代碼就知道了,我們用宏定義了SQUARE ,如果沒有我剛剛說宏的本質(zhì)是替換是不是很多人會以為答案是36,經(jīng)過我上面說的,宏的本質(zhì)是替換,所以就替換成了printf("%d\n",5+1&1+5);這個,答案就是11??
    #define SQUARE(x)  x*x
    int main()
    {
    	int a = 5;
    	printf("%d\n", SQUARE(5 + 1));
    
    	return 0;
    }

    C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言

    ?


  • 宏的好處:

  • ?在用于函數(shù)和從函數(shù)返回的代碼可能比實際執(zhí)行這個小型計算工作所需要的時間多,所以宏比函數(shù)在程序上的規(guī)模和速度上更勝一籌。
  • 第二個就是宏是無關(guān)類型的
  • 宏的壞處:

  • 宏不能遞歸,也不好調(diào)試
  • 參數(shù)可能被替換到宏體中的多個位置,所以帶有副作用的參數(shù)求值可能產(chǎn)生不可預(yù)料的問題

    綜上所述,其實我更推薦用函數(shù),函數(shù)可以調(diào)試,而且在C++中用inline也綜合了宏和函數(shù)的優(yōu)缺點。


命名約定

?宏名全部大寫 函數(shù)名不要全部大寫


  • 命令行定義
  • 在許多C 的編譯器提供了一種能力,允許在命令行中定義符號。用于啟動編譯過程。 例如:當(dāng)我們根據(jù)同一個源文件要 編譯出不同的一個程序的不同版本的時候,這個特性有點用處。(假定某個程序中聲明了一個某個長度的數(shù)組,如果 機器內(nèi)存有限,我們需要一個很小的數(shù)組,但是另外一個機器內(nèi)存大寫,我們需要一個數(shù)組能夠大寫。)
  • 比如,下面代碼我就用到了命令行定義
  • C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言

C語言——可執(zhí)行程序過程,C語言從0到1,linux,服務(wù)器,經(jīng)驗分享,c語言


常見的預(yù)處理指令?

  • #ifndef?
  • #define
  • #if
  • #endif
  • #elif
  • ...
  • 當(dāng)然還有很多預(yù)處理指令,這里就不再敘述了。

    ?

  • 這里預(yù)處理指令中,我們常見的就是
  • #ifndef include <stdio.h>
  • #define include <stdio.h>
  • #endif?
  • 這里是為了不讓頭文件重復(fù)包含,在我們的第一個圖中就講到了,在預(yù)處理中頭文件會被展開,所以開text.i文件中會有700多行的代碼
  • 當(dāng)然#pragma once也可以防止頭文件被重復(fù)包含

  • 最后:講一講大家在做大型項目中,頭文件和定義總是分開的,都會用到#include "text.h"? 或#include <filename.h>,我來講一講它們之間的差別。

  • 其實它們只是查找策略的不同,#include "filename.h"查找的策略是現(xiàn)在源文件所在的目錄下查找,如果找不到編譯器就會查找?guī)旌瘮?shù)頭文件一樣在標準位置查找頭文件。如果找不到就提示編譯錯誤

  • 而#include <filename.h> 是直接查找?guī)旌瘮?shù)頭文件中的標準位置中查找頭文件

?

到了這里,關(guān)于C語言——可執(zhí)行程序過程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • TCP服務(wù)器的演變過程:C++使用libevent庫開發(fā)服務(wù)器程序

    TCP服務(wù)器的演變過程:C++使用libevent庫開發(fā)服務(wù)器程序

    手把手教你從0開始編寫TCP服務(wù)器程序,體驗開局一塊磚,大廈全靠壘。 為了避免篇幅過長使讀者感到乏味,對【TCP服務(wù)器的開發(fā)】進行分階段實現(xiàn),一步步進行優(yōu)化升級。 在上一章節(jié)介紹了如何使用epoll構(gòu)建reactor網(wǎng)絡(luò)模型開發(fā)高效的服務(wù)器,有了上一節(jié)的基礎(chǔ),本節(jié)將介紹

    2024年01月23日
    瀏覽(15)
  • Linux環(huán)境下部署項目到服務(wù)器完整過程

    Linux環(huán)境下部署項目到服務(wù)器完整過程

    1,首先,選擇一款云上服務(wù)器(這里用的是騰訊云),右側(cè)搜索欄輸入云服務(wù)器或輕量服務(wù)器(這里用的輕量服務(wù)器),立即選購 2,選擇自己要的服務(wù)器配置,系統(tǒng)鏡像選擇Centos即可 3,實例創(chuàng)建成功后,點擊控制臺搜索請量服務(wù)器找到新創(chuàng)建的實例重置密碼 4,點擊防火墻

    2024年02月02日
    瀏覽(51)
  • linux服務(wù)器ubuntu定時任務(wù)cron設(shè)置每秒執(zhí)行

    linux服務(wù)器ubuntu定時任務(wù)cron設(shè)置每秒執(zhí)行

    后端的同學(xué)經(jīng)常會遇到在服務(wù)器做一些定時腳本處理,比如定時清理日志,定時請求某個接口做特殊的業(yè)務(wù)處理,大多數(shù)linux版本都會帶cron服務(wù),以ubuntu服務(wù)器做個示例。 cron 是一個在 Unix-like 操作系統(tǒng)中用于定時執(zhí)行任務(wù)的工具。它是 “Chronos”(希臘語,意為時間)的縮寫

    2024年02月02日
    瀏覽(36)
  • VMware虛擬機,Linux DHCP服務(wù)器配置過程。

    VMware虛擬機,Linux DHCP服務(wù)器配置過程。

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 一、實驗?zāi)繕耍ㄒ宰陨砬闆r為準) 二、所需配置 三、靜態(tài)IP配置 四、配置DHCP服務(wù)器 五、配置DHCP中繼 六、防火墻配置 配置 DHCP服務(wù)器 與 中繼 ,使多個子網(wǎng)的客戶機可以通過服務(wù)器獲取 動態(tài)IP地址 。

    2024年02月08日
    瀏覽(28)
  • 使用 Rust 實現(xiàn)連接遠程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

    使用 Rust 實現(xiàn)連接遠程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

    Rust 已經(jīng)聽了無數(shù)遍,我很清楚它很強!但我也剛了解到它比較難學(xué)!那么加上 ChatGPT 呢?下面的代碼就是在 ChatGPT 加持下寫出來的,我只起到了輔助作用!只能說它們都很厲害! Rust(又稱為 Rust programming language)是一種系統(tǒng)編程語言,主要用于開發(fā)底層系統(tǒng)和應(yīng)用程序,如

    2024年02月13日
    瀏覽(28)
  • 【Linux】在服務(wù)器上創(chuàng)建Crontab(定時任務(wù)),自動執(zhí)行shell腳本

    【Linux】在服務(wù)器上創(chuàng)建Crontab(定時任務(wù)),自動執(zhí)行shell腳本

    業(yè)務(wù)場景:該文即為上次編寫shell腳本的姊妹篇,在上文基礎(chǔ)上,將可執(zhí)行的腳本通過linux的定時任務(wù)自動執(zhí)行,節(jié)省人力物力,話不多說,開始操作! 連上服務(wù)器后,在任意位置都可以執(zhí)行: crontab -e 如果沒有進入 編輯cron任務(wù)模式 根據(jù)提示查看我們的服務(wù)器上是否未安裝crontab沒有則

    2024年02月14日
    瀏覽(37)
  • Tauri 提供界面 + 使用 Rust 實現(xiàn)連接遠程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

    Tauri 提供界面 + 使用 Rust 實現(xiàn)連接遠程 Linux 服務(wù)器、發(fā)送文件、執(zhí)行命令

    Tauri 是一個用于構(gòu)建跨平臺桌面應(yīng)用程序的工具和框架。它的目標是通過將 Web 技術(shù)與本地功能結(jié)合,使開發(fā)者能夠以簡單、高效的方式創(chuàng)建現(xiàn)代的桌面應(yīng)用。 以下是 Tauri 的一些主要特點和概述: 跨平臺支持 :Tauri 允許你構(gòu)建跨平臺的桌面應(yīng)用程序,它支持 Windows、macOS 和

    2024年02月15日
    瀏覽(18)
  • Python 與機器學(xué)習(xí),在服務(wù)器使用過程中,常用的 Linux 命令包括哪些?

    Python 與機器學(xué)習(xí),在服務(wù)器使用過程中,常用的 Linux 命令包括哪些?

    ?? CSDN 葉庭云 : https://yetingyun.blog.csdn.net/ 本博客旨在分享在實際開發(fā)過程中,開發(fā)者需要了解并熟練運用的 Linux 操作系統(tǒng)常用命令。Linux 作為一種操作系統(tǒng),與 Windows 或 MacOS 并駕齊驅(qū),尤其在服務(wù)器和開發(fā)環(huán)境中占據(jù)重要地位。Linux 命令,簡而言之,就是指導(dǎo)計算機執(zhí)行

    2024年04月12日
    瀏覽(28)
  • Linux socket 搭建TCP服務(wù)器(C語言)

    ? 在標題之前,先提幾個問題,方便下次查看理解。 什么是TCP TCP服務(wù)器需要用到哪些函數(shù) 如何簡單的搭建一個TCP服務(wù)器 ? TCP 是一種傳輸層協(xié)議,可以提供可靠的數(shù)據(jù)傳輸服務(wù)。它是面向連接的,具有可靠性、流量控制、擁塞控制以及雙工通信的特點。 1. socket ? socket 作

    2024年04月17日
    瀏覽(29)
  • Linux+服務(wù)器后臺運行程序

    Linux+服務(wù)器后臺運行程序

    在Linux服務(wù)器直接運行程序,程序運行的時間較長,程序經(jīng)常會因為網(wǎng)絡(luò)連接問題異常終止,一直盯著程序運行又費時費力,這時后臺運行程序是更好的解決方式。But,如果服務(wù)器重啟了,那所有進程都斷掉了,只能重新跑代碼。 screen 假如遇到一些比較費時間的程序,但是又

    2024年02月22日
    瀏覽(32)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包