1樓:匿名使用者
你定義了。在程式中是不能改變的。只能在定義的地方修改。程式在預處理期間進行值替換。
2樓:德眾
比如巨集定義在一開頭定義# define n 10,那麼接下來所有的n都是10,巨集定義一旦定下除非你修改**否則都無法修改巨集定義
3樓:成都中公優就業
巨集定義在程式內是不可改變的,只能在定義的地方只能在定義的地方修改。程式在預處理期間進行值替換。
舉例說明
#define n 20
這個就是巨集定義,當然可以修改,例如這個n代表輸入陣列個數,在主程式中void main()
就可以這樣用,在編譯時,程式會自動替換掉n為20,既你巨集定義的值;只會花費編譯時間。如果你想修改陣列大小隻需修改
#define n 30;
即可,當然識別符號n也可以修改。
4樓:暴風一號
當然可以修改!
例如:#define image_w 500就可以修改為
#define image_w 700
5樓:匿名使用者
巨集定義就是指在main函式之前讀一某些變數進行定義,便於在編寫時的使用,同時在修改的時候也會很方便的,你如說我把m定義成(x*x+3*x),在以後的使用中,我可以直接用m就行了,很方便的,而且如果修改的話不用全改,只需要在巨集定義那裡改了就行
6樓:匿名使用者
#define n 20
這個就是巨集定義,當然可以修改,
例如這個n代表輸入陣列個數,在主程式中
void main()
就可以這樣用,在編譯時,程式會自動替換掉n為20,既你巨集定義的值;只會花費編譯時間。如果你想修改陣列大小隻需修改
#define n 30;即可,當然識別符號n也可以修改。
c語言中怎樣修改巨集定義呢
7樓:青山鬱
什麼意思?是在定義巨集後的程式**中改,還是在編輯巨集定義的時候該?
如果是前者,巨集定義是在預編譯時是就決定的,在程式執行時是不能改的;如果是後者,直接改就行了。
8樓:八條
比如你想定義n=5,就這樣:#define n 5
如果你想修改巨集為x=3.2,則為:#define x 3.2
看懂了嗎,希望能幫上你
9樓: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語言怎麼把巨集定義的資料配置到檔案中,當需要更改某些資料時,不需要開啟程式,在檔案中直接修改。
10樓:匿名使用者
巨集定義不是變數或常量,c語言在編譯前要進行預處理,這些處理包括巨集,其實就是用定義的巨集,把**中使用的巨集名全部替換掉,是純粹的字串替換,不檢查語法,比如:
#define pi 3.1415926
檔案中的 “pi” 全部換成 “3.1415926” ,這是為了編輯**方便而已;編譯後就不會有 "pi" ,而是常量 ”3.1415926“ ,
你要做配置檔案,就要設定變數,把檔案中的資料讀入變數,什麼變數都可以,
你可以去查一查c語言的巨集定義
11樓:奧宇斯汀
1)首先建立一個 標頭檔案
2)然後在標頭檔案中定義這些巨集
3) 在 .c 檔案中包含就行了
別忘在在標頭檔案中加上 #ifndef ***x #define ***x #endif
12樓:匿名使用者
自己定義一個格式
把要修改的資料定義為變數,
程式啟動時讀取檔案的資料,修改相應引數的變數.
c語言的巨集定義問題
c語言巨集定義如何用?用巨集定義有什麼優點?
13樓:我愛流雨飛軒
巨集定義巨集定義是c提供的三種預處理功能的其中一種,這三種預處理包括:巨集定義、檔案包含、條件編譯
編輯本段1.不帶引數的巨集定義:
巨集定義又稱為巨集代換、巨集替換,簡稱“巨集”。
格式:#define 識別符號 字串
其中的識別符號就是所謂的符號常量,也稱為“巨集名”。
預處理(預編譯)工作也叫做巨集:將巨集名替換為字串。
掌握"巨集"概念的關鍵是“換”。一切以換為前提、做任何事情之前先要換,準確理解之前就要“換”。
即在對相關命令或語句的含義和功能作具體分析之前就要換:
例: #define pi 3.1415926
把程式中出現的pi全部換成3.1415926
說明:(1)巨集名一般用大寫
(2)使用巨集可提高程式的通用性和易讀性,減少不一致性,減少輸入錯誤和便於修改。例如:陣列大小常用巨集定義
(3)預處理是在編譯之前的處理,而編譯工作的任務之一就是語法檢查,預處理不做語法檢查。
(4)巨集定義末尾不加分號;
(5)巨集定義寫在函式的花括號外邊,作用域為其後的程式,通常在檔案的最開頭。
(6)可以用#undef命令終止巨集定義的作用域
(7)巨集定義可以巢狀
(8)字串" "中永遠不包含巨集
(9)巨集定義不分配記憶體,變數定義分配記憶體。
編輯本段2.帶引數的巨集定義:
除了一般的字串替換,還要做引數代換
格式:#define 巨集名(參數列) 字串
例如:#define s(a,b) a*b
area=s(3,2);第一步被換為area=a*b; ,第二步被換為area=3*2;
類似於函式呼叫,有一個啞實結合的過程:
(1)實參如果是表示式容易出問題
#define s(r) r*r
area=s(a+b);第一步換為area=r*r;,第二步被換為area=a+b*a+b;
正確的巨集定義是#define s(r) ((r)*(r))
(2)巨集名和引數的括號間不能有空格
(3)巨集替換隻作替換,不做計算,不做表示式求解
(4)函式呼叫在編譯後程式執行時進行,並且分配記憶體。巨集替換在編譯前進行,不分配記憶體
(5)巨集的啞實結合不存在型別,也沒有型別轉換。
(6)函式只有一個返回值,利用巨集則可以設法得到多個值
(7)巨集使源程式變長,函式呼叫不會
(8)巨集不佔執行時間,只佔編譯時間,函式呼叫佔執行時間(分配記憶體、保留現場、值傳遞、返回值
c語言巨集定義技巧(常用巨集定義)
寫好c語言,漂亮的巨集定義很重要,使用巨集定義可以防止出錯,提高可移植性,可讀性,方便性 等等。下面列舉一些成熟軟體中常用得巨集定義。。。。。。
14樓:匿名使用者
主要用於函式重定義,通用性,可以用一個變數符號替代另一個變數符號格式:#define m(x,y) x+y在主程式裡寫入z=m(6,9);等價於z=6+9;而寫成z=(6-8,9);等價於z=6-8+9 ;直接代入
還有就是 :#define uint unsigned int 即用 uint 代替unsigned int 便於書寫,還有就是不同作業系統的通用變數識別
15樓:匿名使用者
用#define 來定義,如#define max 100
優點:在以後的程式中 要修改max的大小 不用跑到程式中找 直接修改
#define max 的大小即可。很方便。
16樓:匿名使用者
自己去**找呀!!!!
關於C語言巨集定義的問題,C語言的巨集定義問題
錯誤原因 定義巨集的時候 define print a 多了一個分號 一直到下面 的時候巨集自動幫你替換成 printf the end 那麼根據for迴圈的規律,不加 的情況下,它只執行 printf the end 所以不一樣,第2個之所以只輸出一個其實那是在for迴圈結束後才執行的 注 巨集定...
C語言中的巨集定義如何使用,c語言巨集定義如何用?用巨集定義有什麼優點?
正確的完整輸出 3 個整數的程式結構應該按照如下寫法 define n 3 include int main for i 0 i n i 迴圈輸出整數陣列 a 中的 3 個數字,特別要注意 i 必須要寫成 i n,而不能夠寫成 i n,否則的話,就會產生越界錯誤。printf d t a i pri...
求助C語言巨集定義bytex
在巨集代換是這樣處理的 each is deleted,together with any white space on either side.c89 翻譯過來也就是每個 都會被刪掉,包括在它兩邊的空格。不是連線符,就像你說的 一般 用作連線符,注意是 一般 這是它的典型用法。這種用法也是根據他的...