c語言中函式能呼叫另函式中的define變數嗎

時間 2021-09-05 11:55:52

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 在這個例...