日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言 va_start / va_end / va_arg 自定义 printf 函数 - C语言零基础入门教程

發布時間:2024/9/27 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言 va_start / va_end / va_arg 自定义 printf 函数 - C语言零基础入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一.前言
  • 二.函數不定長參數簡介
    • 1.va_start
    • 2.va_arg
    • 3.va_end
  • 三.win32 控制臺版本
  • 四.MFC 對話框版本
  • 五.猜你喜歡

零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門

一.前言

對 printf 函數的使用,我們并不陌生,首先我們來看看下面關于 printf 函數的幾種調用方式:

/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數 //@Time:2021/07/10 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/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 函數到底參數是什么類型?
  • 2.printf 函數到底有幾個參數?

二.函數不定長參數簡介

關于 C 語言的不定長參數使用,必然離不開三個宏:**`` **[`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 指向函數參數列表中的第一個可選參數 * argN 是位于第一個可選參數之前的固定參數, 或者說最后一個固定參數 */ va_start(arg_ptr, argN)

2.va_arg

#include <stdarg.h>//必須包含頭文件 /* * 返回參數列表中指針arg_ptr所指的參數, 返回類型為type. * 并使指針arg_ptr指向參數列表中下一個參數. * 返回的是可選參數, 不包括固定參數. */ va_arg(arg_ptr, type)

3.va_end

#include <stdarg.h>//必須包含頭文件 /* * 清空參數列表, 并置參數指針arg_ptr無效. */ va_end(arg_ptr)

三.win32 控制臺版本

/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數 //@Time:2021/07/10 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/#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 請按任意鍵繼續. . . */

四.MFC 對話框版本

/******************************************************************************************/ //@Author:猿說編程 //@Blog(個人博客地址): www.codersrc.com //@File:C語言教程 - C語言 va_start / va_end / va_arg 自定義 printf 函數 //@Time:2021/07/10 08:00 //@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累! /******************************************************************************************/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 語言 數組下標越界和內存溢出區別
  • C 語言 使用指針遍歷數組
  • C 語言 指針和數組區別
  • C 語言 指針數組和數組指針區別
  • C 語言 野指針
  • C 語言 函數值傳遞和址傳遞
  • C 語言 函數不定長參數
  • C 語言 函數指針
  • C 語言 指針函數
  • C 語言 回調函數 callback
  • C 語言 #pragma once
  • C 語言 #include <> 與 #include “” 區別
  • C 語言 const 修飾函數參數
  • C 語言 const 和 define 區別
  • C 語言 #運算符
  • C 語言 ##運算符
  • C 語言 __VA_ARGS__
  • C 語言 ##__VA_ARGS__
  • C 語言 函數不定長參數 ##__VA_ARGS__經典案例
  • C 語言 va_start 宏
  • C 語言 va_end 宏
  • C 語言 va_arg 宏
  • C 語言 vprintf 函數
  • C 語言 va_start / va_end / va_arg 自定義 printf 函數
  • 未經允許不得轉載:猿說編程 ? C 語言 va_start / va_end / va_arg 自定義 printf 函數

    總結

    以上是生活随笔為你收集整理的C语言 va_start / va_end / va_arg 自定义 printf 函数 - C语言零基础入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。