C語(yǔ)言 va_arg 宏 - C語(yǔ)言零基礎(chǔ)入門教程

目錄

零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語(yǔ)言基礎(chǔ)入門

一.前言

對(duì) printf 函數(shù)的使用稚茅,我們并不陌生柒傻,首先我們來(lái)看看下面關(guān)于 printf 函數(shù)的幾種調(diào)用方式:

printf("hello world");
printf("%s","hello world");
printf("%s %s","hello world","C語(yǔ)言教程-猿說編程");
printf("%d",3);
printf("%d %d",3,6);
printf("%d %d %d ",1,2,3);

那么 printf 函數(shù)的原理到底是什么饶囚?

由于在 C 語(yǔ)言中沒有函數(shù)重載悴侵,解決不定數(shù)目函數(shù)參數(shù)問題變得比較麻煩庭猩,即使采用 `C++,如果參數(shù)個(gè)數(shù)不能確定碳褒,也很難采用函數(shù)重載腌零。對(duì)這種情況,提出了指針參數(shù)來(lái)解決問題情组。

C 編譯器通常提供了一系列處理這種情況的宏燥筷,以屏蔽不同的硬件平臺(tái)造成的差異,增加程序的可移植性院崇。這些宏包括 va_start 肆氓、va_argva_end 等,一般三者需要配套使用底瓣。

#include <stdarg.h>

#define va_start __crt_va_start
#define va_arg   __crt_va_arg
#define va_end   __crt_va_end

二.va_arg 簡(jiǎn)介

va_arg函數(shù)聲明如下:

#include <stdarg.h>//必須包含頭文件

/*
*   返回參數(shù)列表中指針arg_ptr所指的參數(shù), 返回類型為type.
*   并使指針arg_ptr指向參數(shù)列表中下一個(gè)參數(shù).
*   返回的是可選參數(shù), 不包括固定參數(shù).
*/
va_arg(arg_ptr, type)

例如有如下函數(shù)聲明:

void va_test(char a, char b, char c, …)

va_test 是一個(gè)不定長(zhǎng)參數(shù)的函數(shù)谢揪,則它的固定參數(shù)依次是 a , b , cva_arg 返回值的是不固定參數(shù)捐凭,這樣就可以達(dá)到遍歷所有參數(shù)的目的;

三.va_arg 使用

va_start拨扶、va_argva_end一般需要配套使用茁肠,示例如下:

/******************************************************************************************/
//@Author:猿說編程
//@Blog(個(gè)人博客地址): www.codersrc.com
//@File:C語(yǔ)言教程 - C語(yǔ)言 va_arg 宏
//@Time:2021/07/10 08:00
//@Motto:不積跬步無(wú)以至千里患民,不積小流無(wú)以成江海,程序人生的精彩需要堅(jiān)持不懈地積累垦梆!
/******************************************************************************************/

#include "stdafx.h"
#include <stdio.h>
#include <stdarg.h>

//c參數(shù)類型匹颤,參數(shù)個(gè)數(shù)不確定。
//自定義方法
int Sum(int Num, ...)
{
    int S = 0, T;
    va_list ap;
    va_start(ap, Num);
    for (int i = 0; i<Num; ++i)
    {
        T = va_arg(ap, int); S += T;
    }
    return S;
}
void myPrintf(int Num, ...)
{
    va_list ap;
    va_start(ap, Num);
    for (int i = 0; i<Num; i++)
    {
        //va_arg 返回值是不固定參數(shù)托猩,所以第一個(gè)值是"dsdsdss"并非2
        char *T = va_arg(ap, char*);
        printf("myPrintf:%s\n", T);
    }
}
int main()
{
    int n;
    myPrintf(2, "dsdsdss", "sdaddd");
    printf("%d\n", Sum(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
    return 0;
}


輸出:
myPrintf:dsdsdss
myPrintf:sdaddd
55
*/

四.猜你喜歡

  1. C 語(yǔ)言 數(shù)組下標(biāo)越界和內(nèi)存溢出區(qū)別
  2. C 語(yǔ)言 使用指針遍歷數(shù)組
  3. C 語(yǔ)言 指針和數(shù)組區(qū)別
  4. C 語(yǔ)言 指針數(shù)組和數(shù)組指針區(qū)別
  5. C 語(yǔ)言 野指針
  6. C 語(yǔ)言 函數(shù)值傳遞和址傳遞
  7. C 語(yǔ)言 函數(shù)不定長(zhǎng)參數(shù)
  8. C 語(yǔ)言 函數(shù)指針
  9. C 語(yǔ)言 指針函數(shù)
  10. C 語(yǔ)言 回調(diào)函數(shù) callback
  11. C 語(yǔ)言 #pragma once
  12. C 語(yǔ)言 #include <> 與 #include “” 區(qū)別
  13. C 語(yǔ)言 const 修飾函數(shù)參數(shù)
  14. C 語(yǔ)言 const 和 define 區(qū)別
  15. C 語(yǔ)言 #運(yùn)算符
  16. C 語(yǔ)言 ##運(yùn)算符
  17. C 語(yǔ)言 __VA_ARGS__
  18. C 語(yǔ)言 ##__VA_ARGS__
  19. C 語(yǔ)言 函數(shù)不定長(zhǎng)參數(shù) ##__VA_ARGS__經(jīng)典案例
  20. C 語(yǔ)言 va_start 宏
  21. C 語(yǔ)言 va_end 宏
  22. C 語(yǔ)言 va_arg 宏

未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語(yǔ)言 va_arg 宏

本文由博客 - 猿說編程 猿說編程 發(fā)布印蓖!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市京腥,隨后出現(xiàn)的幾起案子赦肃,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摆尝,死亡現(xiàn)場(chǎng)離奇詭異温艇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堕汞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門勺爱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人讯检,你說我怎么就攤上這事琐鲁。” “怎么了人灼?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵围段,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我投放,道長(zhǎng)奈泪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任灸芳,我火速辦了婚禮涝桅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烙样。我一直安慰自己冯遂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布谒获。 她就那樣靜靜地躺著蛤肌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪批狱。 梳的紋絲不亂的頭發(fā)上裸准,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音精耐,去河邊找鬼狼速。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卦停,可吹牛的內(nèi)容都是我干的向胡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惊完,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼僵芹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起小槐,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拇派,失蹤者是張志新(化名)和其女友劉穎荷辕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體件豌,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疮方,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茧彤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡显。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曾掂,靈堂內(nèi)的尸體忽然破棺而出惫谤,到底是詐尸還是另有隱情,我是刑警寧澤珠洗,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布溜歪,位于F島的核電站,受9級(jí)特大地震影響许蓖,放射性物質(zhì)發(fā)生泄漏蝴猪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一蛔糯、第九天 我趴在偏房一處隱蔽的房頂上張望拯腮。 院中可真熱鬧,春花似錦蚁飒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至阁簸,卻和暖如春爬早,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背启妹。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工筛严, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饶米。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓桨啃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親檬输。 傳聞我的和親對(duì)象是個(gè)殘疾皇子照瘾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容