Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Consejos rápidos de C++ by [MoMo Soluciones]  (Visto 766 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline SakuraDev Posteado: December 08, 2020, 01:52:48 AM

  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 105
  • Gracias recibida: 5961
  • ar
Buenas noches,

Estuve 1 hora casi armando estos simples consejos principales mas que nada rápidos que no deben ser olvidados a la hora de manipular C++, trate de hacerlo lo mas explicativo y utilizando las palabras adecuadas.

También usare este tema para compartir algunos conocimientos sobre la programación adecuada de C++, ya que muchos códigos de C++ que vi en la comunidad carecen de algunos aspectos vitales del desarrollo adecuado. Comenzaré el tema con algunos consejos básicos y lo actualizaré mientras tenga tiempo y me enfrente a nuevos problemas comunes en los códigos.


Dejar de usar preprocesadores como representación de valor constante.

Este es uno de los errores comunes de quienes comienzan a aprender C ++. Usar preprocesadores como #define para declarar constantes es simplemente incorrecto. Lo que sucederá cuando declare tal definición es que antes la compilación se produce en la etapa de procesamiento, el preprocesador resolverá todas las directivas del preprocesador (#pragma, #include, #define, #if, etc.) y las sustituirá por su definición. Cuando usa #define para declarar constantes, este tipo probablemente se eliminará del .obj en el proceso de compilación (lo mismo para el .pdb). El preprocesador sustituirá cada #define por su definición, no creará un tipo de datos para el valor. Esto dará lugar a problemas como cuando está depurando y el código que está recorriendo hace uso de un #defineel depurador no podrá recuperar (en la mayoría de los casos) el valor de la definición (porque no hay un tipo allí, solo un número constante). Una solución limpia para esto es usar enumeraciones anónimas. Puede cambiar fácilmente (sin más cambios de código) un #define MAX_USER 10 a enum {MAX_USER = 10}; . Esto hará exactamente lo que quiso decir cuando declaró #define y lo salvará de futuros dolores de cabeza (eso sin mencionar los beneficios de calidad del código).

Trate las funciones const y los parámetros const como predeterminados en su código.

C ++ no se ejecuta en un entorno totalmente administrado como otros lenguajes. Esto trae algunos beneficios, pero si no toma la precaución adecuada, su código será muy propenso a errores. Sé que este puede ser difícil al principio, pero intente familiarizarse para declarar siempre funciones y sus parámetros como const, cuando el compilador se queja de que se está evaluando una constante, luego analiza si ese tipo / función realmente necesita cambiarse, si por lo que simplemente elimine el operador const para ese tipo específico. Le ayudará a escribir un mejor código y evitar algunos problemas en el futuro.

Siempre prefiere utilizar punteros inteligentes en lugar de punteros nativos.

No puedo enfatizar esto lo suficiente, pero lo intentaré. Siempre antes de pensar en declarar un puntero nativo, piénselo nuevamente para ver si no hay un puntero inteligente adecuado para satisfacer sus necesidades con ese puntero. No puedo hablar mucho sobre los punteros inteligentes aquí porque ocuparía mucho espacio de texto, pero le sugiero ALTAMENTE que se tome uno o dos días para leer y conocer mejor los punteros inteligentes y sus usos en C ++.

C ++ tiene un recolector de basura. ¡Aprovéchalo!

A pesar de no ejecutarse en un entorno administrado, el compilador de C ++ tiene una función para que pueda liberar recursos fácilmente cuando ya no los necesite. Esto se llama RAII (abreviatura de Resource Acquision Is Initialization). RAII es una regla simple que los compiladores de C ++ usos para asegurar cadaEl objeto (que se refiere tanto a clases como a estructuras) que salga del alcance tendrá su destructor llamado. En otras palabras, siempre que implemente clases y estructuras, tenga en cuenta que debe usar ctor como la función para inicializar todas las variables y recursos necesarios que la clase necesita y el dtor para liberar cualquier recurso que la clase haya usado. Si usa esto junto con el uso de punteros inteligentes, su código será MUY más legible, fácil de mantener y MUY menos propenso a grandes problemas como pérdida de memoria y punteros colgantes.

No incluya encabezados innecesarios en sus archivos de encabezado.

Adopte de forma predeterminada el enfoque de incluir solo un encabezado en otro encabezado cuando no haya otra opción. Esto acelerará el proceso del enlazador y disminuirá la relación y dependencia alrededor de .obj y sus encabezados. Trate de usar siempre la declaración de tipos hacia adelante (estructuras y clases) donde pueda.

No mezcle (NUNCA) código C ++ con código ensamblador en línea en funciones desnudas
Una función desnuda en C ++ es una función que carece de marco de pila, por lo que no puede tener ninguna variable local. Este es un error común para aquellos que están aprendiendo a parchear y están usando C ++ para construir un dll para crear ganchos en otro código nativo. Por lo general, realiza un salto en el PE de destino a una función simple en su dll de C ++ para modificar el comportamiento de ese código nativo. El problema cuando la función desnuda tiene código C ++ es que te pones en las optimizaciones del compilador para decidir si compilar un código usando el marco de pila para declarar variables temporales o no. Cuando escribe instrucciones complejas de C ++, el compilador normalmenteoptimice eso usando el marco de pila de la función para crear variables temporales. Si eso ocurre dentro de una función desnuda, su inocente instrucción C ++ MODIFICARÁ el marco de pila de la función que está conectando. Esto puede provocar que este código modifique las variables locales de esa función o, si tiene la suerte, modificará la dirección de retorno o el marco de pila guardado, lo que probablemente provocará un bloqueo del proceso. La solución a esto es NUNCA (a menos que realmente sepa lo que está haciendo) poner código C ++ dentro de una función simple. Si está utilizando funciones desnudas para acceder al marco de pila de funciones enganchadas, coloque siempre el código en línea asm en la función desnuda y dentro de ella puede llamar a otra función cdecl donde puede codificar tanto C ++ como desee.

Deja de usar variables globales.

El estado global de un programa rompe muchas reglas de buen código. Además, algunos escenarios específicos pueden obligarlo a declarar variables globales, el 99,9% de los casos no lo hace. Cuando crea un código que depende en gran medida del estado global, está creando un código que es MUY difícil de mantener y leer. Esto ES realmente un gran problema, créame. Existen algunas estrategias de implementación que puede utilizar para evitar el estado global en un programa. Puede comenzar tomando una lectura de Inyección de dependencia (DI).

Esto es todo por hoy, si tiene un consejo rápido que no figura aquí, responda con él y actualizaré el tema sin ningún problema. Prácticamente estos tips son los únicos que tengo en cuenta a la hora que manipulo C++.

Life is only one and you have to enjoy it, never lower your arms, with will and dedication you can achieve your dreams and desires.

Soporte MoMo - PunkH4xInd

- ¿Quieres servicios para armar tu Servidor de Mu Online? Enviarme mensaje Privado en el Foro.
Configuración Completa SVR - Diseño Grafico Profesional - Balance PVP - WebSite - Foro - Items 3D y Modelación de Mapas

Gracias:


Offline Ifreat #1 Posteado: December 08, 2020, 04:17:45 AM

  • Colaborador
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 731
  • Gracias recibida: 5120
  • gb
correct solution regarding with the #define when it comes to C coding.
thumbs up

Error . . . . . .

Offline ZabiinoOo #2 Posteado: December 08, 2020, 06:00:51 PM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • Administrador
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 7.302
  • Gracias recibida: 125857
  • pe
Muy buenos consejos amigo momo, para adelante :D




Prohibido pedir soporte via MP
Leer las reglas de cada seccion
we trust god

Offline SakuraDev #3 Posteado: December 10, 2020, 11:05:08 AM

  • 0 puntos por ventas
  • *
  • Rank: Sup. destacado
  • Posts: 105
  • Gracias recibida: 5961
  • ar
Muy buenos consejos amigo momo, para adelante :D

Gracias Zabiinoo, seguiré aportando a la comunidad con cosas buenas e importantes.

Life is only one and you have to enjoy it, never lower your arms, with will and dedication you can achieve your dreams and desires.

Soporte MoMo - PunkH4xInd

- ¿Quieres servicios para armar tu Servidor de Mu Online? Enviarme mensaje Privado en el Foro.
Configuración Completa SVR - Diseño Grafico Profesional - Balance PVP - WebSite - Foro - Items 3D y Modelación de Mapas

Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
0 Replies
785 Views
Last post December 08, 2017, 01:37:43 PM
by Angel Olano
1 Replies
673 Views
Last post April 10, 2019, 10:18:15 AM
by MOYOne
3 Replies
500 Views
Last post February 11, 2020, 08:13:35 PM
by diegah
0 Replies
444 Views
Last post December 09, 2020, 05:37:33 PM
by SakuraDev
0 Replies
411 Views
Last post December 09, 2020, 10:26:48 PM
by SakuraDev