本文目錄一覽:
- 1、C語言,宏定義和結構體指針問題,求高手解答啊,謝謝了!!
- 2、C語言,宏名有類型,其參數也有類型?對嘛?判斷
- 3、C語言中帶參數的宏定義問題
- 4、C語言可以對函數輸入一個結構體嗎
- 5、C語言中,結構體作為函數參數傳遞,詳解?
C語言,宏定義和結構體指針問題,求高手解答啊,謝謝了!!
宏定義完全就是字符串替換,所以:
(1)等價於 struct S *p1, p2;
這裡p1是個指針,而p2是個普通變量
(2)等價於 struct S *p3, *p4;
p3和p4都是指針。
C語言,宏名有類型,其參數也有類型?對嘛?判斷
C語言中,宏名沒有類型,其參數也沒有類型。
宏不存在類型問題,宏名無類型,它的參數也無類型,只是一個符號代表,展開時代入指定的字符串即可。宏定義時,字符串可以是任意類型的數據。
在編譯預處理時,對程序中所有出現的宏名,都用宏定義中的字符串去代換。
擴展資料
帶參宏注意事項:
1、宏名和形參表的括號間不能有空格。
2、宏替換隻作替換,不做計算,不做表達式求解。
3、函數調用在編譯後程序運行時進行,並且分配內存。宏替換在編譯前進行,不分配內存。
4、函數只有一個返回值,利用宏則可以設法得到多個值。
5、宏展開使源程序變長,函數調用不會。
6、宏展開不佔用運行時間,只佔編譯時間,函數調用占運行時間(分配內存、保留現場、值傳遞、返回值)。
7、為防止無限制遞歸展開,當宏調用自身時,不再繼續展開。 如:#define TEST(x) (x + TEST(x))被展開為1 + TEST(1)。
C語言中帶參數的宏定義問題
上面是 宏 定義。
第一行 DEFINE…SUITE 是宏函數名,小括號里是 三個 形式參數。 定義為 下面第二行開始 含 續行號的 所有的行。 程序中出現 DEFINE…SUITE 宏函數時,均用 它的 定義句 做字符替代。
定義句替代宏函數時,凡是有 三個形式參數 的地方,用 實際參數 做字符替代。
## 是 連接符,用於一個Token 與另 一個Token 的 連接,(Token 也可以是另外的宏,也可以不是)。
例子: 若形參_sym的實際參數 是 XYZ, 那麼 _test_str_##_sym[] 變成 _test_str_XYZ[]。 這個 _test_str_XYZ 是 static const char型 數組的名字。
後面還有個 .name = _test_str_XYZ, 也是token的連接。
C語言可以對函數輸入一個結構體嗎
可以的,不過傳入的是改結構體的一個副本
如果需要在函數中更改結構體內容,可以把這個結構體的指針作為參數傳入函數,返回的也是該結構體的指針
C語言中,結構體作為函數參數傳遞,詳解?
1.可以把結構體作為參數啊,
2.不去取地址的意思,是引用的意思,函數執行時修改L的值,就直接的修改了實參的值,相當於地址傳遞了。
3.真正調用的時,如下:
SqList
tempStruct;
InitList_Sq(tempStruct)
這樣就可以了。
呵呵
原創文章,作者:TATX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/135684.html