Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Yc en 13 Marzo 2014, 14:17 pm



Título: Estructuras en C
Publicado por: Yc en 13 Marzo 2014, 14:17 pm
Muy wenas estoy haciendo estructuras en C:

queria saber maso menos la diferencia entre estos dos:


typedef struct coordinate
    {
        int x;
        int y;
    } Coordinate;


int main()
{
    Coordinate c[N];
}


typedef struct  {
                    int x;
                    int y;
                } Coordinate;

int main()
{
    Coordinate c[N];
}


typedef struct Coordinatei {
                        int x;
                        int y;
                    } c[N];

int main()
{
    struct coordinate c[N];
}




SI SE PUEDE VER LA NOTACION ES DIFERENETE PERO CREO QUE AL FINAL SON LA MISMA COSA O NO ENTIENDO QUE QUIERE DECIR CADA UNO, EN SI AL VER ESTO ME HE MAREADO Y YA NO ENTIENDO BIEN COMO ES LA NOTACION DEL "TYPEDEF STRUCT", les agradeceria mucho gracias


Título: Re: Estructuras en C
Publicado por: rir3760 en 13 Marzo 2014, 17:21 pm
Si se puede ver la notacion es diferenete pero creo que al final son la misma cosa o no entiendo que quiere decir cada uno, en si al ver esto me he mareado y ya no entiendo bien como es la notacion del "typedef struct"
Por favor no escribas el texto en mayúsculas, dificulta la lectura y en foros como este equivale a gritar.

----

Tienes tres casos distintos, en el primero:
Código
  1. typedef struct coordinate {
  2.   int x;
  3.   int y;
  4. } Coordinate;
  5.  
  6.  
  7. int main()
  8. {
  9.   Coordinate c[N];
  10. }
Declaras la estructura "struct coordinate" y su alias "Coordinate", puedes utilizar cualquiera de los dos para la declaración, esta se realiza en la función main: "c" es un array de N elementos de tipo "Coordinate".

En el segundo:
Código
  1. typedef struct {
  2.   int x;
  3.   int y;
  4. } Coordinate;
  5.  
  6. int main()
  7. {
  8.   Coordinate c[N];
  9. }
La estructura es anónima (sin nombre, para ser exactos, sin etiqueta). De nuevo la declaración se realiza en la función main y aquí solo puedes utilizar el alias.

El tercero:
Código
  1. typedef struct Coordinatei {
  2.   int x;
  3.   int y;
  4. } c[N];
  5.  
  6. int main()
  7. {
  8.    struct coordinate c[N];
  9. }
Es mas complicado y no es valido ya que:
1) Se declara la estructura "struct Coordinatei".
2) Se declara el alias "c" como equivalente a "struct Coordinatei [N]".
Ya que no hay declaración de "struct coordinate" tu compilador debe generar un mensaje de error.

Por ultimo y solo para redondear puedes utilizar "c" como el tipo para declarar un array, por ejemplo:
Código
  1. /* Forma usual */
  2. struct Coordinatei a[N];
  3.  
  4. /* Utilizando el alias */
  5. c b;
  6.  
En ambas declaraciones el tipo es el mismo: array de N elementos de tipo "struct Coordinatei", la primera utiliza la forma usual y la segunda el alias.

Un saludo


Título: Re: Estructuras en C
Publicado por: dato000 en 13 Marzo 2014, 17:32 pm
Estupenda explicación, como a todo novato, siempre me pareció complicado entender eso, pero luego de eso me pareció una ventaja suprema para la declaración de variables, siempre declaro estructuras con un alias, es mucho pero muchisisisisisisimo más cómodo así

slds ;D ;D


Título: Re: Estructuras en C
Publicado por: Yc en 17 Marzo 2014, 15:51 pm
y en si lo que puse antes era algo asi, solo que me equivoque al cambiar los nombres para que salgan 3 ejemplos..........:

typedef struct nombre {
                        char nombre[M];
                        char apellido[M];
                        char fijo[M];
                        char mobil[M];
                    } Nombre[N];

