Creo que para cada cosa existe una herramienta apropiada...
Para la mayoría de las aplicaciones que se hacen actualmente, C es demasiado de bajo nivel; Pero OBVIAMENTE aun hay cosas para la herramienta apropiada es C (o ensamblador). Por ejemplo, Python está escrito en C; los sistemas operativos se escriben en C...
Como programador en C, me resulta desagradable que me llamen pedante por usar C los que programan en un lenguaje de script (adecuado para su trabajo, pero no para el mio) escrito en C y que corre sobre un SO escrito en C...
Por otra parte, la decision de usar un lenguaje u otro tambien depende de la soltura que se tenga con cada uno. Yo he escrito programitas en C para los que hubiese sido mas adecuado unas bash... Pero, simplemente lo hago más rapido en C, porque estoy mas familiarizado con él...
Sobre el tema del articulo padre, a mi me resulta muy sencillo, pero me parece adecuado e interesante para los que no tienen soltura en C (lo cual no en negativo: nadie sabe todos los lenguajes).
Un ejemplo de la forma en que C trata la memoria puede ser la siguiente:
Consideremos la estructura
struct _unastruc{int i;
char *(cad[8]);};
si declaramos una variable asi:
struct _unastruct una;
funciona asignar valor a la cadena como cabría esperar:
Sin ánimo de presumir, ese código que has puesto es demasiado raro. Parece que lo pones adrede como ejemplo de lo que no se debería hacer con los punteros en C:
1. Pusiste mal el nombre de la estructura, no es lo mismo _unastruc que unastruct. 2. La declaración char *(cad[8]); yo acostumbro a escribirla como char *cad[8]; 3. No debes usar una variable puntero sin inicializarla antes.
La escritura en una dirección de memoria desconocida no va a funcionar nunca "como cabría esperar".
Inicializando apropiadamente una variable puntero ya puede ser utilizada. 5. No explicas qué es lo que "no funciona", no sabemos si lo que pasa es que
no compila, o no mete el dato donde le pides, o en la ejecución falla en esa instrucción.
La expresión *(una.cad) accede al primer elemento del array cad, que es de tipo (char *). Pero ese elemento no lo has inicializado ni en el caso de la variable una, ni en el caso de la variable dos. Si lo hicieses apuntando a un array de caracteres con suficiente espacio.
Re:Qué peña más engreída hay por aquí
(Puntos:1)Para la mayoría de las aplicaciones que se hacen actualmente, C es demasiado de bajo nivel; Pero OBVIAMENTE aun hay cosas para la herramienta apropiada es C (o ensamblador). Por ejemplo, Python está escrito en C; los sistemas operativos se escriben en C...
Como programador en C, me resulta desagradable que me llamen pedante por usar C los que programan en un lenguaje de script (adecuado para su trabajo, pero no para el mio) escrito en C y que corre sobre un SO escrito en C...
Por otra parte, la decision de usar un lenguaje u otro tambien depende de la soltura que se tenga con cada uno. Yo he escrito programitas en C para los que hubiese sido mas adecuado unas bash... Pero, simplemente lo hago más rapido en C, porque estoy mas familiarizado con él...
Sobre el tema del articulo padre, a mi me resulta muy sencillo, pero me parece adecuado e interesante para los que no tienen soltura en C (lo cual no en negativo: nadie sabe todos los lenguajes).
Un ejemplo de la forma en que C trata la memoria puede ser la siguiente:
Consideremos la estructura
struct _unastruc{int i;
char *(cad[8]);};
si declaramos una variable asi:
struct _unastruct una;
funciona asignar valor a la cadena como cabría esperar:
strcpy(*(una.cad), "COSA");
Pero si la declaramos asi:
struct _unastruct dos[8];
esta llamada a strcpy no funcionara:
strcpy(*(dos[0].cad), "COSA");
Espero que esto entretenga a otros c-coders...
Saludos
Re:Qué peña más engreída hay por aquí
(Puntos:2)( http://guslibu.awardspace.com/ | Última bitácora: Viernes, 18 Marzo de 2011, 08:29h )
1. Pusiste mal el nombre de la estructura, no es lo mismo _unastruc que unastruct.
2. La declaración char *(cad[8]); yo acostumbro a escribirla como char *cad[8];
3. No debes usar una variable puntero sin inicializarla antes.
La escritura en una dirección de memoria desconocida no va a funcionar nunca "como cabría esperar".
Inicializando apropiadamente una variable puntero ya puede ser utilizada.
5. No explicas qué es lo que "no funciona", no sabemos si lo que pasa es que
no compila, o no mete el dato donde le pides, o en la ejecución falla en esa instrucción.
La expresión *(una.cad) accede al primer elemento del array cad, que es de tipo (char *).
Pero ese elemento no lo has inicializado ni en el caso de la variable una,
ni en el caso de la variable dos. Si lo hicieses apuntando a un array de caracteres con suficiente espacio.