c語言中的define的問題,c語言中的一個 define的問題

2022-02-25 05:37:16 字數 5379 閱讀 1315

1樓:

很正常的,簡單的說,是為了之後**中使用#ifdef aodv_local_repair 或者#ifndef aodv_local_repair等等。 badganker兄說的對的,看過mfc的程式你就發現標頭檔案一開頭一大串這個。

除此還有其他作用,你做過正規大點的專案開發就知道了:

不但檔案裡#define一個巨集定義,在vc6.0裡的project-setting-c/c++選項裡有個preprocessor definitions,這裡可以新增巨集定義,比如aodv_local_repair,這跟在檔案裡用#define的區別是,一個的作用域是整個project,一個的作用域是一個檔案。

跟你講下這用來做什麼吧。比如一個現有專案1有兩個模組a和b,現在專案2要求把b模組去掉,因為不需要或者硬體不支援等,你想想該怎麼做?是把涉及到b模組的**刪掉或註釋掉麼?

那這個專案2又新增了一個c模組,而後期又有個新專案3需要abc三個模組,那是不是要在專案1上再新增模組c(這個工作在專案2其實已經做過了,變成重複勞動了),或者在專案2上再把刪掉或註釋的b模組重新加進來? 這才三個模組,比如幾十個模組,每個專案都是需要不同的模組的呢? 呵呵,實際開發專案時當然不會這樣去刪除模組**的。

而是每個模組都有巨集定義來控制的。可以想想怎麼做?

比如模組a對應巨集定義project_module_a, b對應巨集定義project_module_b,c對應巨集定義project_module_c。 涉及a模組的**之前都有#ifdef project_module_a,同樣b、c也是。那開發上面的專案2時在project設定預定義裡寫上project_module_a 與 project_module_c, 不要寫project_module_b, 那這樣b模組的**就自然不會被編譯進去了。

注意,**本身沒有變,只是project_module_b巨集定義來控制b模組要不要被編譯進去。等到作專案3時,再把project_module_b巨集定義進來就好了。這個巨集定義的作用我們一般叫它編譯選項開關, 呵呵,確實是一個開關。

2樓:匿名使用者

比如說 ,#define aodv 333

以後遇到aody就用333代替

關於c語言define的一個問題

c語言中#define是什麼意思

3樓:超級飄飄乖乖

是定義的意思,將一個變數強制定義為你想要的值。如#define pi 3.14就是將pi的值定義成3.14,這樣在程式裡看到pi就可以替換成3.14了。

在程式執行期間其值可以改變的量稱為變數,變數型別又分為系統變數和使用者自定義變數。

使用者自定義變數其實和系統變數含義是一樣的,在學到結構化程式設計的時候,你就會明白自定義變數的意思了。

系統變數分為四種:

1、int整形變數;

2、使用者存放整數的變數;

3、佔4個位元組的大小;float單精度浮點型,就是存放小數點的數值;佔4個位元組大小;double高精度浮點型,相對float而言,double保留的小數點位數更精確,

4、佔8個位元組的大小;char字元變數,主要存放字母,佔1個位元組的大小。

簡單的define定義

#define maxtime 1000

一個簡單的maxtime就定義好了,它代表1000,如果在程式裡面寫

