2013-03-20 31 views
1

我有一個使用_vscwprintf()/vswprintf()(經由_vsctprintf()/_vstprintf())至malloc()編緩衝器創建任意長度的格式化的字符串的項目。檢測哪個版本vswprintf的()存在在Visual C++

當我在Visual C++ 2008年開工的項目,_vstprintf()了三個參數:

int vswprintf(wchar_t * _String, const wchar_t * _Format, va_list _Ap) 

但留給我的項目有一段時間了,當我回來的時候把它用Visual C++ 2012年後,我發現, MS已經改變了功能,採取四項參數:

int vswprintf(wchar_t * _String, size_t _Count, const wchar_t * _Format, va_list _Ap) 

,我想我的代碼是在Visual C++ 2008 2010可建,和2012年(這是移植到Linux和Solaris太)。

是否有一些符號可以用#ifdef進行檢查,以便我可以使用3參數或4參數版本的函數正確構建?

我假設有一個符號告訴我正在編譯的是哪個版本的Visual C++,但這是正確的方法嗎?例如,是否有可能使用較舊的C庫或運行時構建較新的編譯器,反之亦然?

我的代碼實際上是使用C而不是C++,如果這有所作爲。

+0

你確定它的不同? VS2008的MSDN看起來像它有4個參數,而不是3. http://msdn.microsoft.com/en-GB/library/28d5ce15(v=vs.90).aspx – 2013-03-20 09:27:03

+0

是的,我不完全grok的文檔,它似乎寫得沒有多少關心和細節的關注。但我可以向你保證,在過去的幾年裏,它已經在VS2008下創建了3個參數。它似乎也在VS2010下工作,但它導致VS2012下的錯誤,我不得不改變代碼。 – hippietrail 2013-03-20 09:31:57

+2

看起來像是VS2008中的一個bug - http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/b385ed64-d549-4cf3-af31-85a2e8da4b6a/ – 2013-03-20 09:43:32

回答

相關問題