int main()
{
    struct nombre Nombre[N];
    .
    .
    .
    .


y asi compila. Por eso decia que raro que salga "struct nombre Nombre [N]


Título: Re: Estructuras en C
Publicado por: eferion en 17 Marzo 2014, 16:03 pm
NOTA: En el formulario para escribir los mensajes, tienes un compo que dice GeSHi... elige ahí C o C++ según corresponda y mete tu código dentro de las etiquetas que te va a crear... así consigues que el código aparezca coloreado y sea más legible.

si tu tienes esto:

Código
  1. typedef struct nombre
  2. {
  3.  char nombre[M];
  4. } Nombre[N];

es como decir lo siguiente:

tienes una estructura, cuyo "nombre" es "struct nombre". Esta estructura tiene un alias que es "Nombre". El contenido de esta estructura es un array de caracteres identificado como "nombre".

Como se puede ver no hay ninguna ambigüedad, aunque para que quede más claro te lo pongo en formato lista:

* identificador estructura: struct nombre
* alias de la estructura: Nombre ( el alias se corresponde a un array de N elementos )
* identificador del array de caracteres: nombre


Título: Re: Estructuras en C
Publicado por: Yc en 17 Marzo 2014, 19:15 pm
Gracias por tu ayuda =D con eso ya me aclare todo lo que es estructuras ahora voy bien en lo que es ficheros, muchar gracias.


Título: Re: Estructuras en C
Publicado por: eferion en 18 Marzo 2014, 08:32 am
De nada.

Suerte con tus prácticas.


Título: Re: Estructuras en C
Publicado por: Yc en 21 Marzo 2014, 09:08 am
Hola disculpa si es mucha molestia y creo que no va al tema por aca, pero veo que eres el unico que me ayuda asi que en si solo por eso "romperia las reglas" jeje por un caso hay una manera de,nose si has visto en algunos compiladores cuando no te sale lo que quieres haces 'Debug' 'Run to cursor' y asi asi vas viendo n un 'watch' como van las variables y todo eso,asi a veces veo mis errores y aprendo mucho d eso, quedria saber si hay en los compiladores una forma de ver linea de comando donde se pueda ver estos pasos, yo uso el codeblocks todo me va bien pero no tendria idea si hay esto o derepente algun otro compilador......Ejecutar la linea de comando si lo se por el DOS pero si no me sale lo que quiero nose donde esta mi error, ese es mi problema.Espero me entiendas gracias


Título: Re: Estructuras en C
Publicado por: eferion en 21 Marzo 2014, 10:14 am
A ver si te he entendido bien.

Estas hablando de depurar programas, no?

Si no es así no sigas leyendo jejeje.

Cuando compilas un programa puedes hacerlo en modo debug o en modo release. La diferencia entre ambos modos es que el modo release aplica una serie de optimizaciones en el código para hacerlo más rápido. El modo debug, en cambio, inserta "marcadores" en el código para poder depurarlo. En resumen, cuando compilas en modo debug, el programa es más lento y grande que si lo compilas en modo release.

Cuando tienes un programa compilado en modo debug puedes usar unos programas llamados depuradores. Un depurador es una aplicación que permite seguir la traza de la aplicación para rastrear problemas en el código. Un depurador, para poder funcionar, necesita el ejecutable y el código fuente para relacionar ambos y presentarte la información de forma amigable.

Los depuradores, por definición, no tienen interfaz gráfica, son aplicaciones de modo consola. El problema que presenta utilizar un depurador en modo consola es que navegar por el código (por ejemplo para poner breakpoints o evaluar variables) puede ser bastante tedioso y frustrante... aunque con práctica todo se consigue.

Los IDEs suelen utilizar uno de estos depuradores, lo que sucede es que te lo presentan con una interfaz gráfica que además se integra automáticamente con tu código fuente, lo que reduce muchísimo la curva de aprendizaje. Yo, a título personal, prefiero depurar a través de un IDE que depurar "a pelo". He probado las dos formas y elijo la primera.

Dicho esto, hay depuradores para todos los colores y gustos. A mi personalmente me gusta bastante el que trae el VisualStudio. Al menos comparado con el que viene con QtCreator no hay color. El de CodeBlocks aún no he tenido ocasión de utilizarlo... aún no se integra del todo bien con Qt.


Título: Re: Estructuras en C
Publicado por: nolasco281 en 21 Marzo 2014, 12:09 pm
Muy buena pregunta y respuesta

si mal no tengo entendido hay errores logicos sintacticos y semanticos, ya que se habla de IDE es posible ver de alguna manera los errores semanticos, en el IDE, o ver el proceso de como ocurre este tipo de error.

Gracias.


Título: Re: Estructuras en C
Publicado por: Yc en 22 Marzo 2014, 09:35 am
Creo que si ese erea la palabra exacta "depurar"  ;D a mi m sirve mucho, por eso preguntaba si hay una forma de depurar con linea de comando,porque si compilo usando linea de comandos me sale lo normal que falta parametros por el argc......entonces lo que queria preguntar era si hay una forma de depurar, derepente en otro compilador...por que depurando como dije me sirve para ver los errores y aprender de  ellos,entonces para linea de comando no puedo depurar al menos eso creo, gracias


Título: Re: Estructuras en C
Publicado por: eferion en 22 Marzo 2014, 13:34 pm
No entiendo el motivo por el que quieres depurar por línea de comandos...

La interfaz gráfica de los IDEs te proporciona esa misma información:

* variables disponibles
* valor de las variables
* modificar el valor de las variables
* cambiar la siguiente línea de ejecución
* insertar y eliminar breakpoints

Aún así, para depurar por línea de comandos tendrás que ir a la página oficial del depurador en cuestión y buscar un tutorial que te explique su funcionamiento... eso puede variar bastante de un depurador a otro.


Título: Re: Estructuras en C
Publicado por: Yc en 23 Marzo 2014, 15:07 pm
Osea al depurar se mete los datos haciendo todo desde el compilador,controlando todo con breakpoints y todo eso, en cambio en linea de comandos solo tengo que ir al DOS poner el nombre del programa y mis parametros y de frente sale el resultado (maso menos como hacer un build en el compilador de todo el programa), pero al usar linea de comandos no es que puedo usar breakpoints ver que sucede en el programa como avanzan los variables todo dentro del programa como se genera el resultado , o al menos yo no lo se hacer, por eso cuando hago un programa solicito todo por scanf osea los datos que necesita mi programa, es mas facil controlarlos ver que sucede en que falle, todo eso; entonces cuando uso linea de comando si hago un build en el compilador siempre me saldra como que faltan parametros porque el argc siempre tendra solo el nombre del programa. Quisiera saber si hay una forma de el programa como esta usando linea de comandos, poder depurar y al meter mis parametros por linea de comandos ver como va el programa, que sucede a estas variables, si hay un error ver donde es y todo eso que normalmente puedo hacerlo si no uso linea de comando y entran datos solo por scanf. =D espero me haya hecho entender gracias xD