if(i編譯器在處理這個**之前會對maxtime進行處理替換為1000。

這樣的定義看起來類似於普通的常量定義const,但也有著不同,因為define的定義更像是簡單的文字替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。

4樓:可愛的壞男孩

有的時候為了程式的通用性,可以使用#define預處理巨集定義命令,它的具體作用,就

是方便程式段的定義和修改。

舉個例子吧,如果說你在做一個專案,這個專案的**很長,有5000多行,而且基本上裡面的同一個常量n就佔了3000多行,如果說今後你要是想對這個常量n的值進行修改,如果在程式的開始沒有定義一個#define n,那麼改起來不是很麻煩,3000多行啊,那不是要暈過去了~如果你事先定義了一個#define n 『常量值』,那麼當你要修改程式內部的常量值時,只要修改n後面的常量值就等於把程式內部的要修改的相同常量值都改了,那就很方便了

在程式執行期間其值可以改變的量稱為變數,變數型別又分為系統變數和使用者自定義變數,使用者自定義變數其實和系統變數含義是一樣的,在學到結構化程式設計的時候,你就會明白自定義變數的意思了。系統變數分為四種,int整形變數,使用者存放整數的變數,佔4個位元組的大小;float單精度浮點型,就是存放小數點的數值,佔4個位元組大小;double高精度浮點型,相對float而言,double保畱的小數點位數更精確,佔8個位元組的大小;char字元變數,主要存放字母,佔1個位元組的大小

5樓:福建省寧德市

#define是巨集定義的意思

2. 巨集定義是用巨集名來表示一個字串,在巨集展開時又以該字串取代巨集名,這只是一種簡單的代換,字串中可以含任何字元,可以是常數,也可以是表示式,預處理程式對它不作任何檢查。如有錯誤,只能在編譯已被巨集後的源程式時發現。

3.巨集定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。

4.巨集定義其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用#undef命令。

6樓:雲南新華電腦學校

#define是巨集定義的意思;int整型變數;

7樓:謐夜欣韻

定義的意思,比如#define size 5,這就定義了一個巨集,size在程式中就等於5,這樣更改一個大量使用的值很方便,如:int a[size]就和int a[5]一樣

8樓:匿名使用者

#define

讓大師來用最簡單的方法來回答,就是 定義一個可以替換的 東東比如說#define a b

在程式中遇到a,a就變成b了

他還可以檢討的

比如#define a a,b

#define b a,b,c

b把他佔開就是 a b b c

9樓:匿名使用者

還有一點 巨集只是文字替換 不參與編譯

10樓:匿名使用者

定義嘛,一般用於定義標頭檔案。

11樓:匿名使用者

...基本東西書上都有

c語言中define的問題

c語言中#define和equ的區別是什麼

12樓:匿名使用者

#define 是巨集定義,在預編譯的時候就會處理.而equ是在程式裡的給變數賦值.他們之間在給變數賦值上就這麼點區別,#define的作用很多,多用就會有體會.

說的不太好,大概就這麼個意思,希望不要把你毒害了.

13樓:匿名使用者

equ和define是有區別的

equ 對標號賦值

#define 定義文字替換標號,類似於c語言裡面常用的巨集替換經過測試 equ可放在程式中間,而define則不能,否則報錯,找不到標號

如果放在程式的開頭則都不會報錯

14樓:楊塵一

在c語言中#define用於定義文字替換標號,類似於c語言裡面常用的巨集替換。

equ用於 對標號賦值,equ可放在程式中間,而#define則只能用於程式開頭。

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言訂定了一套完整的國際標準語法,稱為ansi c,作為c語言最初的標準。

15樓:匿名使用者

c語言中好像沒有equ的吧?

(c語言)關於#define的問題

16樓:匿名使用者

首先,這個執行結果是正常的,是你在寫巨集定義的時候不太規範,解決方法:

在巨集定義裡把用到的所有的巨集引數都加上括號

比如第二個改成:#define m(x,y,z) (x)*(y)+(z)

第三個改成:#define m(x) (x)*((x)-1)

這樣的話程式就是按你想的方式執行了

原理:#define的功能

#define 是預編譯指令,它相當於程式設計師與編譯器間的一個協議,用#define可以定義很多東西,包括簡短的**段(長**段也可以,就是麻煩點)。當出現「#define a b」這樣的巨集定義後,編譯器編譯程式前會把**中所有出現的a換成b再進行編譯,就是說#define的功能相當於就是語句(字串)替換,巨集裡用到的引數也只是語句替換,而不是語句值的替換。具體點,舉你說的例子

對於m(x,y,z) x*y+z,當編譯器遇到m(a+b,b+c,c+a)這樣的巨集時,會將它成 a+b * b+c + c+a,就是直接把a+b這個語句放到x的位置,把b+c這個語句放到y的位置,把c+a這個語句放到z的位置,而不是將a+b這個整體的值當做x的值再代入到x*y+z中運算,這點跟函式呼叫是不一樣的。這樣的話( a+b * b+c + c+a ),程式執行起來就是先算b*b的值,再算剩下的加法,最後得到的值就是 1+2*2+3+3+1=12。

而在巨集定義裡的引數上加上括號後,比如:#define m(x,y,z) (x)*(y)+(z),這樣m(a+b,b+c,c+a)預編譯後就是 (a+b) * (b+c) + (c+a),這樣結果就想你想的那樣了。

17樓:聞凝春秀華

#define

m(x,y,z)

x*y+z

此巨集時不能自行加括號,直接原形即可

由int

a=1,b=2,c=3;

得m(a+b,b+c,c+a)=a+b*b+c+c+d=1+2*2+3+3+1=12

18樓:匿名使用者

牢記:#define操作只是簡單地作文字替換,所以在有操作符存在的時候一定要注意加括號。

1. #define min(x,y) (x)<(y)?(x):(y)

應該改成#define min(x,y) ((x)<(y)?(x):(y))

2.#define m(x,y,z) x*y+z

應該改成#define m(x,y,z) ((x)*(y)+(z))

3.#define m(x) x*(x-1)

應該改成#define m(x) ((x)*(x-1))

加了括號以後,可以防止「呼叫」時產生的運算子優先順序出錯。建議樓主養成加括號的好習慣。

19樓:小何才露尖尖角兒

#define 是,是替換**。比如最後一個m(1+a+b),就是1+a+b*(1+a+b-1) == 8

C語言中的問題,c語言中 p , p 的問題

講一下vc6.0的流程 1.a 0 前置自減運算子先運算,結果使a 02.a a 0 後置運算子在表示式中先使用,後運算,所以a 的值還是0 3.0 a 0 後置運算子在表示式中先使用,後運算,所以a 的值還是0 4.0 a 0 1 1 前置運算子先運算,結果使a變為1 所以結果sum 1 運算後,...

C語言中的define是什麼意思,有什麼作用,怎樣用

預編譯定義 像是 define aabc 他會在編譯時找到a然後把他們都換成abc 通常會用 define pi3.14 這樣的語句定義數字 巨集定義,用於定義全域性變數 如 define num 1 那麼在你的程式裡mun就等於1 c語言中的 define是什麼意思,有什麼作用,怎樣用?巨集定義,...

C語言中函式呼叫問題,C語言中函式的呼叫

首先我們來說一下,你這個程式是有很大的問題的。函式有且只有唯一一個返回值,當程式執行到return的時候,這個函式就結束並返回了。所以,你這裡寫2個return來返回最大值和最小值是不可能的。再者,如果你想使用返回值作為最大值,最小值的傳遞,那麼在main函式中,你呼叫star函式的時候需要一個變數...