我正在使用这个基本的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
...
}