C/Visual C - already defined

 
Vista:

already defined

Publicado por VoidPointer (180 intervenciones) el 18/07/2005 20:09:22
Hola, tengo un problema con un #define y el assembly delinux por que por ejemplo si yo defino algo asi:

#define clrscr()({system("clear");})
este anda perfecto cunado lo llamo una o mas veces, pero tengo otro define hecho el cual contiene instruciones en assembly y solo me deja ejecutarlo una vez, cuando lo llamo otra ves me dice que cero u one ya estan definidos, one y cero son labels:

#define DoSomething()({\
asm("jmp MyLabel;\
movb %%al,%0;\
MyLabel:":"=r"(mivariable)); \
})
esto que se mu ocurrio escribir ahora, seguro esto lo llamo uina ves y a la sengunda me dije que My Labels esta ya declarado, por que pasa esto???

saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:already defined

Publicado por chuidiang (677 intervenciones) el 18/07/2005 23:40:58
Hola:

No he trabajado nunca en asm desde C.
Si en vez de define pones en el codigo dos veces la misma secuencia con el MyLabel definido en ambos casos ¿te da el mismo error?.

void unaFuncion (...)
{
{ asm ... }
/* aqui codigo c */
{ asm ... } /* exactamente igual al de arriba */
}

Quizas sea cosa de que no puedes definir dos veces la misma etiqueta dentro de asm en dos sitios distintos. Ten en cuenta que el define en realidad se reemplaza en tiempo de compilación por lo que hayas puesto.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:already defined

Publicado por VoidPointer (180 intervenciones) el 19/07/2005 19:54:43
No en ese caso anda bien , tantas veces como llame a la funcion, pero me llamo la atencion que me de ese mensaje que nisiquiera es un warning es un error,
voy a probar declarar en linea dos asm separados a ver si me da otra ves error.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:already defined

Publicado por fernando.gomez (1603 intervenciones) el 19/07/2005 20:01:13
A ver, intenta reemplazar

#define DoSomething()({\
asm("jmp MyLabel;\
movb %%al,%0;\
MyLabel:":"=r"(mivariable)); \
})

por esto:

#define DoSomething {\
asm {\
jmp MyLabel;\
movb %%al,%0;\
MyLabel:":"=r"(mivariable));\
}\
}

Es decir, en lugar de emplear

asm ( ... );

emplea

asm {
...
}

Hasta donde sé, la primera forma de asm se emplea sólo para incluir una sentencia en ensamblador, mientras que la segunda, para meter múltiples. Probad y a ver qué pasa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar