目錄
- 一.##__VA_ARGS__原理
- 二.##__VA_ARGS__使用
- 三.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.##__VA_ARGS__原理
C 語言中 __VA_ARGS__ 是一個可變引數的宏,是新的 C99 規范中新增的,目前似乎只有 gcc 支持( VC 從 VC2005 開始支持),
[__VA_ARGS__](https://www.codersrc.com/archives/9450.html) 在前面的文章也介紹了,有兩個缺點:
1.僅僅只支持字串常量,不支持可變引數
#define LOGFUNC(...) (printf(__VA_ARGS__))
2.僅僅只支持可變引數,不支持字串常量
#define LOGSTRINGS(fm, ...) printf(fm,__VA_ARGS__)
對于__VA_ARGS__ 的缺點,使用 ##__VA_ARGS__ 直接完美解決!##__VA_ARGS__ 使用如下:
#define edebug(format, ...) fprintf (stderr, format, ##__VA_ARGS__)
- 如果可變引數被忽略或為空,
##操作將使前處理器(preprocessor)去除掉它前面的那個逗號. - 如果你在宏呼叫時,確實提供了一些可變引數,
GNU CPP也會作業正常,它會把這些可變引數放到逗號的后面,
二.##__VA_ARGS__使用
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 ##__VA_ARGS__
//@Time:2021/07/10 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/******************************************************************************************/
#include <stdio.h>
#define LOGFUNC2(fmt,...) (printf(fmt" line:%d - %s/%s \n",##__VA_ARGS__,__LINE__,__TIME__,__DATE__));
int main()
{
//可變引數
LOGFUNC2("i am C++ :%d name:%s age:%d",112,"C語言教程",18);// ok
//字串常量
LOGFUNC2("i am C++ ");// ok
}
/*
輸出結果:
i am C++ :112 name:C語言教程 age:18 line:7 - 08:40:32/Jul 11 2021
i am C++ line:8 - 08:40:32/Jul 11 2021
*/
重上面的代碼可以看出,使用 ##VA_ARGS` 完美兼容可變引數和字串常量輸出;
三.猜你喜歡
- 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 語言 #pragma once
- C 語言 #include <> 與 #include “” 區別
- C 語言 const 修飾變數
- C 語言 const 修飾指標
- C語言 const 修飾函式
- C 語言 const 修飾函式引數
- C 語言 const 和 define 區別
- C 語言 #運算子
- C 語言 ##運算子
- C 語言 __VA_ARGS__
- C 語言 ##__VA_ARGS__
未經允許不得轉載:猿說編程 ? C 語言 ##__VA_ARGS__
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/300372.html
標籤:其他
