目錄
零基礎(chǔ) C/C++ 學(xué)習(xí)路線推薦 : C/C++ 學(xué)習(xí)目錄 >> C 語言基礎(chǔ)入門
一.前言
對 printf
函數(shù)的使用,我們并不陌生主巍,首先我們來看看下面關(guān)于 printf
函數(shù)的幾種調(diào)用方式:
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數(shù)
//@Time:2021/07/10 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海挪凑,程序人生的精彩需要堅(jiān)持不懈地積累孕索!
/******************************************************************************************/
printf("hello world");
printf("%s","hello world");
printf("%s %s","hello world","C語言教程-猿說編程");
printf("%d",3);
printf("%d %d",3,6);
printf("%d %d %d ",1,2,3);
靈魂拷問:
- 1.printf 函數(shù)到底參數(shù)是什么類型?
- 2.printf 函數(shù)到底有幾個參數(shù)躏碳?
二.函數(shù)不定長參數(shù)簡介
關(guān)于 C
語言的不定長參數(shù)使用搞旭,必然離不開三個宏:**`` **[`va_start`](https://www.codersrc.com/archives/9517.html)、[`va_arg`](https://www.codersrc.com/archives/9530.html)菇绵、[`va_end`](https://www.codersrc.com/archives/9528.html)** ``**
#include <stdarg.h>
#define va_start __crt_va_start
#define va_arg __crt_va_arg
#define va_end __crt_va_end
1.va_start
#include <stdarg.h>//必須包含頭文件
/*
* arg_ptr 指向函數(shù)參數(shù)列表中的第一個可選參數(shù)
* argN 是位于第一個可選參數(shù)之前的固定參數(shù), 或者說最后一個固定參數(shù)
*/
va_start(arg_ptr, argN)
2.va_arg
#include <stdarg.h>//必須包含頭文件
/*
* 返回參數(shù)列表中指針arg_ptr所指的參數(shù), 返回類型為type.
* 并使指針arg_ptr指向參數(shù)列表中下一個參數(shù).
* 返回的是可選參數(shù), 不包括固定參數(shù).
*/
va_arg(arg_ptr, type)
3.va_end
#include <stdarg.h>//必須包含頭文件
/*
* 清空參數(shù)列表, 并置參數(shù)指針arg_ptr無效.
*/
va_end(arg_ptr)
三.win32 控制臺版本
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數(shù)
//@Time:2021/07/10 08:00
//@Motto:不積跬步無以至千里肄渗,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累咬最!
/******************************************************************************************/
#include <stdio.h>
#include <stdarg.h>
void WriteFrmtd(char *format, ...)
{
va_list args;
va_start(args, format);
vprintf(format, args);
va_end(args);
}
int main ()
{
WriteFrmtd("%d variable argument\n", 1);
WriteFrmtd("%d variable %s\n", 2, "arguments");
return(0);
}
/*
輸出:
1 variable argument
2 variable arguments
請按任意鍵繼續(xù). . .
*/
四.MFC 對話框版本
/******************************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數(shù)
//@Time:2021/07/10 08:00
//@Motto:不積跬步無以至千里翎嫡,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累永乌!
/******************************************************************************************/
BOOL printDebugMsgA(CHAR *format, ...)
{
CHAR buf[1024] = { 0 };
CHAR out[2048] = { 0 };
time_t timep;
struct tm p;
time(&timep);
localtime_s(&p, &timep);
va_list args;
va_start(args, format);
vsprintf_s(buf, format, args);
va_end(args);
sprintf_s(out, "[%d-%d-%d %d:%d:%d ]: %s \n", 1900 + p.tm_year, 1 + p.tm_mon, p.tm_mday, p.tm_hour, p.tm_min, p.tm_sec, buf);
OutputDebugStringA(out);
return TRUE;
}
BOOL printDebugMsgW(WCHAR *format, ...)
{
WCHAR buf[2048] = { 0 };
WCHAR out[2048] = { 0 };
time_t timep;
struct tm p;
time(&timep);
localtime_s(&p, &timep);
va_list args;
va_start(args, format);
vswprintf_s(buf, 2048, format, args);
va_end(args);
wsprintf(out, L"[%d-%d-%d %d:%d:%d ]: %s \n", 1900 + p.tm_year, 1 + p.tm_mon, p.tm_mday, p.tm_hour, p.tm_min, p.tm_sec, buf);
//wsprintf(out, L"%s", buf);
OutputDebugStringW(out);
return TRUE;
}
printDebugMsgA("猿說編程 %s %d %f", "xia處理", 1991, 1775.5);
printDebugMsgW(L"猿說編程 %s %d %f", L"xia處理", 1991, 1775.5);
/*
輸出:
[2020-5-29 11:37:45 ]: 猿說編程 xia處理 1991 1775.500000
[2020-5-29 11:37:45 ]: 猿說編程 xia處理 1991 1775.500000
*/
五.猜你喜歡
- C 語言 數(shù)組下標(biāo)越界和內(nèi)存溢出區(qū)別
- C 語言 使用指針遍歷數(shù)組
- C 語言 指針和數(shù)組區(qū)別
- C 語言 指針數(shù)組和數(shù)組指針區(qū)別
- C 語言 野指針
- C 語言 函數(shù)值傳遞和址傳遞
- C 語言 函數(shù)不定長參數(shù)
- C 語言 函數(shù)指針
- C 語言 指針函數(shù)
- C 語言 回調(diào)函數(shù) callback
- C 語言 #pragma once
- C 語言 #include <> 與 #include “” 區(qū)別
- C 語言 const 修飾函數(shù)參數(shù)
- C 語言 const 和 define 區(qū)別
- C 語言 #運(yùn)算符
- C 語言 ##運(yùn)算符
- C 語言 __VA_ARGS__
- C 語言 ##__VA_ARGS__
- C 語言 函數(shù)不定長參數(shù) ##__VA_ARGS__經(jīng)典案例
- C 語言 va_start 宏
- C 語言 va_end 宏
- C 語言 va_arg 宏
- C 語言 vprintf 函數(shù)
- C 語言 va_start / va_end / va_arg 自定義 printf 函數(shù)
未經(jīng)允許不得轉(zhuǎn)載:猿說編程 ? C 語言 va_start / va_end / va_arg 自定義 printf 函數(shù)
本文由博客 - 猿說編程 猿說編程 發(fā)布惑申!