C語言 define 定義函數 - C語言零基礎入門教程


目錄

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門

一.define 簡介

C 語言中,除了可以用 #define 定義一個標識符來表示一個常量,還可以用 #define 定義函數,例如:

//定義常量
#define MAX_VALUE 100       //定義整型變量MAX_VALUE值為100
#define USER_NAME "huge"    //定義字符串變量USER_NAME值為"huge"
#define PI 3.1415926        //定義浮點數變量PI值為3.1415926

//定義函數
#define MAX(a,b) (a>b)?a:b  //取兩個數最大值
#define MIN(a,b) (a<b)?a:b  //取兩個數最小值

凡是以 # 開頭的均為預處理指令,預處理又叫預編譯。預編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統自動完成的。

二.define 定義函數

1.define 定義不帶參數的函數

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>

#define RESULT  (x*2+5)

int main()
{
    int x = 10;
    printf("RESULT是:%d\n",RESULT);
   return 0;
}
/*
RESULT是:25
*/

2.define 定義帶參數的函數

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>

#define MAX(a,b) (a>b)?a:b  //取兩個數最大值
#define MIN(a,b) (a<b)?a:b  //取兩個數最小值

int main()
{
    printf("最大值是:%d\n",MAX(5,100));
    printf("最小值是:%d\n",MIN(5,100));
   return 0;
}
/*
最大值是:100
最小值是:5
*/

三.define 定義函數陷阱

1.define 函數陷阱一

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>

#define RESULT(x)  x*x

int main()
{
    printf("RESULT是:%d\n",RESULT(2));
    printf("RESULT是:%d\n",RESULT(2+1));
   return 0;
}
/*
RESULT是:4
RESULT是:5
*/

很蒙蔽??為什么第二個計算結果不是9,而是5??

#define RESULT(x)  x*x
RESULT(2) 等價 2*2 = 4
RESULT(2+1) 等價 2+1*2+1 = 5

2.define 函數陷阱一解決辦法

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string>

#define RESULT(x)  (x)*(x)  //在參數兩側加括號

int main()
{
    printf("RESULT是:%d\n",RESULT(2));
    printf("RESULT是:%d\n",RESULT(2+1)); //等價 (2+1)*(2+1) = 9
   return 0;
}
/*
RESULT是:4
RESULT是:9
*/

3.define 函數陷阱二

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>
#define RESULT(x)  (x)*(x)
int main()
{
    printf("RESULT是:%d\n",RESULT(2));
    printf("RESULT是:%d\n",9/RESULT(2+1));
   return 0;
}
/*
RESULT是:4
RESULT是:9
*/

很蒙蔽??為什么第二個計算結果不是1,而是9??

#define RESULT(x)  x*x
RESULT(2) 等價 2*2 = 4
9/RESULT(2+1) 等價 9/(2+1)*(2+1) = 5

4.define 函數陷阱二解決辦法

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define定義函數
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string>
#define RESULT(x)  ((x)*(x)) //在參數兩側加括號,整個表達式也需要加上括號

int main()
{
    printf("RESULT是:%d\n",RESULT(2));
    printf("RESULT是:%d\n",9/RESULT(2+1));
   return 0;
}
/*
RESULT是:4
RESULT是:1
*/

以上討論說明,對於宏定義,保險的做法是不僅應在參數兩側加括號,也應在整個字符串外加括號。

四.猜你喜歡

  1. C 語言 數組下標越界和內存溢出區別
  2. C 語言 指針聲明和定義
  3. C 語言 指針 p++ / p–
  4. C 語言 p++/§++/_(p++)/_p++
  5. C 語言 使用指針遍歷數組
  6. C 語言 指針和數組區別
  7. C 語言 指針數組和數組指針區別
  8. C 語言 空指針 NULL
  9. C 語言 void 指針
  10. C 語言 野指針
  11. C 語言 函數值傳遞和址傳遞
  12. C 語言 函數缺省參數
  13. C 語言 函數不定長參數
  14. C 語言 函數指針
  15. C 語言 指針函數
  16. C 語言 回調函數 callback
  17. C 語言 typedef
  18. C 語言 define 定義常量
  19. C 語言 define 防止頭文件重復包含
  20. C 語言 define 定義函數

未經允許不得轉載:猿說編程 » C 語言 define 定義函數

本文由博客 - 猿說編程 猿說編程 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM