如何在程序开始时声明

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

error: 'r' does not name a type rx = 150;

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

 #include  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; rx = 150; ry = 150; rw = 200; rh = 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; } 

 rx = 150; 

这不是声明,也不是定义,而是作业。

C不允许在全球范围内进行分配。

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

 #include  SDL_Rect r; int main (int argc, char** argv) { 

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

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

您还可以更明确地初始化它

 #include  SDL_Rect r = {1, 2, 3, 4}; int main (int argc, char** argv) { 

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

更多关于赋值和初始化之间的区别。