Повторение синтаксических ошибок во время компиляции - PullRequest
0 голосов
/ 15 марта 2011

В моем проекте мне нужно определить, какой набор инструкций SIMD поддерживает ЦП. Проблема в том, что когда я пытаюсь выполнить тестовую компиляцию, я получаю серию ошибок, которые повторяются несколько раз, как компилятор анализирует код несколько раз. Причина определения поддерживаемых инструкций SIMD заключается в том, что я пытаюсь адаптировать реализацию битового среза DES Джона Потрошителя для использования в GPGPU (в частности, в CUDA) для Windows и Linux.

Итак, вот где моя ошибка происходит в строке 37

// File Name: Arch.h
// Purpose: Determine CPU architecture (x86 or x86-64) and to determine instruction set supported by
//          the CPU (MMX, SSE2 or neither)
// 
// Authors: Daniel Beard and Michael Campbell

//If CPU is x86-64 then use x86-64 include
#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64)
#include "x86-64.h"
#endif

//Determine if CPU architecture is 32-bit, then determine which compiler is being used, finally determine if GCC (GNUC) or MS Visual C++ compiler is being used
#if defined(i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86)
    #if defined(__GNUC__) 
    #define cpuid(func,ax,bx,cx,dx)\
        __asm__ __volatile__ ("cpuid":\
        "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));
    int a,b,c,d;
    cpuid(0x1,a,b,c,d);
    if ((d & 0x17)== 1)
    {
        #include "x86-mmx.h"
    }
    else if (d & 0x1A) == 1)
    {
        #include "x86-sse.h"
    }
    else if((d & 0x17) != 1 || (d & 0x1A) != 1)
    {
        #include "x86-any.h"
    }
    #endif

    #if defined(_MSC_VER)
        #include<intrin.h>
        int CPUInfo[4] = {0};
        __cpuid( CPUInfo, 1 );
        if( (CPUInfo[3] & 0x1A) == 1 )
        {
            #include "x86-sse.h"
        }
        else if( (CPUInfo[3] & 0x17) == 1 )
        {
            #include "x86-mmx.h"
        }
        else if( (CPUInfo[3] & 0x17) != 1 || (CPUInfo[3] & 0x1A) != 1 )
        {
            #include "x86-any.h"
        }
    #endif
#endif

Вот ошибки, которые я получаю (их 86, но они полностью повторяют одну и ту же серию ошибок / номеров строк):

Error   1   error C2059: syntax error : ','                    line 37  
Error   2   error C2143: syntax error : missing ')' before 'constant'      line 37  
Error   3   error C2143: syntax error : missing '{' before 'constant'      line 37  
Error   4   error C2059: syntax error : '<Unknown>'                line 37  
Error   5   error C2059: syntax error : ')'                    line 37  
Error   6   error C2059: syntax error : 'if'                   line 38  
Error   7   error C2059: syntax error : 'else'                 line 42  
Error   8   error C2059: syntax error : 'else'                 line 46  
Error   9   error C2374: 'CPUInfo' : redefinition; multiple initialization     line 36

1 Ответ

1 голос
/ 15 марта 2011

Ваша первая ошибка в строке 36 - утверждение, что CPUInfo уже существует - исправьте это первым, а остальные могут исчезнуть.

В настройках Visual Studio перейдите в «Проекты и решения», «Общие» и снимите флажок «Всегда показывать список ошибок ...»

Это оставит вас с окном вывода - вы можете использовать F8 для перехода к первому предупреждению / ошибке, о котором вы обычно должны заботиться.

...