variable una tipos que programacion funcion ejemplos dev define declara constantes constante como c++ const c-preprocessor

c++ - una - variable en programacion



¿Por qué alguien usaría#define para definir constantes? (9)

¡Nadie no debería!
En realidad, uno debería preferir const int sum = 1; over #define sum 1 por una serie de razones:

Mecanismo de Alcance:

#define s no respeta los ámbitos, por lo que no hay forma de crear un espacio de nombres con ámbito de clase. Mientras que las variables const se pueden delimitar en las clases.

Evitar los números mágicos extraños durante los errores de compilación:

Si usa #define estos son reemplazados por el preprocesador al momento de la precompilación. Por lo tanto, si recibe un error durante la compilación, será confuso porque el mensaje de error no referirá el nombre de la macro sino el valor y aparecerá un valor repentino , y uno perdería mucho tiempo buscándolo en el código.

Facilidad de depuración:

También por las mismas razones mencionadas en el n. ° 2, mientras que la depuración #define realmente no proporcionaría ayuda.

Por lo tanto, para evitar las situaciones anteriores, const será una mejor opción.

Es una pregunta simple, pero ¿por qué alguien usaría #define para definir constantes?

Cuál es la diferencia entre

#define sum 1 y const int sum = 1;


De la introducción a la programación con C ++ que fue escrito por Daniel Liang declaró que:

Cuando define una constante usando la directiva #define , la constante no se almacena en la memoria. La constante se reemplazará con un valor por compilador. Cuando declara constante usando la palabra clave const , la constante se almacena en la memoria al igual que la variable.

Si necesita usar constante en múltiples programas, use #define para definirlo en el archivo de encabezado para que pueda ser incluido en otro programa. Si se usa constante solo en un programa, usar const para declarar es más eficiente.


En palabras simples

#define sum 1 /*is pre processed*/

Lo que significa que esa sum no existe después de que finaliza la etapa de preprocesamiento.

const int sum = 1; /*is compiled/linked*/

Lo que significa que la sum existe hasta que el ejecutable esté hecho de tu programa.


La primera es una directiva de preprocesador, antes de que el compilador compile tu código, pasará y reemplazará la suma por 1. El segundo declara una variable en la memoria para mantener esa cantidad. Estoy seguro de que se puede argumentar cuál es el mejor, pero el "const int" es probablemente más común en C ++ (cuando se trata de constantes numéricas).

http://www.geekpedia.com/KB114_What-is-the-difference-between-sharpdefine-and-const.html


Para el ejemplo que acabas de dar, normalmente usaría una const. Excepto por supuesto, el #define se puede usar para la compilación condicional en otro lugar:

#if SOME_DEFINE == 1 // Conditional code #endif

Esto es algo que no puedes hacer con una const. Si no necesita el valor para ser accesible desde el preprocesador, yo diría que use un const a menos que haya alguna razón por la que eso no sea posible. Hay algunas cosas sobre esto en C ++ FAQ lite , donde señalan con razón que solo porque el preprocesador es "malo", no significa que nunca lo necesitarás.


Siempre trate de usar "const int", en lugar de #define.

Use #define, solo cuando su código de preprocesador pueda ser leído por otra herramienta, y sea más fácil ir con el preprocesador, en lugar de analizar el idioma.

También es la única forma de definir algo que se verificará más tarde con # if / # else / # endif


#define es necesario para hacer que cosas como guardias de inclusión funcionen, porque C ++ no tiene un sistema de importación de módulos real .

#define causa una sustitución textual literal. El preprocesador entiende cómo tokenizar el código fuente, pero no tiene idea de lo que realmente significa. Cuando escribe #define sum 1 , el preprocesador revisa su código y busca cada instancia de la sum del token y lo reemplaza con el token 1 .

Esto tiene una variedad de limitaciones: #define sq(x) x * x no funcionará bien si lo usa como sq(3+3) ; y usar #define para una constante no respeta el alcance de ninguna manera, ni asocia ningún tipo de tipo con la constante. Sin embargo, #define se puede usar (especialmente en combinación con algunas otras cosas especiales, como los operadores del preprocesador # y ## ) para hacer algo de magia que de otro modo no sería posible (excepto haciendo manualmente lo que hace el preprocesador).


#define tiene muchas aplicaciones diferentes, pero su pregunta parece referirse a una aplicación específica: definir constantes con nombre.

En C ++ rara vez hay una razón para usar #define para definir constantes con nombre.

#define normalmente se usa ampliamente en el código C, ya que el lenguaje C es significativamente diferente de C ++ cuando se trata de definir constantes. En resumen, los objetos const int no son constantes en C, lo que significa que en C la forma principal de definir una constante verdadera es usar #define . (Además, para constantes int uno puede usar enumeraciones).


const int es solo un int que no puede cambiar. #define es una directiva para el preprocesador C, que es mucho más que solo definir constantes.

Consulte aquí para obtener más detalles: http://en.wikipedia.org/wiki/C_preprocessor