C2061语法错误(标识符)

时间:2010-09-02 07:11:09

标签: c compiler-errors syntax-error

1>cb.c(51): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(51): error C2059: syntax error : ';'
1>cb.c(51): error C2059: syntax error : 'type'
1>cb.c(52): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(52): error C2059: syntax error : ';'
1>cb.c(52): error C2059: syntax error : 'type'
1>cb.c(122): error C2061: syntax error : identifier 'SaveConfiguration'
1>cb.c(122): error C2059: syntax error : ';'
1>cb.c(122): error C2059: syntax error : 'type'
1>cb.c(127): error C2061: syntax error : identifier 'LoadConfiguration'
1>cb.c(127): error C2059: syntax error : ';'
1>cb.c(127): error C2059: syntax error : 'type'
1>
1>Build FAILED.

这只是项目中的一个.c文件。这是代码:

#define WIN32_LEAN_AND_MEAN

#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <tchar.h>

typedef struct _Configuration
{
    int             KeyActivate;
    int             BlockWidth;
    int             BlockHeight;
    double          HueStart;
    double          HueEnd;
    double          SaturationStart;
    double          SaturationEnd;
    double          ValueStart;
    double          ValueEnd;
} Configuration;

typedef struct _DIBSection
{
    HDC     ScreenDC;
    HDC     WindowDC;
    HDC     MemoryDC;
    HBITMAP ScreenBMPHandle;
    BITMAP  ScreenBMP;
} DIBSection;

typedef struct _Thread
{
    HANDLE      Handle;
    unsigned    Id;
} Thread;

typedef struct _Window
{
    HANDLE  Handle;
    HDC     DC;
    int     Width;
    int     Height;
    int     Top;
    int     Left;
} Window;

__declspec ( dllexport ) int Initialize ( void );
unsigned __stdcall Start ( void * Arguments );

void LoadDefaultConfiguration ( Configuration * Config );
bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );
bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath );

Thread          MainThread;
Window          Screen;
Configuration   Settings;

BOOL WINAPI DllMain ( HINSTANCE Instance, DWORD Reason, LPVOID Reserved )
{
    switch ( Reason )
    {

        case DLL_PROCESS_ATTACH:

            // TODO: Load settings from file
            LoadDefaultConfiguration ( & Settings );

            // Create main thread
            MainThread.Handle = (HANDLE) _beginthreadex (
                NULL,
                0,
                Start,
                NULL,
                0,
                & MainThread.Id
                );

            if ( MainThread.Handle )
            {
                SetThreadPriority ( MainThread.Handle, THREAD_PRIORITY_BELOW_NORMAL );
            }
            else
            {
                MessageBox ( NULL, L"Unable to create main thread; exiting", L"Error", MB_OK );
                ExitProcess ( 0 );
            }

            break;

        case DLL_PROCESS_DETACH:

            break;

    }

    return TRUE;
}

__declspec ( dllexport ) int Initialize ( void )
{
    return 1;
}

unsigned __stdcall Start ( void * Arguments )
{
    return 1;
}

void LoadDefaultConfiguration ( Configuration * Config )
{
    Config->BlockHeight = 50;
    Config->BlockWidth = 100;
    Config->HueEnd = 0.00;
    Config->HueStart = 0.00;
    Config->KeyActivate = VK_SHIFT;
    Config->SaturationEnd = 0.00;
    Config->SaturationStart = 0.00;
    Config->ValueEnd = 0.00;
    Config->ValueStart = 0.00;
}

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

bool LoadConfiguration ( Configuration * Config, LPTSTR FilePath )
{
    return true;
}

第51行

bool SaveConfiguration ( Configuration * Config, LPTSTR FilePath );

2 个答案:

答案 0 :(得分:8)

bool不是C类型。

我确实怀疑BOOL已在某处定义。

同样适用于truefalse

答案 1 :(得分:7)

实际上,假设您使用的是最近的编译器,bool是C99标准中的有效类型(实际上是一个宏)。你需要添加:

#include <stdbool.h>

请注意,bool在C标准的旧ANSI,C89,C90等变体中无效。


正如JeremyP在评论中强调的那样,微软的C编译器仍缺乏对C99功能的适当支持。

留下三种选择:

  1. 将其视为C ++,而不是C;因为C ++有bool作为内置类型
  2. 创建自己的bool实施
  3. 重写代码以避免使用bool
  4. 对于选项2,这样的东西可行,但这是一个丑陋的解决方法:

    typedef short bool;
    #define true 1
    #define false 0