c語言對宏命令,C語言宏的用法

本文目錄一覽:

C語言中怎樣修改宏定義呢

什麼意思?是在定義宏後的程序代碼中改,還是在編輯宏定義的時候該?

如果是前者,宏定義是在預編譯時是就決定的,在程序運行時是不能改的;如果是後者,直接改就行了。

在C語言中「宏是什麼意思」

定義的意思

在C語言中的宏定義就是定義外部變量 內部函數使用exiterm來調用

如:exiterm char c1,c2;

C語言中的宏定義的字是:define

C語言中的define宏定義有帶參數的和不帶參數兩中形式

不帶參格式是:#define 宏名 字符串

帶參格式是:#define 宏名(參數1,參數2,…) 字符串

在C語言里宏定義只用來做的宏名替換,而不做語法檢查的,因而它不是C語句,所以在宏定義的時候不需要在後面加”;”

宏也在C里也叫預處理命令,因為宏是在程序編譯前先進行字符替換的,所以叫預處理.在C里還有其它的預處理命令如:

#define

#undef

#ifdef

等等

c語言中的「宏」是指什麼?

宏是一種預處理指令,它提供了一種機制,可以用來替換源代碼中的字符串。

1、條件編譯:

C語言中,預處理過程讀入源代碼,檢查包含預處理指令的語句和宏定義,並對源代碼進行相應的轉換,預處理過程還會刪除程序中的注釋和多餘的空白符號。

預處理指令是以#開頭的代碼行,#必須是該行除了空白字符外的第一個字符。#後是指令關鍵字,在#和指令關鍵字之間允許存在若干空白字符。

使用宏進行條件編譯的用法與使用宏防止多重引用類似。示例如下:

使用條件編譯,方便程序員在調試程序的過程中,執行一些在程序發佈後並不需要執行的指令。只要在需要調試的代碼前加上_DEBUG的定義,就可以在調試程序的過程中輸出調試信息。

這樣方便查看程序在運行過程中有沒有出現錯誤,定位錯誤出現的地方。而在程序發佈之前,取消_DEBUG的定義就可以不再執行調試代碼。

2、宏函數:

函數的調用是需要一定的時間和空間代價的。因為系統在調用函數時,需要保留”現場”,即將程序要執行的指令的下一條指令的位置壓入棧,然後轉入調用函數去執行,調用完函數後再返回主調函數,恢復”現場”,返回到棧里保存的的下一條指令的位置繼續執行。

所以函數的調用需要額外的時間和空間代價。

而宏函數則不存在上述問題,宏函數在預編譯時,同函數定義的代碼來替換函數名,將函數代碼段嵌入到當前程序,不會產生函數調用。

所以會省去普通函數保留現場恢復現場的時間,但因為要將定義的函數體嵌入到當前程序,所以不可避免的會佔用額外的存儲空間。

在頻繁調用同一個宏的時候,該現象尤其明顯。宏函數的示例定義如下:

#define MAX(a,b) ((a)(b)?(b):(a))

宏函數的優點在於避免函數調用,提高程序效率。

同時需要注意的是inline標識符。inline也將函數定義為內聯的。但是使用內聯函數需要注意的是:函數體必須十分簡單,不能含有循環、條件、選擇等複雜結構,否則就不能作為內聯函數了。

事實上,有時候即便你沒有將函數指定為內聯函數,編譯器也會將一些簡單的函數作為內聯函數處理,而對於一些複雜的函數,即使聲明為內聯函數,編譯器也不會理會的。

inline函數的瓶頸就在於此,使用inline標識符將函數聲明為內聯的,但這只是一種提示,到底編譯器有沒有優化還依賴於編譯器的實現,而使用宏函數則完全由代碼本身控制。

但在使用宏函數的時候,需要明確的是宏函數只是簡單的替換,需要注意括號的使用。

擴展資料:

宏的更多規則特性:

(1)宏名一般用大寫。

(2)使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:數組大小常用宏定義。

