va_list в C ++ 64 бит - PullRequest
       25

va_list в C ++ 64 бит

0 голосов
/ 27 марта 2012

Я работаю с VS2500, и теперь я хочу скомпилировать мое приложение под биты x64, но компилятор выдаст мне ошибку:

error C3861: '_INTSIZEOF': identifier was not found

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 3 ]

1 голос
/ 27 марта 2012

Вы должны включить <stdarg.h>, чтобы использовать va_list.

Это введет необходимое определение для _INTSIZEOF.


На самом деле, при ближайшем рассмотрении - при компиляции для x64 (или amd64) VS 2005, похоже, не использует _INTSIZE в своей реализации stdarg.h. Какая строка кода вызывает ошибку, и вы уверены, что ваш проект правильно настроен для сборки x64?

Я бы особенно обратил внимание на пути включаемых файлов (установка опции /showIncludes может указывать на проблемы с извлечением неверных заголовков). Ваша сборка должна забрать stdarg.h и vadefs.h из:

Microsoft Visual Studio 8\VC\include
0 голосов
/ 31 марта 2012

правый. Проблема заключалась в том, что я использую «va_start» в своей программе и, более конкретно, решение, данное в «http://www.codeproject.com/Articles/4181/Variable-Argument-Functions?msg=4204968#xx4204968xx" solution», которое отлично работает в 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, но я могу решить ее, удалив «&», например: "float add (float x, ...) {"

0 голосов
/ 27 марта 2012

Похоже, что ваш компилятор изначально не поддерживал этот MACRO, поэтому вы можете попытаться добавить их в начало кода: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

...