C语言 函数式宏的使用
生活随笔
收集整理的這篇文章主要介紹了
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 和緊鄰其后的 “(” 之間插入空格,進行如下宏定義
則 diff 就會被編譯器當作對象式宏,即程序中的 diff 都會被代替為 (x , y) (x - y)。
所以在定義函數式宏時必須注意不要誤將空格寫入宏名稱和 “(” 之間。
總結:
- 函數定義需要為每個形參都定義各自的數據類型,返回值的類型也只能為一種。
- 函數式宏適用各種數據類型,不需要每個形參都定義各自的數據類型,返回值的類型也可以為多種。
- 函數
- 參數傳遞(將實參的值復制到形參)
- 函數調用和函數返回操作(程序流程的控制)
- 返回值的傳遞
- 函數式宏所做的工作只是宏展開和填入程序,不能做出函數的處理。
例如 :
函數式宏中多條語句使用
函數式宏中 逗號運算符 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” 的類型和值。
總結
以上是生活随笔為你收集整理的C语言 函数式宏的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言 求出平面直角坐标系中两点的距离
- 下一篇: Java 使用List集合实现图书增删改