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

程序的編譯和鏈接

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

?

目錄

翻譯環(huán)境?

linux下的測試??編輯

預(yù)定義符號

執(zhí)行環(huán)境

#define定義宏

#和##

#

##

宏參數(shù)的副作用

宏和函數(shù)對比

優(yōu)點(diǎn)

缺點(diǎn)

#undef?

?條件編譯

頭文件包含


在標(biāo)準(zhǔn)c的任何實(shí)現(xiàn)中,存在兩種環(huán)境——翻譯環(huán)境和執(zhí)行環(huán)境

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

翻譯環(huán)境?

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

翻譯環(huán)境生成目標(biāo)文件(.obj)

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

linux下的測試?

預(yù)定義符號

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

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

vs不完全支持c標(biāo)準(zhǔn),Linux下的gcc支持c標(biāo)準(zhǔn)。?

執(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),存儲函數(shù)的局部變量和返回地址。程序同時(shí)也可以使用靜態(tài)(static )內(nèi)存,存儲于靜態(tài)內(nèi)存中的變量在程序的整個(gè)執(zhí)行過程 一直保留他們的值。
4. 終止程序。正常終止 main 函數(shù);也有可能是意外終止。

#define定義宏

#define 機(jī)制包括了一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常稱為宏 或定義宏
#define name( parament-list ) stuff
其中的 parament - list 是一個(gè)由逗號隔開的符號表,它們可能出現(xiàn)在 stuff 中。
注意:參數(shù)列表的 左括號必須與name緊鄰 。
如果兩者之間有任何空白存在,參數(shù)列表就會被解釋為 stuff 的一部分。
#define SQUARE(X) X*X//err
SQUARE(5+1)--->5+1*5+1
//正確寫法:
#define SQUARE(X) ((X)*(X))
注意:
1. 宏參數(shù)和 #define 定義中可以出現(xiàn)其他 #define 定義的符號(優(yōu)先替換)。但是對于宏,不能出現(xiàn)遞歸。
2. 當(dāng)預(yù)處理器搜索 #define 定義的符號的時(shí)候,字符串常量的內(nèi)容并不被搜索
#define SQUARE(X) ((X)*(X))
#define X 2//正確

#和##

#

當(dāng)我們想實(shí)現(xiàn)下面這串代碼時(shí):

	int a = 10;
    printf("the value of a is %d\n", a);

	int b = 20;
	printf("the value of b is %d\n", b);

	float f = 3.5f;
	printf("the value of f is %f\n", f);

有沒有什么更簡介的辦法呢?

我們知道,c語言可以對字符串進(jìn)行拼接,比如:

printf("hello"  "world");
//輸出helloworld,省略了中間的空格。

修改后:

#define PRINT(val,format) printf("the value of "#val  "is " format "\n",val)
int a = 10;
PRINT(a, "%d");
	
int b = 20;
PRINT(b, "%d");
	
float f = 3.5f;
PRINT(f, "%f");

這里的#val相當(dāng)于先對val完成替換再使之成為一個(gè)字符串("a")

##

## 可以把位于它兩邊的符號合成一個(gè)符號。
它允許宏定義從分離的文本片段創(chuàng)建標(biāo)識符

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

宏參數(shù)的副作用

如果宏的參數(shù)在宏的定義中出現(xiàn)超過一次的話,如果參數(shù)帶有副作用,將會導(dǎo)致不可預(yù)測的結(jié)果。

#define MAX(x,y) ((x)>(y)?(x):(y))

int main()
{
	int a = 3;
	int b = 4;
	int m = MAX(++a, ++b);

	int m = ((++a) > (++b) ? (++a) : (++b));
	printf("m = %d a=%d b=%d\n", m, a, b);

	return 0;
}

?輸出結(jié)果為6,4,6

宏和函數(shù)對比

優(yōu)點(diǎn)

