目錄
零基礎 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 定義函數
本文由博客 - 猿說編程 猿說編程 發布!