c - 如何在程序开始处声明

标签 c initialization global global-scope

在下面的 list 中,尝试在调用 main() 函数之前声明矩形“r”会导致错误。

error: 'r' does not name a type r.x = 150;<br>

为什么必须在 main() 之后声明“r”?

#include <SDL2/SDL.h>

int main (int argc, char** argv) {
    // Creat a rect at pos ( 50, 50 ) that's 50 pixels wide and 50 pixels high.
    SDL_Rect r;
    r.x = 150;
    r.y = 150;
    r.w = 200;
    r.h = 100;

    SDL_Window* window = NULL;
    window = SDL_CreateWindow   ("SDL2 rectangle", SDL_WINDOWPOS_UNDEFINED,
                                 SDL_WINDOWPOS_UNDEFINED,
                                 640,
                                 480,
                                 SDL_WINDOW_SHOWN
    );

    // Setup renderer
    SDL_Renderer* renderer = NULL;
    renderer =  SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED);
    SDL_SetRenderDrawColor( renderer, 0, 0, 0, 255 ); // black background
    SDL_RenderClear( renderer );    // Clear winow
    SDL_SetRenderDrawColor( renderer, 0, 255, 255, 255 ); // rgba drawing color

    // Render rect
    SDL_RenderFillRect( renderer, &r );

    // Render the rect to the screen
    SDL_RenderPresent(renderer);

    // Wait for 5 sec
    SDL_Delay( 5000 );

    SDL_DestroyWindow(window);
    SDL_Quit();

    return EXIT_SUCCESS;
}

最佳答案

r.x = 150;

这不是声明,也不是定义,而是赋值。

C 不允许在全局级别上进行分配。

您仍然可以在全局范围内定义变量

#include <SDL2/SDL.h>

SDL_Rect r;

int main (int argc, char** argv) {

全局定义的每个变量都会经历默认初始化:

  • 整数变量设置为0
  • 浮点变量设置为0。
  • 指针变量设置为NULL

您还可以显式初始化它

#include <SDL2/SDL.h>

SDL_Rect r = {1, 2, 3, 4};

int main (int argc, char** argv) {

尽管初始化看起来与赋值类似,但它并不相同(正如您已经观察到的那样)。

More on the difference between assignment and initialisation here.

关于c - 如何在程序开始处声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52699689/

相关文章:

python - 从在所述函数中定义的另一个函数中更改函数的局部变量.. Python

c - 如何在 Windows 中使用 Ctrl+D 结束一个 c 程序?

c - 如何在字符数组C中使用正则表达式

java - 长时间运行的构造函数会创建半初始化对象吗?

c++ - 在类中初始化可变大小的数组

javascript - 修改javascript中的变量?不工作

c - 在 C 中立即(逐个数据包)从套接字接收 TCP 有效负载

c - 无分支溢出处理

java - 变量可能尚未初始化

php - (php) 更好的方式来使用全局变量?或者如何避免它们?