簡體   English   中英

'fprintf'顏色格式包裝器

[英]'fprintf' Color Format Wrapper

是否可以做一個包裝器函數,讓我可以傳遞fprintf的最后兩個參數,例如_Format... ,它可以執行以下操作:

void Log::green(_Format, ...[args])
{
    // Set to green
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    // Print
    fprintf(stdout, _Format, args);
    // Set back to default color
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
}

是的,但是您必須使用vfprintf版本的printf並使用va_start / va_end初始化args如下所示:

void Log::green(const char * format, ...) 
{ 
  va_list args;
  va_start (args, format);

  // Set to green 
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                           FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  // Print
  vfprintf(stdout, format, args);
  // Set back to default color
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
                          FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN);
  va_end (args);    
}

首先,由於您使用的是C ++,因此應該使用cout而不是fprintf(stdout, ...)

其次,您可以使用如下函數:

inline std::ostream& green(std::ostream &s)
{
    HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hStdout, 
              FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    return s;
}

允許您編寫如下代碼:

cout << "Switching to green color... " << green << "Now, I'm green!"

您可以在這里找到完整的函數庫: 向std :: cout添加顏色

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM