Preguntas sobre el lenguaje C

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Re: Preguntas sobre el lenguaje C

Postby Hokuto7 » Tue Jun 22, 2021 9:52 am

Tengo otra pregunta.

He realizado una funcion que devuelve un puntero de enteros y consegui que me funcionara,pero me gustaria saber si esta hecha correctamente y si hay alguna forma de simplificar o reducir el codigo.

Source Code (C) [ Download ] [ Hide ]
  • #include <stdio.h>
  • #include <stdlib.h>
  •  
  • int *suma(int *n1,int *n2);
  •  
  • int main() {
  •        
  •         int n1 = 5,n2 = 5;
  •         int *s2;
  •        
  •         s2 = suma(&n1,&n2);
  •         printf("suma: %d \n",*s2);
  •        
  •         getchar();
  •         return 0;
  • }
  •  
  • int *suma(int *n1,int *n2){
  •         int numero1 = *n1,numero2 = *n2;
  •         static int total = 0;
  •         static int *resultado = &total;
  •         n1 = &numero1;
  •         n2 = &numero2;
  •         *resultado = (*n1)+(*n2);
  •         return resultado;
  • }
  •  
  •  
Last edited by Hokuto7 on Wed Jun 23, 2021 3:45 pm, edited 2 times in total.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Preguntas sobre el lenguaje C

Postby CicTec » Tue Jun 22, 2021 10:04 am

Esta mal, estas creando lo que se llama "Dangling Pointer" (https://en.wikipedia.org/wiki/Dangling_pointer) o "Referencia Colgante" (https://es.wikipedia.org/wiki/Referencia_colgante).

Para que el ejemplo sea correcto "resultado" y "total" deben ser variables static para que no sean descargadas al salir de la funcion, o variables globales siempre presentes en el programa en toda su ejecucion.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Preguntas sobre el lenguaje C

Postby Hokuto7 » Tue Jun 22, 2021 7:15 pm

¿Mejor ahora?
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Preguntas sobre el lenguaje C

Postby CicTec » Tue Jun 22, 2021 8:05 pm

Ahora si, aunque mejor que pones el "modificador de tipo" (static) ante del tipo en la declaracion, es convencion usar asi.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Preguntas sobre el lenguaje C

Postby Hokuto7 » Wed Jun 23, 2021 3:46 pm

Gracias por la ayuda,aunque creo que el compilador no deberia de permitir este tipo de errores.
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Preguntas sobre el lenguaje C

Postby CicTec » Wed Jun 23, 2021 5:19 pm

De nada, depende de la implementacion del compilador y/o de las opciones de compilaciones activadas, aunque sobre punteros no puede hacer mucho porque es un sistema no controlable, de hecho algunos lenguajes mas modernos como C# y Java han eliminado el soporte de punteros por esa razon, se permite algo similar pero bajo control de errores.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Preguntas sobre el lenguaje C

Postby shao » Tue Sep 07, 2021 5:15 pm

Nunca está de más conocer C, aunque no se suele usar en los engines de videojuegos (en su aspecto más expuesto o superficial) si que se usa a un nivel más bajo, quiero decir, el usuario medio de un engine no usa C (me refiero a por ejemplo Godot) pero para desarrollar herramientas o addons si que es bueno conocerlo.
Por ejemplo, para hacer algo para Amstrad, C viene estupendo conocerlo.
User avatar
shao
 
Posts: 6034
Joined: Wed Jun 17, 2009 4:51 pm

Re: Preguntas sobre el lenguaje C

Postby CicTec » Tue Sep 07, 2021 5:37 pm

C en si no mucho, C++ si, por ejemplo Unigine, Cryengine y Unreal Engine usan C++ en su API, Unigine usa Tambien C# como lo usa Unity y Godot, otros motores famosos de grafica o framework como OGREE usan C++ en su API y Otho3D, luego pueden tener binding a otros lenguajes como C#.

La casi totalidad de los engines de juegos estan escritos en C/C++, una minima parte en C#, otra minima en JS.

Cada lenguaje tiene sus pro y contra, C++ es el mas poderoso, pero el mas dificil de usar, el mas rapido como codigo generado y velocidad, luego hay C# que es muy poderoso, pero algo lento, ligado al framework instalado en el sistema, luego sigue JS (aun mas lento y mas limitado).

El objectivo de aprender C es porque es un subset de C++ para luego pasar a ese mismo que es el usado, almenos que, como dices no hay que programar por hardware reducido, entonces C queda mejor de su hermano mayor.

En definitiva, mas alto es el nivel del lenguaje, mas facil es de usar, pero mas lento y posibilmente limitado, mas a bajo nivel es, mas dificil es de usar, pero mas poderoso.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Preguntas sobre el lenguaje C

Postby Hokuto7 » Thu Sep 09, 2021 10:10 pm

shao wrote:Nunca está de más conocer C, aunque no se suele usar en los engines de videojuegos (en su aspecto más expuesto o superficial) si que se usa a un nivel más bajo, quiero decir, el usuario medio de un engine no usa C (me refiero a por ejemplo Godot) pero para desarrollar herramientas o addons si que es bueno conocerlo.
Por ejemplo, para hacer algo para Amstrad, C viene estupendo conocerlo.


Solo queria profundizar mas en el lenguaje y aprender mas de este,aunque tambien pensando en un futuro en el puede que intente hacer algo para alguna maquina retro.Me gustaria seguir y crear algo con este lenguaje pero al no encontrar nada que funcione por software o directx he tenido que dejar aparcado mi idea de hacer un juego y simplemente usarlo para aprendizaje.

Lo mismo me ha pasado con c++,todavia tengo pendiente profundizar mas en c++,pero al no encontrar nada que funcione por software o directx pues queda aparcado este lenguaje.

De verdad que no entiendo la mania que hay de crear todos los engines(o la mayoria) solo para opengl,cuando el 99% de gente juega en windows.Menos mal que a los emuladores le siguen añadiendo soporte para diretx. Un saludo
User avatar
Hokuto7
 
Posts: 1396
Joined: Mon Aug 28, 2017 10:14 am

Re: Preguntas sobre el lenguaje C

Postby CicTec » Fri Sep 10, 2021 8:52 am

Hokuto7 wrote:De verdad que no entiendo la mania que hay de crear todos los engines(o la mayoria) solo para opengl,cuando el 99% de gente juega en windows.Menos mal que a los emuladores le siguen añadiendo soporte para diretx. Un saludo

Simplemente porque DirectX funciona solo para Windows y sus mobiles (pad y algun modelo de smartfphone), OpenGL en cualquier plataforma, asi que se da mas prioridad al cross-platform, y mas facilidad de usar una sola API en lugar que dos, ademas quitando los juegos grandes para PC (windows) la gran mayoria de juegos hoy son para mobiles y web, donde apunto OpenGL (y ahora su sucesor Vulkan) funciona y directX solo en parte.

Hace tiempo pusiste aqui en el foro un framework si mal no recuerdo que usaba motor software y creo que usaba lenguaje C, pero no me acuerdo el nombre, servia para hacer juegos retro.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

PreviousNext

Return to Offtopic

Who is online

Users browsing this forum: No registered users and 5 guests