2016-12-01 54 views
0

將C項目轉換爲C++,此代碼在正常的C++項目中工作,但是當我開始遠程調試以加速測試時,我不再能夠使用va_start宏無法解析符號'__builtin_va_start'Visual Studio linux遠程調試

#include "Utilities.h" 
#include <cstdarg> 
#include <stdarg.h> 
void Utilities::PrintLine(const char* text, ...) 
    { 
     char buffer[100]; 
     va_list args;   // resolved just fine 
     va_start(text, args); // cannot resolve 
     vsprintf(buffer, text, args); 
     va_end(args);   // cannot resolve 
     std::cout << buffer << "\n"; 
    } 

回答

1

我不承認您使用va_start。以下將工作:

#include <iostream> 
#include <cstdarg> 

void PrintLine(const char* fmt, ...) 
{ 
    char buffer[100]; 
    va_list args; 
    va_start(args, fmt); 
    vsprintf(buffer, fmt, args); 
    va_end(args); 
    std::cout << buffer << std::endl; 
} 

PrintLine ("var arg %d %d %d %d", 1, 2, 3, 4); 
+0

由於相同的錯誤,這不起作用。出於某種原因,編譯器沒有定義va_start,因爲它應該是很奇怪的。 – user2835725

+0

適用於Visual Studio 2015 Pro Update 3,適用於Windows 10本地,以及Mageia 5 Linux上的VC_Linux擴展(1.0.5)和GCC 4.9.2。 Windows生成建議我使用'vsprintf_s',否則完全相同的代碼和結果。默認項目類型和標準庫。建議您共享編譯器輸出,以便我們可以看到錯誤消息。 – stanthomas

+0

只是一個想法;在Linux上,GCC將'va_start'映射到頭文件'stdarg.h'中的'__builtin_va_start'。但有些情況下,這可能不會發生。這些適用於你的情況嗎?你使用了哪些編譯器和調試工具,以及在哪些系統上運行它們? – stanthomas

相關問題