我正在使用这个基本的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 );
}
}
Run Code Online (Sandbox Code Playgroud)
预处理器很简单,当它有一个宏时,它会按原样替换该宏.
例如,如果你有
#define window
Run Code Online (Sandbox Code Playgroud)
那么预处理器将取代符号的所有匹配windows有什么!
所以对于声明
window = SDL_CreateWindow(...);
Run Code Online (Sandbox Code Playgroud)
预处理后它看起来像这样
= SDL_CreateWindow(...);
Run Code Online (Sandbox Code Playgroud)
这几乎不是有效的代码.
如果你打算window成为一个变量,指向一个指针SDL_Window,那么你应该这样定义它:
SDL_Window *window;
Run Code Online (Sandbox Code Playgroud)
并删除预处理器宏.
我同意这里的术语有点令人困惑.您可以使用预处理器来定义宏,然后您可以定义变量,结构,函数等.您还可以声明变量,结构,函数等.
预处理器听起来像.它曾经是一个单独的程序,它读取源文件,对其进行一些处理(如宏替换和包含文件包含),然后吐出编译器随后使用的临时文件.目前,预处理器可以内置到编译器中,并作为完整编译过程的一部分在早期阶段运行.大多数编译器允许您输出预处理的源代码供您查看,我建议您尝试使用您的代码执行此操作.为预处理器定义的宏不在馈送到编译器的源中,这些行由预处理器删除.
然后是变量等的定义.这与预处理器宏的定义完全不同.变量定义告诉编译器"这里是一个名称为this-and-that的变量,在某种类型中,请分配内存来存储变量".
变量声明类似于定义,但它只告诉编译器"有一个名为this-and-that的变量,某个特定类型,并且它存在于某个地方".
例如,变量既可以同时声明也可以定义
void function(void)
{
int a; // Declares and defines the variable
...
}
Run Code Online (Sandbox Code Playgroud)