????????用于調(diào)用函數(shù)和從函數(shù)返回的代碼可能比實(shí)際執(zhí)行這個(gè)小型計(jì)算工作所需要的時(shí)間更多。 所以宏比函數(shù)在程序的規(guī)模和速度方面更勝一籌。
????????更為重要的是函數(shù)的參數(shù)必須聲明為特定的類型。
所以函數(shù)只能在類型合適的表達(dá)式上使用。反之這個(gè)宏怎可以適用于整形、長整型、浮點(diǎn)型等可以 用于> 來比較的類型。

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言?

#define MALLOC(type,num) (type)malloc(sizeof(type)*num)

int* p = MALLOC(int*,4);//define實(shí)現(xiàn)自定義封裝

缺點(diǎn)

1.宏不能調(diào)試。

2.宏可能會帶來運(yùn)算符優(yōu)先級問題。

3.宏由于類型無關(guān),可能會導(dǎo)致程序不嚴(yán)謹(jǐn)。

4.如果宏定義的代碼量過大,可能會大幅增加程序的長度。

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言?

#undef?

作用:移去#define定義的對象

?程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

命令行定義

此方法適用于linux操作系統(tǒng)用命令的方式在程序編譯的時(shí)候?qū)ξ炊x的變量進(jìn)行定義的一種方式。?

#include <stdio.h>
int main()
{
 ? ?int array [ARRAY_SIZE];
 ? ?int i = 0;
 ? ?for(i = 0; i< ARRAY_SIZE; i ++)
 ? {
 ? ? ? ?array[i] = i;
 ? }
 ? ?for(i = 0; i< ARRAY_SIZE; i ++)
 ? {
 ? ? ? ?printf("%d " ,array[i]);
 ? }
 ? ?printf("\n" );
 ? ?return 0;
}

?命令行:
gcc test.c -D ARRAY_SIZE=10?

?條件編譯

在編譯一個(gè)程序的時(shí)候我們?nèi)绻獙⒁粭l語句(一組語句)編譯或者放棄是很方便的。因?yàn)槲覀冇袟l件 編譯指令

常見的條件編譯語句:

#if 常量表達(dá)式
 //...
#endif
2.多個(gè)分支的條件編譯
#if 常量表達(dá)式
 //...
#elif 常量表達(dá)式
 //...
#else
 //...
#endif
3.判斷是否被定義
#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol
4.嵌套指令
#if defined(OS_UNIX)
 #ifdef OPTION1
 unix_version_option1();
 #endif
 #ifdef OPTION2
 unix_version_option2();
 #endif
#elif defined(OS_MSDOS)
 #ifdef OPTION2
 msdos_version_option2();
 #endif
#endif

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

與if..else很相似,不同的是條件編譯會把不滿足條件的代碼在預(yù)處理階段直接刪除掉。?

頭文件包含


本地文件包含:

#include "filename"

庫文件包含:

#include <stdio.h>

嵌套包含:

程序的編譯和鏈接,c,linux,運(yùn)維,服務(wù)器,c語言

comm.h comm.c 是公共模塊。
test1.h test1.c 使用了公共模塊。
test2.h test2.c 使用了公共模塊。
test.h test.c 使用了 test1 模塊和 test2 模塊。
這樣最終程序中就會出現(xiàn)兩份 comm.h 的內(nèi)容。這樣就造成了文件內(nèi)容的重復(fù)

解決方案:

開頭寫:

#prama once

或者文章來源地址http://www.zghlxwxcb.cn/news/detail-719784.html

#ifndef __TEST_H__
#define __TEST_H__
//頭文件的內(nèi)容
#endif

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

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

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

