我正在使用这个基本的sdl程序来学习打印屏幕。

运行应用程序时出现以下错误:


  错误:“ =”令牌之前的预期主表达式”


#include "SDL.h"
#include <stdio.h>
#define window
using namespace std;
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
int main( int argc, char* args[] )
{
    SDL_Surface* screenSurface =NULL;
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "SDL could not initialize! SDL_Error: %s\n",SDL_GetError() );
    }
    else
    {
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    }
    if(window==NULL)
    {
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
    }
}

最佳答案

预处理器很简单,当它具有宏时,它将按原样替换该宏。

例如,如果您有

#define window


那么预处理器将用任何符号代替所有出现的符号windows

所以对于声明

window = SDL_CreateWindow(...);


预处理后看起来像这样

 = SDL_CreateWindow(...);


那几乎是无效的代码。

如果您打算将window用作变量,即指向SDL_Window的指针,则应这样定义它:

SDL_Window *window;


并删除预处理器宏。



我同意这里的术语有些混乱。您可以使用预处理器定义宏,然后可以定义变量,结构,函数等。还可以声明变量,结构,函数等。

预处理器听起来就是这样。它曾经是一个单独的程序,读取源文件,对其进行一些处理(例如宏替换和包括文件包含),然后吐出一个临时文件,供编译器使用。如今,预处理器可以内置到编译器中,并在整个编译过程的早期阶段运行。大多数编译器都允许您输出预处理后的源代码供您查看,我建议您尝试使用代码来完成。为预处理器定义的宏不在提供给编译器的源代码中,这些行被预处理器删除。

然后是变量等的定义。这与预处理器宏的定义完全不同。变量定义告诉编译器“这里有一个名称为this-and-that的变量,对于某种类型,请分配内存以存储该变量”。

变量声明与定义相似,但是只告诉编译器“存在一个名为this-and-that的变量,它具有某种特定类型,并且存在于某个地方”。

变量可以同时声明和定义,例如

void function(void)
{
    int a;  // Declares and defines the variable
    ...
}

08-27 19:58