C主要表达式 - 它是否是主表达式?

时间:2015-09-30 06:07:10

标签: c 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 ); 
    }
}

3 个答案:

答案 0 :(得分:5)

预处理器很简单,当它有一个宏时,它将替换为宏

例如,如果你有

#define window

然后预处理器将用 nothing 替换所有出现的符号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
    ...
}

答案 1 :(得分:0)

以这种方式修改程序:

decltype(&&)

答案 2 :(得分:0)

更改

#define window

SDL_Window * window;