目錄
零基礎 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 MACRO(arg1, arg2) do { \
\
stmt1; \
stmt2; \
\
} while(0)
關鍵是要在每一個換行的時候加上一個 "\ "
凡是以 #
開頭的均為預處理指令,預處理又叫預編譯。預編譯不是編譯,而是編譯前的處理。這個操作是在正式編譯之前由系統自動完成的。
使用
define
定義一個多行的復雜函數,關鍵是要在每一個換行的時候加上一個\
;
二.define 定義多行函數
1.簡單使用
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define 定義函數(多行書寫)
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include "stdafx.h"
#include <stdio.h>
//單行書寫
//#define swap(x,y) do{x=x+y;y=x-y;x=x-y;}while(0)
//多行書寫
#define swap1(x,y) \
do{\
x=x+y;\
y=x-y;\
x=x-y;\
}while(0)
int main()
{
int a = 2, b = 3;
printf("交換前a=%d\t,b=%d\n", a, b);
swap1(a, b);
printf("交換后a=%d\t,b=%d\n\n", a, b);
return(0);
}
/*
交換前a=2 ,b=3
交換后a=3 ,b=2
*/
2.經典案例
/*
需求:
1.debug模式下:
a.如果定義了宏DEBUG_TO_FILE,那么將日志輸出到文件
b.如果定義了宏DEBUG_TO_FILE,那么將日志輸出到控制台
2.release模式下不打印任何日志
*/
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 define 定義函數(多行書寫)
//@Time:2021/06/27 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
#include <string.h>
//開啟下面的宏表示程序運行在調試版本, 否則為發行版本, 這里假設只有調試版本才輸出調試信息
#define _DEBUG
#ifdef _DEBUG
//開啟下面的宏就把調試信息輸出到文件,注釋即輸出到終端
#define DEBUG_TO_FILE
#ifdef DEBUG_TO_FILE
//調試信息輸出到以下文件
#define DEBUG_FILE "/tmp/debugmsg"
//調試信息的緩沖長度
#define DEBUG_BUFFER_MAX 4096
//將調試信息輸出到文件中
#define printDebugMsg(moduleName, format, ...) {\
char buffer[DEBUG_BUFFER_MAX+1]={0};\
snprintf( buffer, DEBUG_BUFFER_MAX \
, "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );\
FILE* fd = fopen(DEBUG_FILE, "a");\
if ( fd != NULL ) {\
fwrite( buffer, strlen(buffer), 1, fd );\
fflush( fd );\
fclose( fd );\
}\
}
#else
//將調試信息輸出到終端
#define printDebugMsg(moduleName, format, ...) \
printf( "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );
#endif //end for #ifdef DEBUG_TO_FILE
#else
//發行版本,什么也不做
#define printDebugMsg(moduleName, format, ...)
#endif //end for #ifdef _DEBUG
int main(int argc, char** argv)
{
printDebugMsg( "www.codersrc.com", "name = %s", "C語言教程" );
return 0;
}
三.猜你喜歡
- 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 定義函數(多行書寫)
未經允許不得轉載:猿說編程 » C 語言 define 定義函數(多行書寫)
本文由博客 - 猿說編程 猿說編程 發布!