【问题标题】:How to declare at beginning of program如何在程序开始时声明
【发布时间】:2018-10-08 09:53:21
【问题描述】:

在下面的清单中,尝试在调用 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;
}

【问题讨论】:

  • 你的意思是,作为一个全局变量而不是一个局部变量?
  • 您应该能够在main 之前将SDL_Rect r 作为全局变量,但不能在分配中使用。 r.x = 150; 和公司。必须在函数中。
  • 另外,这可以作为一个全局变量:SDL_Rect r = {150, 150, 200, 100};
  • 由于这与 SDL 完全无关,我删除了标签。

标签: c initialization global global-scope


【解决方案1】:
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.

【讨论】:

  • SDL_Rect r = {1, 2, 3, 4};确实有效。我不明白为什么“C 不允许全局级别的作业”,所以我会得到一本好书并阅读它。我习惯了 PHP,让我可以随心所欲地做任何我想做的事 :( 谢谢
  • @jwzumwalt:“我不明白为什么'C 不允许全局级别的赋值'”这就是你如何定义/设计语言。
猜你喜欢
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2020-08-02
  • 2021-05-26
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多