Dúvida sobre vetor em C

[code]#include <stdio.h>

int main () {

int x,i;

printf("X: %d\n",x);

scanf("%d",&x);

int vet[x];

printf("X: %d\n",x);

for(i=0;i<x;i++)
	scanf("%d, ",&vet[i]);
	
for(i=0;i<x;i++)
	printf("%d, ",vet[i]);

printf("\n\n");
return 0;

}[/code]

Eu sei que não se pode declarar vetor através de uma variavel, apenas através de constantes.

Porém o código acima compila e executa sem problemas algum.

Gostaria de saber então porque funciona, se está feito de uma forma incorreta ?

Você está usando algo que só funciona em C99, não no C antes do C99 (que muitos compiladores ainda requerem). O código abaixo:

#include <stdio.h>

main (int argc, char *argv[]) {
    int x = 1000;
    int array[x];
}

é rejeitado pelo Microsoft C

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86

Copyright (C) Microsoft Corporation.  All rights reserved.

TesteVetor.c
TesteVetor.c(5) : error C2057: expected constant expression
TesteVetor.c(5) : error C2466: cannot allocate an array of constant size 0
TesteVetor.c(5) : error C2133: 'array' : unknown size

mas é aceito pelo gcc 4.3:

teste2.c:3: warning: return type defaults to 'int'
teste2.c: In function 'main':
teste2.c:5: warning: unused variable 'array'
teste2.c:6: warning: control reaches end of non-void function

P. S. A versão mais recente do Visual Studio (2010) ainda não suporta o C99. Portanto, se for rodar um programa como o que você acabou de escrever, não se esqueça que vai ter problemas com o Microsoft C, que é o padrão no caso do Windows. (Por exemplo, o Java é compilado pela Oracle usando-se o Microsoft C++ 2008. )

Quem foi que te disse isso? A declaração de um vetor é similar a declaração de uma variável:

int vector[10]; //integer vector
char vector[10] //char vector

Compila e executa porque ele está correto.


Desculpem, falei besteira. Desconsiderem meu post.[size=18] [/size][color=red] [/color]

Andre Rosa, eu me expressei mal: Quis dizer que nao se pode declarar vetor assim:

int n = 10;
int vet[n];

Com uma variável definindo seu tamanho.
Pois se tratar, de um programa compilado.

Pior ainda no exemplo abaixo que o vetor é definido somente quando o usuário digita um valor.

[code]#include <stdio.h>

int main () {

int x,i;

printf("X: %d\n",x);

scanf("%d",&x);

int vet[x];

printf("X: %d\n",x);

for(i=0;i<10;i++)
	scanf("%d, ",&vet[i]);
	
for(i=0;i<10;i++)
	printf("%d, ",vet[i]);

printf("\n\n");
return 0;

}[/code]

Continuo com dúvida, eu sei que compila e executa porque não tem erro de sintaxe.

Mas olhando o código acima, se você digitar x = 5, ele vai preencher o vetor com 10 elementos, e imprimir estes 10 elementos corretamente.
Sem problemas, isto que está está me deixando com duvida.
Será que ele esta declarando apenas a posição do vet[0], assim por diante ???