编译时重复语法错误

发布于 2024-10-22 03:28:44 字数 2625 浏览 6 评论 0原文

在我的项目中,我需要确定 CPU 支持哪些 SIMD 指令集。问题是,当我尝试进行测试编译时,我收到一系列重复多次的错误,就像编译器多次解析代码一样。确定支持的 SIMD 指令的原因是因为我正在尝试调整 John the Ripper 的 DES 位片实现,以便在 Windows 和 Windows 的 GPGPU(特别是 CUDA)上使用。 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

In my project I need to determine what SIMD instruction set the CPU supports. The problem is that when I try to do a test compile I get a series of errors that repeat several times like the compiler is parsing the code multiple times. The reason for determining supported SIMD instructions is because I'm trying to adapt John the Ripper's DES bitslice implementation for use on a GPGPU (in particular CUDA) for both Windows & Linux.

So, here's where my error occurs on line 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

Here are the errors I get (there's 86 of them but they repeat same series of errors/line numbers all the way down):

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清醇 2024-10-29 03:28:44

您的第一个错误位于第36行 - 声称CPUInfo已存在 - 首先修复该错误,其余的可能会消失。

在 Visual Studio 选项中,转到“项目和解决方案”、“常规”并取消选中“始终显示错误列表...”,

这将为您留下输出窗口 - 您可以使用 F8 导航到第一个警告/错误是您通常应该关心的人。

Your first error is at line 36 - claiming a CPUInfo already exists - Fix that first and the rest may go away.

In visual studio options, go to "Projects And Solutions", "General" and uncheck "Always show Error List ..."

That'll leave you with the output window - you can use F8 to navigate to the first warning/error which is the one you normally should care about.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文