相關(guān)文章

  • 【Linux運(yùn)維】shell腳本檢查服務(wù)器內(nèi)存和CPU利用率

    在管理服務(wù)器時(shí)候?qū)懥艘粋€(gè) shell腳本,在服務(wù)上實(shí)現(xiàn)每天凌晨3點(diǎn)查系統(tǒng)的指定文件夾下的容量大小,如果超過10G就要?jiǎng)h除3天前的內(nèi)容,還要時(shí)刻查詢內(nèi)存和cpu利用率,如果超過80%就要提示用戶出現(xiàn)過載 將以上代碼保存為一個(gè).sh文件,然后通過crontab在每天凌晨3點(diǎn)運(yùn)行即可:

    2024年02月09日
    瀏覽(33)
  • Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    Linux本地部署1Panel服務(wù)器運(yùn)維管理面板并實(shí)現(xiàn)公網(wǎng)訪問

    1Panel 是一個(gè)現(xiàn)代化、開源的 Linux 服務(wù)器運(yùn)維管理面板。高效管理,通過 Web 端輕松管理 Linux 服務(wù)器,包括主機(jī)監(jiān)控、文件管理、數(shù)據(jù)庫管理、容器管理等 下面我們介紹在Linux 本地安裝1Panel 并結(jié)合cpolar 內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問1Panel 管理界面 執(zhí)行如下命令一鍵安裝 1Panel: 安

    2024年02月04日
    瀏覽(107)
  • Linux服務(wù)器常見運(yùn)維性能測試(1)綜合跑分unixbench、superbench

    Linux服務(wù)器常見運(yùn)維性能測試(1)綜合跑分unixbench、superbench

    最近需要測試一批服務(wù)器的相關(guān)硬件性能,以及在常規(guī)環(huán)境下的硬件運(yùn)行穩(wěn)定情況,需要持續(xù)拷機(jī)測試穩(wěn)定性。所以找了一些測試用例。本次測試包括在服務(wù)器的高低溫下性能記錄及壓力測試,高低電壓下性能記錄及壓力測試,常規(guī)環(huán)境下CPU滿載穩(wěn)定運(yùn)行的功率記錄。 這個(gè)系

    2024年02月04日
    瀏覽(103)
  • SecureCRT鏈接linux服務(wù)器提示Key exchange failed的解決辦法

    SecureCRT鏈接linux服務(wù)器提示Key exchange failed的解決辦法

    今天重新購買了騰訊云服務(wù)器,不得不說現(xiàn)在的優(yōu)惠力度太小了,服務(wù)器基本找不到3年的,都是1年或者6個(gè)月的,但是因?yàn)榉?wù)器要到期了,等不到雙十一,就直接買了,購買之后首當(dāng)其沖就是鏈接服務(wù)器,安裝寶塔控制系統(tǒng),但是當(dāng)使用SecureCRT鏈接服務(wù)器的時(shí)候提示: 如圖

    2024年02月13日
    瀏覽(22)
  • [1Panel]開源,現(xiàn)代化,新一代的 Linux 服務(wù)器運(yùn)維管理面板

    [1Panel]開源,現(xiàn)代化,新一代的 Linux 服務(wù)器運(yùn)維管理面板

    本期測評試用一下1Panel這款面板。1Panel是國內(nèi)飛致云旗下開源產(chǎn)品。整個(gè)界面簡潔清爽,后端使用GO開發(fā),前端使用VUE的Element-Plus作為UI框架,整個(gè)面板的管理都是基于docker的,想法很先進(jìn)。官方還提供了視頻的使用教程,本期為大家按照本專欄的基本內(nèi)容進(jìn)行多方面的測評。

    2024年02月07日
    瀏覽(67)
  • Linux環(huán)境編譯服務(wù)器中修改python版本方式

    Linux環(huán)境編譯服務(wù)器中修改python版本方式

    一、系統(tǒng)級修改 1、用whereis python查看服務(wù)器中存在的python 版本 2、刪除原有的python版本環(huán)境 3、切換python 版本 4、查看python 版本 二、用戶級修改 1、查看home/username目錄下有沒有以下兩個(gè)隱藏文件 如果沒有上面兩個(gè)文件,從?/etc/skel/目錄拷貝.bashrc、.profile兩個(gè)文件到home/user

    2024年02月09日
    瀏覽(97)
  • Linux服務(wù)器常見運(yùn)維性能測試(3)CPU測試super_pi、sysbench

    Linux服務(wù)器常見運(yùn)維性能測試(3)CPU測試super_pi、sysbench

    最近需要測試一批服務(wù)器的相關(guān)硬件性能,以及在常規(guī)環(huán)境下的硬件運(yùn)行穩(wěn)定情況,需要持續(xù)拷機(jī)測試穩(wěn)定性。所以找了一些測試用例。本次測試包括在服務(wù)器的高低溫下性能記錄及壓力測試,高低電壓下性能記錄及壓力測試,常規(guī)環(huán)境下CPU滿載穩(wěn)定運(yùn)行的功率記錄。 這個(gè)系

    2024年02月02日
    瀏覽(51)
  • 華為云云耀云服務(wù)器L實(shí)例評測 | Linux系統(tǒng)寶塔運(yùn)維部署H5游戲

    華為云云耀云服務(wù)器L實(shí)例評測 | Linux系統(tǒng)寶塔運(yùn)維部署H5游戲

    本章節(jié)內(nèi)容,我們主要介紹華為云耀服務(wù)器L實(shí)例,從云服務(wù)的優(yōu)勢講起,然后講解華為云耀服務(wù)器L實(shí)例資源面板如何操作,如何使用寶塔運(yùn)維服務(wù),如何使用運(yùn)維工具可視化安裝nginx,最后部署一個(gè)自研的H5的小游戲(6歲的小朋友玩的很開心??)。 前端的同學(xué)如果想把自己

    2024年02月07日
    瀏覽(26)
  • 漏刻有時(shí)地理信息系統(tǒng)LOCKGIS小程序配置說明(web-view組件、服務(wù)器域名配置、復(fù)制鏈接和轉(zhuǎn)發(fā)功能)

    漏刻有時(shí)地理信息系統(tǒng)LOCKGIS小程序配置說明(web-view組件、服務(wù)器域名配置、復(fù)制鏈接和轉(zhuǎn)發(fā)功能)

    漏刻有時(shí)地理信息系統(tǒng)說明文檔(LOCKGIS、php后臺管理、三端一體PC-H5-微信小程序、百度地圖jsAPI二次開發(fā)、標(biāo)注彈窗導(dǎo)航) 漏刻有時(shí)地理信息系統(tǒng)LOCKGIS小程序配置說明(web-view組件、服務(wù)器域名配置、復(fù)制鏈接和轉(zhuǎn)發(fā)功能) 漏刻有時(shí)地理信息系統(tǒng)LOCKGIS主程序配置說明(地圖調(diào)起彈

    2024年02月07日
    瀏覽(20)
  • 鏈接服務(wù)器 “(null)“ 的 OLE DB 訪問接口 “Microsoft.Ace.OleDb.12.0“ 報(bào)錯(cuò)。提供程序未給出有關(guān)錯(cuò)誤的任何信息。

    鏈接服務(wù)器 “(null)“ 的 OLE DB 訪問接口 “Microsoft.Ace.OleDb.12.0“ 報(bào)錯(cuò)。提供程序未給出有關(guān)錯(cuò)誤的任何信息。

    【錯(cuò)誤信息】 消息 7399,級別 16,狀態(tài) 1,第 1 行 鏈接服務(wù)器 \\\"(null)\\\" 的 OLE DB 訪問接口 \\\"Microsoft.Ace.OleDb.12.0\\\" 報(bào)錯(cuò)。提供程序未給出有關(guān)錯(cuò)誤的任何信息。 (搞了我一天終于找到原因了) 解決方案:1:右擊點(diǎn)擊屬性? 勾選 第一個(gè) 和第三個(gè)。 ? ? ? ?? 2.復(fù)制下面這段。 --開

    2024年02月04日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包