目錄
- 一.define 簡介
- 二.define 定義函式
- 1.define 定義不帶引數的函式
- 2.define 定義帶引數的函式
- 三.define 定義函式陷阱
- 1.define 函式陷阱一
- 2.define 函式陷阱一解決辦法
- 3.define 函式陷阱二
- 4.define 函式陷阱二解決辦法
- 四.猜你喜歡
零基礎 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
*/
以上討論說明,對于宏定義,保險的做法是不僅應在引數兩側加括號,也應在整個字串外加括號,
四.猜你喜歡
- C 語言 陣列下標越界和記憶體溢位區別
- C 語言 指標宣告和定義
- C 語言 指標 p++ / p–
- C 語言 p++/§++/_(p++)/_p++
- C 語言 使用指標遍歷陣列
- C 語言 指標和陣列區別
- C 語言 指標陣列和陣列指標區別
- C 語言 空指標 NULL
- C 語言 void 指標
- C 語言 野指標
- C 語言 函式值傳遞和址傳遞
- C 語言 函式預設引數
- C 語言 函式不定長引數
- C 語言 函式指標
- C 語言 指標函式
- C 語言 回呼函式 callback
- C 語言 typedef
- C 語言 define 定義常量
- C 語言 define 防止頭檔案重復包含
- C 語言 define 定義函式
未經允許不得轉載:猿說編程 ? C 語言 define 定義函式
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/297697.html
標籤:C
