1. 程式人生 > 其它 >C語言 define 定義函式(多行書寫) - C語言零基礎入門教程

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   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;
}

三.猜你喜歡

  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 定義函式
  21. C 語言 define 定義函式(多行書寫)

未經允許不得轉載:猿說程式設計 » C 語言 define 定義函式(多行書寫)

本文由部落格 - 猿說程式設計 猿說程式設計 釋出!