elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funciones con argumentos OR: ¿Como?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funciones con argumentos OR: ¿Como?  (Leído 1,445 veces)
Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Funciones con argumentos OR: ¿Como?
« en: 1 Junio 2016, 13:10 pm »

¿Cual es el codigo necesario para disponer de una funcion que lee varios argumentos? Tengo entendido que se puede llamar a funciones como "glutInitDisplayMode()" y que se pueden pasar varios argumentos separados por "|".

He buscado sobre el tema y he visto que en la definicion de la funcion el argumento es "unsigned int mode", pero no he encontrado nada mas. ¿Como hace la funcion para separar los argumentos que se le pasan? ¿Tiene algo que ver que los valores que recibe sean potencias de 2? (0,1,2,4,8,16,32,64,...)

No me urge, pero me gustaría entenderlo por si en un futuro me ayuda a reducir un codigo extenso.


En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Funciones con argumentos OR: ¿Como?
« Respuesta #1 en: 1 Junio 2016, 14:34 pm »

Nota aclaratoria antes de la explicación: un número al que le sigue una b, significa que está representado en binario (es para aclarar, no es porque sea así)

Lo que hace el operador | no es separar argumenots, sino que los combina sumando bit a bit. Por ejemplo, si haces 10101b | 11100b obtendrás como resultado 11101b. Básicamente, sumas bit a bit. Entonces, ¿en qué se diferencia de una suma normal? la diferencia reside en que si sumas dos bits con valor 1 no habrá carry. Es decir, si sumáramos 011b + 001b obtendríamos lo siguiente:

Código:
011b
+001b
____
100b

Sin embargo, si aplicamos el operador | obtendríamos

Código:
011b
|001b
____
011b

Entonces, una de las utilidades de este operador es el que mencionas. Lo que hace es asignar un bit de los 32 que tiene un unsigned int a cada bandera.

Por ejemplo, a GLUT_RGBA podríamos asignarle el primer bit, a GLUT_RGB el segundo bit, a GLUT_INDEX el tercer bit, a GLUT_SINGLE el cuarto bit...

Entonces
Código:
GLUT_RGBA   = 00000000000000000000000000000001b
GLUT_RGB    = 00000000000000000000000000000010b
GLUT_INDEX  = 00000000000000000000000000000100b
GLUT_SINGLE = 00000000000000000000000000001000b

Por lo tanto, al hacer GLUT_RGB | GLUT_INDEX, lo que haces es dar como resultado un entero con los bits de GLUT_RGBA y GLUT_INDEX activados, y así GLUT puede saber qué banderas has activado. Lo malo es que solo puedes pasar como máximo 32 banderas, puesto que un entero suele ocupar 4 bytes (32 bits).


« Última modificación: 1 Junio 2016, 14:37 pm por class_OpenGL » En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ver argumentos de funciones codeblocks
Programación C/C++
_niu 2 2,735 Último mensaje 15 Diciembre 2011, 21:57 pm
por _niu
Funciones con nº variable de argumentos - stdarg.h
Programación C/C++
SSantiago90 5 3,281 Último mensaje 6 Mayo 2013, 22:05 pm
por 85
[C] Argumentos anónimos en llamadas a funciones
Programación C/C++
MAFUS 4 2,046 Último mensaje 23 Diciembre 2015, 17:26 pm
por 0xFer
(Consulta) Pasando a las funciones fscanf argumentos nulos
Programación C/C++
class_OpenGL 6 2,712 Último mensaje 30 Julio 2016, 01:51 am
por class_OpenGL
[C++]Numero ilimitado de argumentos en funciones.
Programación C/C++
huchoko 7 2,170 Último mensaje 21 Octubre 2018, 18:30 pm
por CalgaryCorpus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines