日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言 函数式宏的使用

發布時間:2025/5/22 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 函数式宏的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
未使用函數式宏:
#include <stdio.h>int diff_int(int x, int y){return x- y; }long diff_long(long x, long y){return x- y; }int main(void){int num1;int num2;puts("請輸入減數:");scanf("%d", &num1);puts("請輸入被減數:");scanf("%d", &num2);printf("%d - %d = %d\n", num1, num2, diff_int(num1, num2));puts("--------------------------------------------");long num3;long num4;puts("請輸入減數:");scanf("%ld", &num3);puts("請輸入被減數:");scanf("%ld", &num4);printf("%ld - %ld = %ld\n", num3, num4, diff_long(num3, num4));return 0; }
使用函數式宏:
#include <stdio.h>#define diff(x, y) (x - y) // 定義一個函數式宏 #define cut_off_rule() (puts("--------------------------------------------")) // 定義一個不帶參數的函數式宏int main(void){int num1;int num2;puts("請輸入減數:");scanf("%d", &num1);puts("請輸入被減數:");scanf("%d", &num2);printf("%d - %d = %d\n", num1, num2 , diff(num1, num2));cut_off_rule();long num3;long num4;puts("請輸入減數:");scanf("%ld", &num3);puts("請輸入被減數:");scanf("%ld", &num4);printf("%ld - %ld = %ld\n", num3, num4, diff(num3, num4));return 0; }

注:
如果在宏名稱 diff 和緊鄰其后的 “(” 之間插入空格,進行如下宏定義

#define diff (x, y) (x - y)

則 diff 就會被編譯器當作對象式宏,即程序中的 diff 都會被代替為 (x , y) (x - y)。
所以在定義函數式宏時必須注意不要誤將空格寫入宏名稱和 “(” 之間。

總結:

  • 函數定義需要為每個形參都定義各自的數據類型,返回值的類型也只能為一種。
  • 函數式宏適用各種數據類型,不需要每個形參都定義各自的數據類型,返回值的類型也可以為多種。
  • 函數
    • 參數傳遞(將實參的值復制到形參)
    • 函數調用和函數返回操作(程序流程的控制)
    • 返回值的傳遞
  • 函數式宏所做的工作只是宏展開和填入程序,不能做出函數的處理。
    例如 :
#define diff(x, y) (x - y)↓展開后:diff(num1, num2) = (num1 - num2);

函數式宏中多條語句使用

函數式宏中 逗號運算符 a, b ,c 按順序判斷a , b,c .整個表達式最終生成 c 的判斷結果

#include <stdio.h>#define diff(x, y) (x - y) // 定義一個函數式宏 #define cut_off_rule(str) (puts("----------------"), puts(str), puts("-----------------")) // 定義一個不帶參數的函數式宏int main(void){int num1;int num2;puts("請輸入減數:");scanf("%d", &num1);puts("請輸入被減數:");scanf("%d", &num2);printf("%d - %d = %d\n", num1, num2 , diff(num1, num2));if(diff(num1, num2) > 0){cut_off_rule("最后結果大于0。");}else if(diff(num1, num2) < 0){cut_off_rule("最后結果小于0。");}else{cut_off_rule("最后結果等于0。");}return 0; }

注:

  • 如果宏定義中要代換兩個以上的表達式,則使用逗號運算符連接,使其在語法上構成一個表達式。
  • 一般由逗號運算符連接的多個表達式,“a, b, c,…” 在語法上可以視為一個表達式(只要是由運算符連接的多個表示,例如“a + b + c…”,都可以視為一個表達式)。
  • 對于使用逗號運算符的逗號表達式“a, b”.會按順序判斷表達式a 和 b。對左側的表示 a 僅進行判斷,判斷結果會被省去。而對右側的表達式 b 進行判斷所得到的類型和值,就是逗號表達式 “a, b” 的類型和值。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的C语言 函数式宏的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。