1樓:青山鬱
什麼意思?是在定義巨集後的程式**中改,還是在編輯巨集定義的時候該?
如果是前者,巨集定義是在預編譯時是就決定的,在程式執行時是不能改的;如果是後者,直接改就行了。
2樓:八條
比如你想定義n=5,就這樣:#define n 5
如果你想修改巨集為x=3.2,則為:#define x 3.2
看懂了嗎,希望能幫上你
3樓:xz巨集定義
#define是c語言中提供的巨集定義命令,其主要目的是為程式設計師在程式設計時提供一定的方便,並能在一定程度上提高程式的執行效率,但學生在學習時往往不能理解該命令的本質,總是在此處產生一些困惑,在程式設計時誤用該命令,使得程式的執行與預期的目的不一致,或者在讀別人寫的程式時,把執行結果理解錯誤,這對 c語言的學習很不利。
1 #define命令剖析
1.1 #define的概念
#define命令是c語言中的一個巨集定義命令,它用來將一個識別符號定義為一個字串,該識別符號被稱為巨集名,被定義的字串稱為替換文字。
該命令有兩種格式:一種是簡單的巨集定義,另一種是帶引數的巨集定義。
(1) 簡單的巨集定義:
#define 《巨集名》 《字串》
例: #define pi 3.1415926
(2) 帶引數的巨集定義
#define 《巨集名》 (《參數列》) 《巨集體》
例: #define a(x) x
一個識別符號被巨集定義後,該識別符號便是一個巨集名。這時,在程式中出現的是巨集名,在該程式被編譯前,先將巨集名用被定義的字串替換,這稱為巨集替換,替換後才進行編譯,巨集替換是簡單的替換。
1.2 巨集替換髮生的時機
為了能夠真正理解#define的作用,讓我們來了解一下對c語言源程式的處理過程。當我們在一個整合的開發環境如turbo c中將編寫好的源程式進行編譯時,實際經過了預處理、編譯、彙編和連線幾個過程,見圖1。
源程式前處理器
修改後的源程式
編譯器彙編程式
彙編器可重定位的目標程式
聯結器可執行的目標程式
圖1 c語言的編譯過程
其中前處理器產生編譯器的輸出,它實現以下的功能:
(1) 檔案包含
可以把源程式中的#include 擴充套件為檔案正文,即把包含的.h檔案找到併到#include 所在處。
(2) 條件編譯
前處理器根據#if和#ifdef等編譯命令及其後的條件,將源程式中的某部分包含進來或排除在外,通常把排除在外的語句轉換成空行。
(3) 巨集
前處理器將源程式檔案中出現的對巨集的引用成相應的巨集 定義,即本文所說的#define的功能,由前處理器來完成。
經過前處理器處理的源程式與之前的源程式有所有不同,在這個階段所進行的工作只是純粹的替換與,沒有任何計算功能,所以在學習#define命令時只要能真正理解這一點,這樣才不會對此命令引起誤解並誤用。
c語言中的巨集定義怎麼用?
4樓:仁昌居士
c語言bai中的巨集
定義用du法分為兩種。
1、不帶引數zhi的巨集定義比較dao簡單,就是用一個指定回的答識別符號來代表一個字串。它的一般形式為“#define 識別符號 字串”,例如#define e 2.718281828459。
這種方法使使用者能以一個簡單的名字代替一個長的字串。
2、帶引數的巨集定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;“#define 識別符號(巨集名)(參數列) 字串”,字串中包含在括號中所指定的引數。例如#define s(a,b) a*b area=s(3.
2)。
5樓:天雲一號
巨集定義的格式如下:
#define 識別符號 字串
其中,#表示這是一條預處理命令;內#define為巨集容定義命令;“識別符號”為巨集定義的巨集名;“字串”可以上常數、表示式、格式串等。
舉例如下:
#define pi 3.14 // 對3.14進行巨集定義,巨集名為pi
void main()
6樓:匿名使用者
在想對特定的內容定義的時候用
參考**
有問版題請追問 滿意記得權採納
7樓:匿名使用者
#define 巨集名稱 定值
在c語言中 巨集定義是什麼?
8樓:雪人晒太陽
在c語言源程式中,允許用一個識別符號來表示一個字串,稱為巨集,巨集定義是由源程式中的巨集定義命令完成的,巨集替換是由預處理程式自動完成的。巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯。
9樓:仁昌居士
c語言中的巨集定義用法分為兩種。
1、不帶引數的巨集定義比較簡單,就是用一個指定的識別符號來代表一個字串。它的一般形式為“#define 識別符號 字串”,例如#define e 2.718281828459。
這種方法使使用者能以一個簡單的名字代替一個長的字串。
2、帶引數的巨集定義不是僅僅進行簡單的字串替換,還要進行引數替換。其定義的一般形式為;“#define 識別符號(巨集名)(參數列) 字串”,字串中包含在括號中所指定的引數。例如#define s(a,b) a*b area=s(3.
2)。
c語言中的巨集定義有什麼用?
10樓:風林火陰山雷
您好!很高興為您解答。
巨集定義的用處主要體現在便於程式的除錯上。
比如我要寫一個計算圓相關資訊(周長、面積等等)的程式,需要定義π(3.14):
#define pi 3.14
那麼勢必pi這個標識可以在程式中代替所有的3.14,如果我發現計算的精度不夠,需要π的更多有效位時,則只需將巨集定義修改為:
#define pi 3.1415926
那麼程式中的所有pi都會變成3.1415926
可想而知,沒有巨集定義,我需要將**中全部的3.14都手動改為3.1415926
即使是定義double pi=3.14;,你會發現當**很長時,在亂軍叢中找到一行“double pi=3.14;”是多麼困難的事。
又比如陣列,定義時是不能出現“int a[n];”這樣的定義的,編譯通不過,因為必須規定陣列長度。
但如果是:
#define n 10
int a[n];
就可以,對巨集定義編譯器是不作檢查的,應為巨集定義只是簡單的符號替換。所以一旦我還沒有確定要定義多長的陣列,但又想通過編譯時,就可以提現巨集定義的用處了。
如此看來,巨集定義提升了程式編寫的靈活性。
望採納~如您還有不解,歡迎追問~
11樓:綠波菜
在這個題中是看不出什麼好處 for (int i=0; i以用 10 代替,因為題目簡單 但是如果比較複雜的 如二位陣列啊a[m][n] 中可能一個 for (int i=0; i m n 巨集定義,就不需再用具體數值代替 這樣 程式的可讀性就好很多,你要知道,程式設計師編好程式 也會有人幫他複查的,如果你都用數值代替 ,一旦**很複雜了你自己看的明白,別人就不知所云了,當然還有一些好處 如 當遇到較長數值時 用一個字母代替 有簡化作用等。 12樓:匿名使用者 ①重用性高:比如你定義一個函式a裡有個陣列a[10],其他地方用到了函式a但是陣列大小為100,若是用了巨集定義就不用一個個改了,直接把函式複製過去#define n 10改為#define n 100即可 ②不易出錯:用到很多的某一資料時很管用如#define π 3.1415916 13樓:閒來無事 編譯的時候替換成10 天雲一號 在c語言中,陣列的定義都是固定長度的,長度不允許變化。可以通過連結串列的方式來達到定義 動態陣列 的等價功能,舉例如下 連結串列節點定義如下 struct node 存放資料時可以對節點中的node賦值即可,如 struct node p 定義一個連結串列節點p data 3 存放第一個資... 1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.1415926 程式中的 area pi r r 會替換為3.1415926 r r 如果你把 define語句中的數... c當中是沒有常變數的,也就是定義的變數賦值了常數但是仍然可以改變值 c 裡邊才有常變數,定義同時初始化,以後就不能改變值了。c中的巨集定義就是一種替換,上的複製替換,可以這樣理解,define a 12345就是凡是a出現的地方都用12345替換,當然巨集替換就不止數值,還可以到字串 函式表示式上去...C語言中怎樣定義動態一維陣列,c語言中定義一個動態一維陣列的函式,然後在主函式中使用
c語言中巨集定義的define和typedef的區別是什麼
c語言中巨集跟常變數的定義有什麼區別