2009-03-23 22 views

Respuesta

9

Definir y declarar son similares pero asignar es muy diferente.

Aquí estoy declarando (o definir) una variable:

int x; 

Aquí voy a asignar un valor a esa variable:

x = 0; 

Aquí estoy haciendo ambos en un comunicado:

int x = 0; 

Nota

No todos los idiomas admiten declaración y asignación en una declaración:

T-SQL

declare x int; 
set x = 0; 

Algunos idiomas requieren que se asigna un valor a una variable cuando se declara. Este requisito permite que el compilador o intérprete de la lengua para inferir un tipo de la variable:

Python

x = 0 
+0

Me partiré un pelo - Python no tiene ninguna "declaración" de ningún tipo. Las clases y funciones están "definidas", las variables se crean cuando se asignan. En realidad, no "declaras" variables, ya que solo son nombres asignados a objetos. –

+0

Ese es un buen punto: de un pedante a otro aprecio la distinción :) –

+0

Más nítidas: Python no hace ninguna inferencia de ningún tipo, sino que está tipeada dinámicamente. La inferencia de tipo solo es necesaria cuando la variable tiene un tipo.Esto es válido para Python e ilustra los efectos de mi punto: 'x = 5; x = "str" ​​' –

4

Estos términos a menudo tienen significados precisos en los estándares para varios lenguajes. Cuando ese es el caso, no deben combinarse.

En c por ejemplo:

  • una función puede ser define sólo una vez (cuando se dice lo que hace), pero también puede ser declarada antes de eso (cuando se dice qué argumentos toma y qué tipo devuelve).

  • Del mismo modo, una variable es declarada cuando dices de qué tipo es, y esto ocurre solo una vez para cada ámbito. Pero puede asignar un valor en varias ocasiones. (Algunos idiomas también diferencian entre inicialización (dando una variable un valor en el momento de la declaración) y asignación (cambiando el valor más adelante).)

5

Es importante utilizar la terminología correcta, de lo contrario la gente se no sabe de lo que está hablando, o asume incorrectamente que no sabe de lo que está hablando.

32

Una definición es cuando se describe un valor o función, es decir, al compilador o programador se le dice exactamente de qué se trata, p. Ej.

int foo() 
{ 
    return 1; 
} 

int var; // or, e.g. int var = 5; but this is clearer. 

Una declaración le dice al compilador o programador que existe la función o variable. p.ej.

int foo(); 
extern int var; 

Una asignación es cuando una variable tiene su valor establecido, generalmente con el operador =. p.ej.

a = b; 
a = foo(); 
+0

+1 eso es básicamente lo que iba a escribir ... –

+2

En realidad, consideraría "int var;" ser definición, "int var = 5;" es un def/ass combinado. Básicamente, en C, la definición es cualquier cosa que crea espacio para un objeto. Voy a votar de todos modos, quizás cambies la respuesta, tal vez no, pero es lo mejor para salir. – paxdiablo

+0

Gracias por la sugerencia, actualicé la respuesta en consecuencia. – jheriko

2

Las diferencias pueden parecer sutiles, pero son importantes. No todos los idiomas hace que las mismas distinciones, pero en C++ a declaración de variables hace que el tipo y el nombre de la variable conocida por el compilador

int i; 

Un almacenamiento definición de la variable asigna y especifica un valor inicial de la variable .

i = 1; 

Puede combinar una declaración y definición de variable en una sola declaración, como se hace habitualmente.

int x = 1; 

Declarar una variable dentro de una función también reservará memoria para la variable, por lo que el siguiente código define implícitamente la variable a como parte de su declaración.

int main() 
{ 
    int a; 
    return 0; 
} 

Como la variable a se define automáticamente por el compilador, contendrá cualquier valor que se encontraba en la posición de memoria que se ha asignado para ello. Es por eso que no es seguro usar variables automáticas hasta que haya asignado explícitamente un valor conocido.

Una asignación se lleva a cabo cada vez que cambia el valor de una variable en su programa.

x = 2; 
x++; 
x += 4; 

Una declaración función, similar a la declaración de variables, hace que la firma de función conocida por el compilador. Esto le permite llamar a una función en su código fuente antes de que se defina sin causar un error de compilación.

int doSomething(float x); 

Una definición función especifica el tipo de retorno, nombre, lista de parámetros, y las instrucciones para una función. Los primeros tres de estos elementos deben coincidir con la declaración de la función. Una función solo debe definirse una vez en un programa determinado.

int doSomething(float x) 
{ 
    if(x < 0) 
    { 
     x = -x; 
    } 
    return static_cast<int>(x); 
} 

puede combinar las decalartion función y definición en una sola, pero hay que hacerlo antes de la función se llama en cualquier parte de su programa.

+0

Pensé que una * declaración variable * asignó espacio de almacenamiento. Solo obtiene basura en ese espacio a menos que también proporcione una inicialización o hasta que asigne un nuevo valor. Solo puedes inicializar una variable mientras la declaras. – Artelius

+0

@Artelius: en la mayoría de los casos, la declaración incluye una definición implícita del compilador, lo que hace que parezca que la declaración asigna espacio de almacenamiento. Hice una adición (afortunadamente) aclaratoria para incluir esto en mi respuesta. Gracias por mencionarlo. –

+0

He votado esta respuesta ya que es correcta ya que lo he aprendido. Si no, realmente me gustaría saber por qué. Las respuestas anteriores tienen declaración y definición al revés. – lakeweb

-1

La respuesta correcta depende del idioma del que se trate. Los lenguajes de computadora a menudo tienen una terminología específica, ya sea por la especificación del idioma o por la comunidad que crece en torno al idioma. COBOL, cuando lo usaba, tenía una terminología muy diferente a la de los lenguajes más comunes (en el sentido de los idiomas más cercanos a la corriente principal del desarrollo del lenguaje, no de los negocios convencionales). Forth desarrolló una terminología extraña.

Si sabes inglés, generalmente puedes hacerte una buena idea de lo que una palabra significa de su significado normal, pero nunca contar demasiado. Lo mismo es cierto con palabras específicas en todos los idiomas o comunidades lingüísticas.

-1

Depende del idioma, como se ha dicho. Creo que realmente depende de si las palabras se usan para cosas como clases. Para la mayoría de los tipos de datos discutidos aquí, la pregunta podría no tener mucha relevancia. En C++ (ver c++ - What is the difference between a definition and a declaration?), una clase o estructura siempre tiene exactamente una definición, pero puede declararse cero o más veces. Una clase no se puede declarar sin una definición. Entonces "declarado" podría ser sinónimo de "usado".

En la mayoría de los idiomas, los tipos simples como los enteros no necesitan definiciones en la forma en que lo hacen las clases.

0

Definición, declaración y asignación tienen dos casos:

  1. para variables.
  2. para funciones.

Para variable:

- Definición:
Para indica al compilador que reservar memoria para la variable.

int x; 

- Desaceleración:
Para le dice al compilador que la variable se define en otro lugar.

extern int x; 

- Asignación:
Para indica al compilador para poner el valor en la variable.

x = 0; 

Para Funciones:

- Definición:

int functionDef(int x){ 
     int x; 
     ... 
     ... 
     ... 
     return x; 
    } 

- Desaceleración:
Es sólo el prototipo de la función.

int functionDef(int x); 
Cuestiones relacionadas