(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。

(4)宏定義末尾不加分號。

(5)宏定義寫在函數的花括號外邊,作用域為其後的程序,通常在文件的最開頭。

(6)可以用#undef命令終止宏定義的作用域。

(7)宏定義不可以嵌套。

(8)字符串” “中永遠不包含宏。

(9)宏定義不分配內存,變量定義分配內存。

(10)宏定義不存在類型問題,它的參數也是無類型的。

參考資料:

百度百科–宏定義

10. C語言的編譯系統對宏命令的處理是( )。

前言:宏實質就是編譯器在對代碼進行編譯之前進行的一個「查找替換」工作,就跟你在處理文檔時用WPS/WORD/記事本等進行「查找替換」操作一樣。

C語言的編譯系統對宏命令的處理是()

A。在程序運行時進行的

B。在對源程序中其他成分正式編譯之前進行的

C。在程序連續時進行的

D。和C程序中的其他語句同時進行編譯

答:選B。在對源程序中其他成分正式編譯之前進行的

2,

#define N 2 /* 在預編譯時將用下面代碼中N替換成2 */

#define M N+1 /* 在預編譯時將M替換成N+1(即2+1,N會再被替換成2)*/

#define NUM 2*M+1 /* 如上:在預編譯時NUM替換成2*M+1,即2*N+1+1,即2*2+1+1*/

main()

{int i;

for(i=1;i=NUM;i++)printf(“%d\n”,i);

/*

* 如上所述,上句展開為:for(i=1;i=2*2+1+1;i++)printf(“%d\n”,i);

* 所以:循環將執行6次

*/

}

/* 切記注意:每一個宏百進行替換時只是替換「正文」中的內容,而不包括預編譯語句的內容, 否則就會像不少人理解的那樣,錯誤地認為第2個題中的循環將執行7次 */

C語言的編譯系統對宏命令的處理是

前言:宏實質就是編譯器在對代碼進行編譯之前進行的一個「查找替換」工作,就跟你在處理文檔時用wps/word/記事本等進行「查找替換」操作一樣。

c語言的編譯系統對宏命令的處理是()

a。在程序運行時進行的

b。在對源程序中其他成分正式編譯之前進行的

c。在程序連續時進行的

d。和c程序中的其他語句同時進行編譯

答:選b。在對源程序中其他成分正式編譯之前進行的

2,

#define

n

2

/*

在預編譯時將用下面代碼中n替換成2

*/

#define

m

n+1

/*

在預編譯時將m替換成n+1(即2+1,n會再被替換成2)*/

#define

num

2*m+1

/*

如上:在預編譯時num替換成2*m+1,即2*n+1+1,即2*2+1+1*/

main()

{int

i;

for(i=1;i=num;i++)printf(“%d\n”,i);

/*

*

如上所述,上句展開為:for(i=1;i=2*2+1+1;i++)printf(“%d\n”,i);

*

所以:循環將執行6次

*/

}

/*

切記注意:每一個宏百進行替換時只是替換「正文」中的內容,而不包括預編譯語句的內容,

否則就會像不少人理解的那樣,錯誤地認為第2個題中的循環將執行7次

*/

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/201081.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:29
下一篇 2024-12-06 11:29

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python命令大全及說明

    Python是一種高級編程語言,由Guido van Rossum於1989年底發明。它具有良好的語法結構和面向對象的編程思想,具有簡潔、易讀、易學的特點,是初學者以及專業開發人員…

    編程 2025-04-29
  • Git config命令用法介紹:用正確的郵箱保障開發工作

    本文將詳細介紹如何使用git config命令配置Git的全局和本地用戶信息,特別是如何正確使用用戶郵箱,保障Git操作的正常進行。 一、git config命令介紹 Git中的每…

    編程 2025-04-29
  • Python SSH 遠程執行命令

    Python SSH 遠程執行命令是指在一個服務器上執行遠程另一個服務器上命令。如果你需要在本地機器上執行命令,或者在遠程機器上執行本地命令,你都可以使用 SSH。在 Python…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論