Foros del Web » Programación para mayores de 30 ;) » C/C++ »

C: Dudas basicas - Apoyo Experto

Estas en el tema de C: Dudas basicas - Apoyo Experto en el foro de C/C++ en Foros del Web. Buenas foreros, soy nuevo en esta comunidad, espero estar mucho tiempo por aqui y devolverle a la comunidad lo que se que puede dar y ...
  #1 (permalink)  
Antiguo 27/06/2012, 23:48
 
Fecha de Ingreso: junio-2012
Ubicación: Montevideo
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Exclamación C: Dudas basicas - Apoyo Experto

Buenas foreros, soy nuevo en esta comunidad, espero estar mucho tiempo por aqui y devolverle a la comunidad lo que se que puede dar y lo que ya me estuvo dando como invitado.

Hoy vengo a plantearles algunas inquietudes que hace tiempo me estan consumiendo con respecto al lenguaje C. Si bien son dudas basicas que se deberían aprender al comienzo donde uno aprende el lenguaje, he notado, vivido y participado en discuciones en las cuales hoy en día sigo buscando la respuesta correcta.
Ellas son:

1- Funciones y Procedimientos
En cuanto a este punto tengo 2 versiones. La gente que piensa en a o en b
a- Los que opinan que en C existen funciones que devuelven un valor y funciones que no devuelven nada. Desconociendo o quiza ignorando la existencia de los procedimientos.
b- Los que diferencian las funciones de los procedimientos de acuerdo a si devuelve(retorna) un valor o si no retorna nada respectivamente.

En mi humilde opinion soy partidario del b, pero no me canso de encontrar en la web, gente que habla de funciones que no devulven valor. Aunque tambien veo posible que sean gente del tipo b hablando lo que yo llamaría "mal".

Perdonen que moleste con lo de hablar bien pero soy algo nuevo en la programacion y me preparo para un examen libre de bachillerato donde los profesores en el oral son muy exigentes con esto, y si tengo que discutirle algo, quiero estar seguro de lo que hablo. Digo todo esto porque no es la primera vez que veo desacuerdo entre profesores exactamente por estos mismo temas, y mas especificamente por que el voy a plantear abajo.

2- Con respecto al main: bloque principal, ¿funcion? que debe tener todo programa

¿Cual sería la forma correcta de declararlo?

He visto varias formas:
a)
int main ()

b)
int main (void)

c)
main ()

d)
void main ()

Entre profesores y la informacion que pude obtener en la web.
- Tengo que el punto a, b y c, requieren un return 0; al finalizar el bloque indicando que el programa termino correctamente. Aunque esto no es imprescindible en c++
- El punto c) tambien es correcto, si bien no es la mejor forma, los compiladores que sigan el estandar le darán el visto bueno.
Corregirme hasta aca si me equivoco.

Pero hace unos meses en profesor privado, decía que al menos los puntos a y b eran un disparate, que el main si no devuelve ningun valor nunca podia ser una función, por tanto nunca nunca podía llevar int. El main siempre va a ser un procedimiento porque no tiene porque devolver nada, siendo como el punto d.
Tampoco estaba de acuerdo con el return 0; ya que no tenía sentido que uno mismo decidiese si el programa finalizó correctamente o no, obviamente es lo que espera el programador.
Realmente tiene logica lo que el decía, aunque no descartó que algun programa requiera que la funcion main retorne un valor que no sea 0 precisamente.
De esto no opino porque siceramente no se.

Por ultimo aclaro que al buscar en internet me encontré mas de lo mismo, gente tirando por un lado y gente tirando para el otro. Por eso decidí probarlo por mi mismo y en el turbo c (IDE usado en el bachillerato) no tuve ningun problema con ninguno de los 4 puntos, pero al probarlo en dev-c++ noté que el void main () no funciona, al tiempo que reclama que el main debe retornar un int.

A todo esto me gustaría que se animen y opinen siempre y cuando justifiquen su respuesta sobre un tema que por lo que veo muchos pasan por alto y no se cuestionan, pero para mi esto es importante, como explique mas arriba, debo rendir un examen en poco menos de 1 mes.

Edit: Ultima aclaración. Es cierto que por ejemplo exclusivamente algun compilador pueda tener problemas con algun pedazo de codigo, y alguien me pueda decir que pruebe con otro, pero una parte del examen es en papel y los docentes piden que siempre uses buenas tecnicas de programacion y que el programa se haga de la mejor manera posible usando todos los recursos al alcance. No aceptan el "pero funciona", y ahi es cuando ponen como ejemplo cuando te calzas(los zapatos), que perfectamente podes usar el zapato izquierdo en el pie derecho y caminar bien, "pero no sería lo correcto" dicen

Saludos y gracias de antemano

Última edición por Emaf13; 28/06/2012 a las 00:10 Razón: Ultima aclaracion
  #2 (permalink)  
Antiguo 28/06/2012, 07:21
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: C: Dudas basicas - Apoyo Experto

