2012-03-27 75 views
0

我用VS2500的工作,現在我想編譯在x64位我的應用程序,但編譯器告訴我一個錯誤:va_list的在C++ 64位

error C3861: '_INTSIZEOF': identifier was not found 

我能做些什麼來解決呢?

回答

1

您必須包含<stdarg.h>才能使用va_list

這將帶來_INTSIZEOF的必要定義。


其實,仔細看看 - 2005年編制的64(或AMD64)當VS似乎並不在其stdarg.h實現使用_INTSIZE。哪行代碼會產生錯誤,並且您確定您已經爲x64構建正確配置了項目嗎?

我特別看看包含文件的路徑(設置/showIncludes選項可能會指出錯誤的頭部被拉入的問題)。您的作品應該拿起從stdarg.hvadefs.h

Microsoft Visual Studio 8\VC\include 
+0

當我使用Win32進行編譯時,它工作正常,但是當我使用x64時,編譯器顯示:>。\ Errores.cpp(337):錯誤C3861:'_INTSIZEOF':未找到標識符 1> Errores.cpp(337):錯誤C4235:使用非標準擴展名:此架構不支持關鍵字'__asm' 1>。\ Errores.cpp(337):錯誤C2065:'lea':標識符未聲明 – Josemi 2012-03-27 08:26:44

+0

Y你可能在'Errores.cpp'中錯誤地使用'_INTSIZEOF'或者你的項目被錯誤地配置爲x64。除此之外,在構建64位目標時,MSVC不支持內聯彙編,因此您也必須修復此問題。發佈337行的一些代碼,所以我們不必猜測。 – 2012-03-27 08:33:15

0

似乎烏爾編譯器不最初支持該宏,所以ü可以嘗試在我們的代碼前添加這些: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1))

+0

非法; '_I'是爲編譯器保留的前綴。不是說這是必要的。 – MSalters 2012-03-27 08:17:10

0

權。問題是我在我的例程中使用「va_start」,更具體地說,「http://www.codeproject.com/Articles/4181/Variable-Argument-Functions?msg=4204968#xx4204968xx」解決方案給出的解決方案非常完美在Win32中,但不在x64上不允許使用__ asm。 例如:

# define va_start (ap, v) {int var = _INTSIZEOF (v); __ asm read eax, v add eax __ asm, __ asm mov var ap, eax} 

float add (float &x, ...) { 

va_list list; 
va_start (list, x); 

float result = 0; 

for (;;) 
{ 
float p = (float) va_arg (list, double); 
if (p == 0) 
break; 
result + = p; 

} 
va_end (list); 
return result; 

} 

int main() { 

float hh = 2.1; 
cout << "Result is" << add (/ * 2.1 */hh, 4.3,6.8); 
return 0; 

} 

現在我有問題__ ASM不上的x64工作,但我可以解決這個問題,如果我刪除「&」,如: 「浮動添加(浮法X,...) {「