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

-3 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 ); 
    }
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

预处理器很简单,当它有一个宏时,它会按原样替换该宏.

例如,如果你有

#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)