Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





__int8, __int16, __int32, __int64...

Iniciado por O2, 10 de Marzo de 2003, 06:07:37 PM

« anterior - próximo »

O2

                                Mirando en la MSDN sobre estos tipos de datos, dicen que con ellos te puedes definir tus propios enteros de diferentes tamaños y tal.... si envargo luego dicen esto:

Citar
Because __int8, __int16, and __int32 are considered synonyms by the compiler, care should be taken when using these types as arguments to overloaded function calls. The following C++ code generates a compiler error:

void MyFunc( __int8 ) {}
void MyFunc( char ) {}

void main()
{
   __int8 newVal;
   char MyChar;
   MyFunc( MyChar );    // Ambiguous function calls;
   MyFunc( newVal );    // char is synonymous with __int8.
}

Entoces... si son = para el compilador, para que cojones sirven?

¿Podria definir diferentes tipos de enteros y que el compilador los diferenciara?

Gracias!                                

ethernet

A veces interesa hacer q tus programas sean portables y como sabras para diferentes procesadores int, long o short no tienen q ocupar el mismo tamaño en las diferentes plataformas. En el caso de q quieras una variable de 16 bits pillas el __int16 y punto. Incluso puedes definirtelos tu mismo :) (en funcion de la arquitectura claro)

saludos

synchrnzr

                                Me parece que a lo que se refieren en este texto es que __int8, __int16, etc... son sinónimos de otros tipos estándar de C y que hay que ir con cuidado en la sobrecarga de funciones para evitar declaraciones ambiguas.

El ejemplo que te pone es que __int8 es en realidad de tipo char (como si antes hubiéramos hecho #define __int8 char) y por tanto estas dos declaraciones:

void MyFunc( __int8 ) {}
void MyFunc( char ) {}

son ambiguas, ambas son void MyFunc( char ){} porque __int8 es en realidad de tipo char.

De todas formas lo que te he dicho lo pone en los comentarios del ejemplo, no veo donde tienes el problema :loco:

sync                                

O2

                                Entendi que __int8, __int16 e __int32 eran sinonimos entre si, y que:

void f(__int8 a);

y

void f(__int16 a);

seria lo mismo :)

Ok, Gracias a los dos por la aclaración!                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.