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

En C, clausula #define mas rara de lo normal?

Estas en el tema de En C, clausula #define mas rara de lo normal? en el foro de C/C++ en Foros del Web. Hola gente! Pues tengo una definición en un fichero H como esta: #define WrUTXH0(ch) (*(volatile unsigned char *)(0x1d00023))=(unsigned char)(ch) Es rarísimo. Nunca he visto utilizar ...
  #1 (permalink)  
Antiguo 28/05/2009, 03:39
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
En C, clausula #define mas rara de lo normal?

Hola gente!

Pues tengo una definición en un fichero H como esta:

#define WrUTXH0(ch) (*(volatile unsigned char *)(0x1d00023))=(unsigned char)(ch)


Es rarísimo. Nunca he visto utilizar (algo) después del define, ¿es eso una macro?. En ese caso, qué demonios define esto?. Y por qué utiliza un = ??.


Si yo le paso por ejemplo
WrUTXH0('\r');

Qué se supone que hace?. Trata el retorno de carro como tal?



Gracias amigos
__________________
Darkgaze
  #2 (permalink)  
Antiguo 28/05/2009, 12:03
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: En C, clausula #define mas rara de lo normal?

Si, es una macro, lo que hace es poner en la direccion de memoria 0x1d00023 el valor que se le pase como parametro.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 28/05/2009, 13:03
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: En C, clausula #define mas rara de lo normal?

Ya veo... eso suponía.

Pero es un casting, además , no?.
porque también tengo una definición parecida, que hace algo parecido, pero sin argumento.

es que es parte de un ejercicio que tengo que hacer.
Me dicen que qué diferencia hay entre tratar de forma especial '/n' con esta macro y una forma normal, que es sin macro.

#define UTXH0 *(volatile unsigned char *)(0x1d00023)

Eso significa que de una manera, escribo directamente haciendo casting.
De la otra, sería asignando el dato a UTXH0, que también es una posición de memoria...


Es un poco rara la pregunta.
__________________
Darkgaze
  #4 (permalink)  
Antiguo 28/05/2009, 13:04
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: En C, clausula #define mas rara de lo normal?

Si, normalmente un caracter no es unsigned, pero a menos que vea el codigo no se que diferencia habra (tal vez que no se usa la pila para una variable local).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 28/05/2009, 13:19
Avatar de darkgaze  
Fecha de Ingreso: febrero-2006
Ubicación: Madrid, España
Mensajes: 462
Antigüedad: 18 años, 2 meses
Puntos: 2
Respuesta: En C, clausula #define mas rara de lo normal?

Eso es quizá el problema...

Me puedes explicar esto de que un carácter no es un signed??

Me dice que qué diferencia hay entre asignar a la posicion directamente el carácter '\n' (salto de linea) y o usar esa macro..
__________________
Darkgaze
  #6 (permalink)  
Antiguo 28/05/2009, 13:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: En C, clausula #define mas rara de lo normal?

Y, normalmente un caracter es char, no unsigned char.

La unica diferencia real que veo, en teoria, en el codigo generado, es que no se usa una variable local pero como te decia el otro codigo no lo tenes.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 04:26.