1樓:匿名使用者
#define 是巨集定義,是最先編譯的,我們使用巨集定義一般不在函式內定義,因為這樣做意義不大而且容易造成你提問的理解問題,為了避免不好了解,建議在函式外定義,這樣每個函式都可以使用,才顯示出它的意義。
2樓:
可以 但是一開始就把它定義好
3樓:匿名使用者
定義成全域性變數就可以!
4樓:鼕鼕_韓
正像上面的那個朋友所說的,#define是巨集定義,但是說是「最先編譯」的有點不準確,因為編譯的話是將**轉換成機械碼的過程。而巨集是在編譯之前由編譯器先替換成要替換的字元或字串的,我感覺用「翻譯」會更準確。
明白了上面這段,下面你問的也就好解決了!
int add(int a, int b)int reduce(int a, int b)#undef pi
……在#define和#undef之間的pi在編譯前都會被替換成3.14,所以是有效的。到這裡的話其它的你也就應該都明白了!但是就像上面的朋友說的一樣,不提倡這麼用!
5樓:匿名使用者
不可以的,要用全域性變數
c語言巨集定義函式如何呼叫(裡面含引數可以當函式用嗎)
6樓:魔方格的故事
使用巨集函式或者巨集函式時,注意如下幾點:
1.巨集函式的引數沒有型別,前處理器只負責做形式上的替換,而不做引數型別檢查,所以傳參時要格外小心。
2.巨集函式定義要注意格式,尤其是括號。
如果上面的巨集函式寫成 #define max(a, b) (a>b?a:b),省去內層括號,則巨集就成了k = (i&0x0f>j&0x0f?
i&0x0f:j&0x0f),運算的優先順序就錯了。同樣道理,這個巨集定義的外層括號也是不能省的。
若函式中是巨集替換為 ++max(a,b),則巨集就成了 ++(a)>(b)?(a):(b),運算優先順序也是錯了。
3.巨集函式往往會導致較低的**執行效率。
若是普通函式,則通過遞迴,可取的最大值,時間複雜度為o(n)。但若是巨集函式,則巨集為( a[n]>max(n-1)?a[n]:
max(n-1) ),其中max(n-1)被呼叫了兩遍,這樣依此遞迴下去,時間複雜度會很高。
7樓:匿名使用者
巨集定義,不能當函式使(函式中的return是返回到呼叫點,而巨集中的return卻是從呼叫點跑開了)
你的**,在編譯時會進行巨集替換,真正的**變成了如下:
#include
//#define a(b,c)
int main()
//本身這句也有問題,return後跟的printf()永遠不會執行!
return 0;}
8樓:橙心橙願
可以啊,
不過#define a(b,c)其中的return d;最好去掉,因為巨集是直接貼到用呼叫處的,相當於
int main()
還沒printf就return了,列印不出來了
9樓:匿名使用者
不可以吧,函式執行的時候,遇到return就返回了,這個定義是不成功的。而且這樣定義完全沒有必要,可以定義子函式來實現。
一個c檔案中定義的巨集,在另一個c檔案中使用????
10樓:千古1帝劉公嗣
直接在b.c中重新定義一下,把a中的定義複製貼上一下,簡單粗暴。
或者把a中的巨集定義改寫到標頭檔案中。
11樓:
例如定義hong 為 1234,標頭檔案裡寫: #ifndef hong#define hong 1234#endif 前後兩句是保護,避免標頭檔案多次#include 時 重複定義hong 。
12樓:匿名使用者
在b.c檔案中包含檔案a.c:
b.c檔案中用如下命令即可
#include"a.c" (注意b.c的檔案路勁就可以)
c語言中能否在一個自定義函式中呼叫另一個自定義函式?
13樓:七班趙子龍
當然copy
可以!c語言程式的最基本的模組就是函式,
該程式規定:任意函式都可以呼叫其它任意一個函式,包括函式本身;
1、函式呼叫自己本身, 這種稱為遞迴;
通過遞迴,計算1+2+3+...+n值的**:
2、自定義函式呼叫其它自定義函式的例子:
這個例子就是主函式呼叫自定義函式fun2,然後fun2呼叫另一個自定義函式fun1;
c語言中定義常數變數怎麼定義 用define的那種
14樓:
因為來define是一種巨集定義,源所以他屬於一種全域性型別,不需要在函式中定義,只要在源**開頭定義的話,整個原始檔都可以使用該變數,假如要要定義常數π,那就#define pi 3.1415926就可以了
例如#include
#define pi 3.1415926
int main(...)
void function(...)
有不懂追問吧,望採納
15樓:百小烏
#define pi 3.1415926
c語言中#define巨集定義和變數定義的聯絡和區別
16樓:匿名使用者
巨集定義是全域性性的,變數定義是區域性性的,
17樓:匿名使用者
巨集定義主要在預處理階段完成,由前處理器進行字元替換,變數定義則會在記憶體中為變數分配地址。
18樓:吉檀迦利
#define巨集定義的量是做常量處理的,如#define price 30,下文只要遇到price就代表常量30,他與變數的區別之一是在書出語句中printf(「%d」,a)(a為變數),這是合法的;但如果出現printf(「%d」,price)這就是不合法的。另外巨集語句在整個程式中有效,而變數只在某個函式內有效。
19樓:匿名使用者
1.define巨集定義是在程式執行中不可以改變的,變數可以改變
2.變數在他所定義的函式內部可以用 出了這個函式 生命週期就結束了;而define實在定義的時候就開始就開始有效,知道程式執行完畢,生命週期結束。
define的優點就是修改方便
20樓:紛採
沒有聯絡,至於區別,也就談不上
巨集定義是在編譯階段進行巨集替換,說白了就是個記號,而這些記號對應著需要替換的**,就是個方便程式設計的工具,沒有也行。當然巨集定義涉及變數,常量,語句,功能強大,不必多說。
而變數嘛,就是在記憶體或者暫存器裡面,儲存資料的容器,再詳細一點,就是某個實際存在的資料的符號地址,也就說,變數名的實際上是一些地址,為了便於程式設計才會有「名字」的。當然也不是說,變數名是指標,指標也是一種變數。
所以,毫無關係。
21樓:上海明珠醫院哮喘科
巨集定義的量為常量,且在程式中是不會改變的!!!
變數的定義是可以改變的。
c語言中:全域性變數 和 # define ,有什麼相同或不同,我感覺兩個一樣誒
22樓:
在所有的函式之前bai
定義變du量,即全域性變數:int a ; 這個變zhi量a在之後的都可以用dao,不過我在這裡我要專提屬醒你,如果在某個函式中a的值變了,之後的a值都變,但是之前的不變,so,c語言不提倡多用全域性變數!
c語言中:全域性變數 和 # define ,有什麼相同或不同,我感覺兩個一樣誒
23樓:行高雅穰易
在所有的函式之前定義變數,即全域性變數:inta;
這個變數a在之後的都可以用,不過我在這裡我要提醒你,如果在某個函式中a的值變了,之後的a值都變,但是之前的不變,so,c語言不提倡多用全域性變數!
24樓:空卿俞彗
因為define是一種巨集定義,所以他屬於一種全域性型別,不需要在函式中定義,只要在源**開頭定義的話,整個原始檔都可以使用該變數,假如要要定義常數π,那就#define
pi3.1415926就可以了
例如#include
#define
pi3.1415926
intmain(...)
void
function(...)
有不懂追問吧,望採納
c語言函式呼叫問題,C語言函式呼叫問題
優化了你的程式,問題好多,你自己研究一下吧 include int ds int x 真心看不懂你的ds 函式思想!有那麼複雜嗎?return x0 int yz int sum1 int main 如果不為顯示中間結果,這些都可以省。x0 ds x sum x x0 n printf 第 d次計算...
C語言中什麼叫呼叫函式?為什麼函式和函式之間是呼叫關係
千鋒教育 呼叫函式就是計算機編譯或執行時,使用某個函式來完成相關命令。對無參函式呼叫時則無實際參數列。實際參數列中的引數可以是常數 變數或其它構造型別資料及表示式。各實參之間用逗號分隔。在程式中通過對函式的呼叫來執行函式體,其過程與其它語言的子程式呼叫相似。c語言中,函式呼叫的一般形式為 函式名 實...
C語言中能否在自定義函式中呼叫另自定義函式
風若遠去何人留 可以呼叫。c語言最基本的模組為函式,任意函式都可以呼叫其它任意一個函式,包括函式本身。1 自定義函式呼叫其它自定義函式的例子 include void fun1 int a 自定義函式fun1。void fun2 int m,int n 自定義函式fun2。int main 在這個例...