我用VS2500的工作,現在我想編譯在x64位我的應用程序,但編譯器告訴我一個錯誤:va_list的在C++ 64位
error C3861: '_INTSIZEOF': identifier was not found
我能做些什麼來解決呢?
我用VS2500的工作,現在我想編譯在x64位我的應用程序,但編譯器告訴我一個錯誤:va_list的在C++ 64位
error C3861: '_INTSIZEOF': identifier was not found
我能做些什麼來解決呢?
您必須包含<stdarg.h>
才能使用va_list
。
這將帶來_INTSIZEOF
的必要定義。
其實,仔細看看 - 2005年編制的64(或AMD64)當VS似乎並不在其stdarg.h
實現使用_INTSIZE
。哪行代碼會產生錯誤,並且您確定您已經爲x64構建正確配置了項目嗎?
我特別看看包含文件的路徑(設置/showIncludes
選項可能會指出錯誤的頭部被拉入的問題)。您的作品應該拿起從stdarg.h
和vadefs.h
:
Microsoft Visual Studio 8\VC\include
似乎烏爾編譯器不最初支持該宏,所以ü可以嘗試在我們的代碼前添加這些: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1))
非法; '_I'是爲編譯器保留的前綴。不是說這是必要的。 – MSalters 2012-03-27 08:17:10
權。問題是我在我的例程中使用「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,...) {「
當我使用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
Y你可能在'Errores.cpp'中錯誤地使用'_INTSIZEOF'或者你的項目被錯誤地配置爲x64。除此之外,在構建64位目標時,MSVC不支持內聯彙編,因此您也必須修復此問題。發佈337行的一些代碼,所以我們不必猜測。 – 2012-03-27 08:33:15