Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

This C code is supposed to fail but it works. Why is that?

Tags:

c

gcc

Folks I think I will throw all my modest C lore away. Look at this code:

int main(int argc, char** argv, char** envp)
{
  int aa;

  srand(time(NULL));

  int Num = rand()%20;

  int Vetor[Num];

  for (aa = 0; aa < Num; aa++)
  {
    Vetor[aa] = rand()%40;
    printf("Vetor [%d] = %d\n", aa, Vetor[aa]);
  }
}  

I would think that this should throw an error for two reasons - first that I am declaring both Num and Vetor after executing a command (srand), second because I am declaring Vetor based on Num, this should not be possible right? because those array sizes should not be decided at runtime but at compile time right?

I am really surprised that his works and if you guys could explain why I can actually use stuff like this would be great.

This is using GCC.

like image 929
Andre Garzia Avatar asked Dec 04 '22 11:12

Andre Garzia


1 Answers

These are C99 features, and it seems your compiler supports them. That's all ;)

From Wikipedia:

C99 introduced several new features, many of which had already been implemented as extensions in several compilers:

  • inline functions
  • intermingled declarations and code, variable declaration no longer restricted to file scope or the start of a compound statement (block)
  • several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
  • variable-length arrays
  • support for one-line comments beginning with //, as in BCPL or C++
  • new library functions, such as snprintf
  • etc (more)
like image 86
KeatsPeeks Avatar answered Dec 27 '22 04:12

KeatsPeeks