C define和char指针声明之间的错误

时间:2017-01-23 16:50:26

标签: c linux pointers sdl declare

我正在尝试学习一种在Linux中创建可控窗口的简单方法,并且研究使我使用SDL。我在http://lazyfoo.net/tutorials/SDL的第二部分,我在屏幕上加载了一个图像。我复制了他们的代码并创建了自定义定义值。这是我的代码:

#include <SDL/SDL.h>
#define SDL_WINDOWPOS_UNDEFINED 0
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
#define SDL_WINDOW_SHOWN 1

SDL_Window* gWindow;
SDL_Surface* gScreenSurface;
SDL_Surface* gHelloWorld;

int init(){
int success = 1;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
    printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
    success = 0;
}
else
{
    gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    if( gWindow == NULL )
    {
    printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
    success = 0;
    }
    else
    {
    gScreenSurface = SDL_GetWindowSurface( gWindow );
    }
}
return success;
}

int loadMedia(){
int success = 1;
gHelloWorld = SDL_LoadBMP( "/circuit.png" );
if( gHelloWorld == NULL )
{
    printf( "Unable to load image! SDL Error: %s\n", SDL_GetError() );
    success = 0;
}
return success;
}

void close()
{
SDL_FreeSurface( gHelloWorld );
gHelloWorld = NULL;
SDL_DestroyWindow( gWindow );
gWindow = NULL;
  SDL_Quit();
}

int main(int argc, char* args[]){
  init();
  loadMedia();
  close();
  return 0;
}

编译时,即使打开了“-Wall”和“-Wextra”编译器标志并添加了“-lSDL”参数,我得到的第一个错误是:

program.c:7: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token    

然后我继续添加equals到定义,认为我做了一些愚蠢的事情,所以我的前几行现在是这样的:

#include <SDL/SDL.h>
#define SDL_WINDOWPOS_UNDEFINED=0
#define SCREEN_WIDTH=800
#define SCREEN_HEIGHT=600
#define SDL_WINDOW_SHOWN=1

当再次尝试编译时,我看到:

warning: missing whitespace after the macro name

那是关于我输入的每个等号。我也看到了与上面相同的错误。

没有抱怨没有找到SDL.h。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

请勿在{{1​​}}中使用=。您的程序无法识别#define,因为它尚未声明。我怀疑你正在尝试使用1.2标头编译SDL 2代码。