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.
[Codebox=c file=Untitled.c]
#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;
}
[/Codebox]
Preguntas sobre el lenguaje C
- Hokuto7
- Posts: 1408
- Joined: Mon Aug 28, 2017 10:14 am
Re: Preguntas sobre el lenguaje C
Last edited by Hokuto7 on Wed Jun 23, 2021 3:45 pm, edited 2 times in total.
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Preguntas sobre el lenguaje C
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.
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.
- Hokuto7
- Posts: 1408
- Joined: Mon Aug 28, 2017 10:14 am
Re: Preguntas sobre el lenguaje C
¿Mejor ahora?
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Preguntas sobre el lenguaje C
Ahora si, aunque mejor que pones el "modificador de tipo" (static) ante del tipo en la declaracion, es convencion usar asi.
- Hokuto7
- Posts: 1408
- Joined: Mon Aug 28, 2017 10:14 am
Re: Preguntas sobre el lenguaje C
Gracias por la ayuda,aunque creo que el compilador no deberia de permitir este tipo de errores.
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Preguntas sobre el lenguaje C
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.
- shao
- Posts: 6048
- Joined: Wed Jun 17, 2009 4:51 pm
Re: Preguntas sobre el lenguaje C
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.
Por ejemplo, para hacer algo para Amstrad, C viene estupendo conocerlo.
Contacto: romopua@gmail.com
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Preguntas sobre el lenguaje C
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.
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.
- Hokuto7
- Posts: 1408
- Joined: Mon Aug 28, 2017 10:14 am
Re: Preguntas sobre el lenguaje C
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.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.
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
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: Preguntas sobre el lenguaje C
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.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
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.