No puedo compilar un programa en C Ayuda!

Iniciado por AlexFifa, 11 Enero 2013, 00:06 AM

0 Miembros y 1 Visitante están viendo este tema.

AlexFifa

Pues yo casi siempre he programado en C++ y usaba C para cosas sencillas pero ahora me tope con un error inesperado que sinceramente no entiendo porque, ese mismo codigo lo he compilado como C++ y me funciona de maravilla

Yo uso el Visual Studio 2012 uso codigo nativo, ya aprendi a compilar en modo de consola.


#include <stdio.h>

int main(void) {
printf("\nHola Mundo!\n\n");
int a;

return 0;
}


Me he fijado que siempre que declaro una variable despues de una llamada a función me lanza ese error:
Código (dos) [Seleccionar]

Compilador de optimización de C/C++ de Microsoft (R) version 17.00.50727.1 para x64
(C) Microsoft Corporation. Reservados todos los derechos.

simple.c
simple.c(5) : error C2143: error de sintaxis : falta ';' delante de 'tipo'


Talvez me hace falta escribir algo pero ya repase incontables veces el codigo y a mi parecer esta bien hecho.

Les agradecería mucho si me ayudaran porque no entiendo que es lo que esta pasando


zonahurbana

#1
En C, a diferencia de C++, las variables deben inicializarse justo al comienzo de cada ámbito.
Es decir, cada vez que veas que se abren llaves, lo primero que verás, o que deberías ver (en C) es la declaración y definición de variables.

C aún mantiene ciertas diferencias con C++, otra de ellas es que sea necesario escribir void como argumento de la función main().
En C++ eso significa "sin argumentos", mientras que en C precisa "una cantidad indefinida de argumentos, de tipos desconocidos".
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

AlexFifa

Muchas Gracias!
Sinceramente no me acordaba de esa regla en C
Con razón cuando veía código cualquiera escrito en C al inicio siempre se declaran variables!
Nuevamente Gracias!!  ;D

durasno

Citarlas variables deben inicializarse justo al comienzo de cada ámbito
No, las variables se pueden declarar en cualquier lado. Incluso se puede hacer algo como:
scanf("%d",&tam);
int arr[tam]; /* fijate que se puede declarar un arreglo en tiempo de ejecucion despues de pedir el tamaño */


Para mi tu problema se debe a una configuracion del IDE que usas(como no lo uso no tengo idea)


Saludos
Ahorrate una pregunta, lee el man

zonahurbana

#4
¿Y eso que usted menciona sigue las normas del C estándar?
¿Cómo podría estar seguro de que algo sigue las normas de lo estándar?

Pregunto esto porque en otro foro yo comentaba que sí era posible leer una variable y luego usarla como tamaño de un arreglo, que el IDE no me mostraba problemas. Luego me decían que debía ser problema del IDE, que compilándolo directamente (a través de comandos) se mostraba un error diciendo que iba en contra de lo estándar.

Porfavor fíjese en la página 87 de este PDF:
Citarhttp://arco.esi.uclm.es/~david.villa/pensar_en_C++/pensar_en_cpp-vol1.pdf
Justamente en la parte que dice "Declaración de variables al vuelo".

Me dijeron que era una referencia muy buena.

Saludos.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

durasno

Lei el pdf y dice lo que mensionaste antes; yo tenia entendido que segun el C99 era posible hacer lo que dije abajo
http://en.wikipedia.org/wiki/C99

Saludos

PD: espero q alguien con mas experiencia aclare esto
Ahorrate una pregunta, lee el man

kaiserr

Cita de: durasno en 11 Enero 2013, 07:08 AM
No, las variables se pueden declarar en cualquier lado. Incluso se puede hacer algo como:
scanf("%d",&tam);
int arr[tam]; /* fijate que se puede declarar un arreglo en tiempo de ejecucion despues de pedir el tamaño */


En lenguaje C por lo que tengo entendido, no se puede hacer eso. Las arrays has de declararlas con un valor constante.

Para utilizar espacios dinamicos se ha de utilizar, si recuerdo bien, la funcion malloc()
y free() (esta ultima para liberar espacio), que estan dentro de la libreria <stdlib.h>


Volviendo al tema principal:
Cita de: AlexFifa en 11 Enero 2013, 00:06 AM
Pues yo casi siempre he programado en C++ y usaba C para cosas sencillas pero ahora me tope con un error inesperado que sinceramente no entiendo porque, ese mismo codigo lo he compilado como C++ y me funciona de maravilla

Yo uso el Visual Studio 2012 uso codigo nativo, ya aprendi a compilar en modo de consola.


#include <stdio.h>

int main(void) {
printf("\nHola Mundo!\n\n");
int a;

return 0;
}


Me he fijado que siempre que declaro una variable despues de una llamada a función me lanza ese error:
Código (dos) [Seleccionar]

Compilador de optimización de C/C++ de Microsoft (R) version 17.00.50727.1 para x64
(C) Microsoft Corporation. Reservados todos los derechos.

simple.c
simple.c(5) : error C2143: error de sintaxis : falta ';' delante de 'tipo'


Talvez me hace falta escribir algo pero ya repase incontables veces el codigo y a mi parecer esta bien hecho.

Les agradecería mucho si me ayudaran porque no entiendo que es lo que esta pasando



Lo he probado en visual studio 2010 y tampoco me deja. Asi que debe de ser que solo se puede declarar al principio, de todas formas asi es como me enseñaron.

durasno

CitarEn lenguaje C por lo que tengo entendido, no se puede hacer eso

Lee el link q deje y vas a ver que se puede. Incluso hay un ejemplo de variable-length arrays


Saludos
Ahorrate una pregunta, lee el man

kaiserr

#8
Nose, de wikipedia no me fio la verdad. Antes de comentar tambien busque informacion y segun lo que lei no se podia... y lo probe y no me compilaba.

Ademas lo que dice wikipedia:
CitarC (added in C99 and subsequently in C11 relegated to a conditional feature which implementations aren't required to support;[1] on some platforms, could be implemented previously with alloca() or similar functions)
mi ingles sera de lo peor que hay en el foro, pero entiendo que hay plataformas que no lo aceptan y que es mejor la funcion que puse antes.

Pero tampoco soy experto en C... asi que, tampoco puedo negarlo.

EDITO:
http://www.lcc.uma.es/~pscp/doc/cavanzado.pdf

durasno

Es verdad q wiki no es muy confiable, pero como en todos lados dice lo mismo me parecio indiferente subir ese link

Me olvide de comentar lo del C11, como aun no uso ninguna de las caracteristicas que se añadio no le di importancia(incluso mi compilador no lo tengo actualizado, asi q no soporta ese estandar)... Igual la idea era mostrar que se podia, al menos con mi editor de texto y el gcc puedo :)


Saludos

PD:
Citarhttp://www.lcc.uma.es/~pscp/doc/cavanzado.pdf
tenia que leer alguna pagina en particular?? porque no encontre nada respecto al tema(o sera el sueño que tengo :S)
Ahorrate una pregunta, lee el man