Lo que yo aprendí es que, en C, no hay distinción entre funciones y procedimientos. Todo son funciones, unas devuelven un valor y otras no, pero todo son funciones.
Sobre lo de la función main, en rpincipio la "menos incorrecta" es la (b). El main clásico es

int main (int argc, char **argv)

en donde argc es el número de argumentos que se han pasado en la línea de comando y argv es un arreglo de punteros a caracter que apuntan a cada uno de esos argumentos. argc siempre valdrá, al menos, 1, y el primer argumento de la lista (apuntado por argv[0] siempre es el nombre del programa (el nombre con el que se ha invocado el ejecutable).

El valor que devuelve la función main es una indicación al sistema operativo de lo que ha ocurrido en el programa. Este valor debe tratarse desde el propio sistema operativo, por lo general se acepta que devolver un valor 0 corresponde a una terminación normal del programa, y cualquier valor distinto de 0 indica algún error o excepción. Estas comprobaciones suelen hacerse en archivos de proceso por lotes.

Posibles variantes:

Si no pones el tipo de retorno de main, es decir, utilizas main(), el compilador te va a considerar que devuelve un int. Cuando una función la declaras sin tipo a devolver, por defecto el compilador te va a considerar que devuelve un int.

Si main la declaras como tipo void, es que no tienes intención de utilizar ese posible valor de retorno.

Si pones void en la lista de parámetros, es que no vas a utilizar la lista de argumentos.

De todos modos, como norma general, siempre pon el tipo que devuelve la función (void si no vas a devolver nada), y utiliza void en la lista de parámetros si no vas a pasar parámetros.

Ante la duda, yo consideraría correctas:

int main (int argc, char **argv)
int main (void)
void main (void)

Sobre lo que dices de que en Dev-c++, void main() no funciona y reclama un int... Bien, el que no funcione puede ser debido a la falta de argumentos en main, pon void si no los va a haber y vuelve a probar, lo de que te reclame que debe retornar un int ya no lo sé, aunque puede ser consecuencia de lo anterior. Ten en cuenta que, al compilar, cuando se encuentra un error, el compilador intenta seguir adelante, por lo que detectará errores como consecuencia del primero y que desaparecerán una vez corregido este.

Bueno, espero qyue este rollo te aclare algo en lugar de liarte más.

Saludos,
  #3 (permalink)  
Antiguo 28/06/2012, 10:04
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: C: Dudas basicas - Apoyo Experto

Lo que dijo Fw190 esta perfecto.
Pero te doy un consejo. Ya que estas preparando un examen te diria que vayas a hablar con un profesor y preguntar esas cosas. En existe un libro de los buenos habitos de la programacion. Como tampoco en ningun lugar se define que son funciones y que son procedimientos en C.
Yo creo que eso queda a libertad de cada uno como interpretarlo.

Pero siendo que vas a rendir, en tu catedra tal vez hayan definido esas cosas.

Saludos
  #4 (permalink)  
Antiguo 04/07/2012, 17:01
 
Fecha de Ingreso: junio-2012
Ubicación: Montevideo
Mensajes: 2
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: C: Dudas basicas - Apoyo Experto

Gracias a ambos por la respuesta, me han aclarado bastante.
Sobre el uso del void en el main en dev-c++ sigo teniendo problemas, unicamente probé el void main (void) y no cambió nada, no me metí en el tema de pasarle argumentos ya que es la primera vez que veía argumentos en el main y no estaba del todo seguro exactamente que pasarle, aunque supongo que si no resuelvo esto mas adelante creare un nuevo hilo en el foro.
Pero mis principales dudas que eran respecto al examen se resolvieron.
Muchas Gracias, en serio.

Si alguien quiere agregar algo es bienvenido de hacerlo
  #5 (permalink)  
Antiguo 04/07/2012, 19:29
 
Fecha de Ingreso: enero-2011
Ubicación: Venezuela, Táchira
Mensajes: 96
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: C: Dudas basicas - Apoyo Experto

Hola mira esto sobre el void main int main

http://faq.cprogramming.com/cgi-bin/...&id=1043284376
  #6 (permalink)  
Antiguo 04/07/2012, 19:55
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: C: Dudas basicas - Apoyo Experto

el uso de void main() es incorrecto..motivos? varios

...primero..la teoría y los estandares de c/c++ dice que la función main debe retornar 0 o EXIT_SUCCESS...si usas void main() le estas diciendo al compilador que no retorna nada, por lo tanto el sistema operativo entiende que hay un error en la ejecución del programa y podes tener resolutados inesperados... a partir de c99, el estandard establece que toda función SI O SI debe retornar un valor...

El uso de void main(), que en la practica no las vas a ver JAMAS en tu vida, se uso bastante hace mucho años, creo que en el Borland en la version anterior a c89 donde todavia no estaba estandarizado que main debia retornar un valor...luego que la ANSI establecio los estandares a usar, se dejo de lado el void main

Etiquetas: funciones, int, main, procedimientos, void
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:46.