男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
和printf一樣具有可變參數的C51函數
和printf一樣具有可變參數的C51函數
 更新時間:2008-7-26 20:30:43  點擊數:3
【字體: 字體顏色

, 關鍵是stdarg.h中的幾個宏:va_start、va_arg和va_end,下面是一個簡化版本的printf(),請參考:

#include "stdio.h"
#include "stdarg.h"

int printf (const char *format, ...)
  {
    static const char hex[] = "0123456789ABCDEF";
    char format_flag;
    unsigned int u_val, div_val, base;
    char *ptr;
    va_list ap;

    va_start (ap, format);
  
    for (;;)    /* Until full format string read */
      {
        while ((format_flag = *format++) != '%')      /* Until '%' or '\0' */
      {
            if (!format_flag)
          {
            va_end (ap);
            return (0);
          }
        putchar (format_flag);
      }
    switch (format_flag = *format++)
      {
        case 'c':
          format_flag = va_arg(ap, int);
        default:
          putchar (format_flag);
          continue;

        case 's':
          ptr = va_arg(ap,char *);
          while (format_flag = *ptr++)
        {
          putchar (format_flag);
        }
          continue;

        case 'o':
          base = 8;
          if (sizeof(int) == 2)
        div_val = 0x8000;
          else
        div_val = 0xC0000000;
          goto CONVERSION_LOOP;

        case 'd':
          base = 10;
          if (sizeof(int) == 2)
        div_val = 10000;
          else
        div_val = 1000000000;
          goto CONVERSION_LOOP;

        case 'x':
          base = 16;
          if (sizeof(int) == 2)
        div_val = 0x1000;
          else
        div_val = 0x10000000;

        CONVERSION_LOOP:
          u_val = va_arg(ap,int);
          if (format_flag == 'd')
        {
          if (((int)u_val) < 0)
            {
              u_val = - u_val;
              putchar ('-');
            }
          while (div_val > 1 && div_val > u_val)
            {
              div_val /= 10;
            }
        }
          do
        {
          putchar (hex[u_val / div_val]);
          u_val %= div_val;
          div_val /= base;
        }
          while (div_val);
      }
      }
  }

 

  • 上一篇: 在51上用P1口模擬I2C
  • 下一篇: 用軟件仿真串口
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 哈尔滨市| 前郭尔| 确山县| 当涂县| 江西省| 黔江区| 红桥区| 邮箱| 颍上县| 襄汾县| 新安县| 类乌齐县| 鹿邑县| 秦皇岛市| 贺兰县| 进贤县| 静宁县| 盘山县| 闸北区| 上杭县| 孝昌县| 丹棱县| 玉树县| 房山区| 乌鲁木齐市| 淄博市| 抚州市| 海安县| 略阳县| 西林县| 巴中市| 辽阳县| 湟源县| 社旗县| 双流县| 临城县| 凌源市| 牙克石市| 灯塔市| 清苑县| 赞皇县|