Después de leer la pregunta , sé las diferencias entre declaración y definición. Entonces, ¿significa que la definición es igual a la declaración más la inicialización?
c++
c
terminology
Tony
fuente
fuente
Respuestas:
Declaración
Declaración, generalmente, se refiere a la introducción de un nuevo nombre en el programa. Por ejemplo, puede declarar una nueva función describiendo su "firma":
void xyz();
o declarar un tipo incompleto:
class klass; struct ztruct;
y por último, pero no menos importante, para declarar un objeto:
int x;
Se describe, en el estándar C ++, en §3.1 / 1 como:
Definición
Una definición es una definición de un nombre previamente declarado (o puede ser tanto una definición como una declaración). Por ejemplo:
int x; void xyz() {...} class klass {...}; struct ztruct {...}; enum { x, y, z };
Específicamente, el estándar C ++ lo define, en §3.1 / 1, como:
Inicialización
La inicialización se refiere a la "asignación" de un valor, en el momento de la construcción. Para un objeto genérico de tipo
T
, a menudo tiene el formato:T x = i;
pero en C ++ puede ser:
T x(i);
o incluso:
T x {i};
con C ++ 11.
Conclusión
Depende. De lo que estás hablando. Si está hablando de un objeto, por ejemplo:
int x;
Esta es una definición sin inicialización. Lo siguiente, en cambio, es una definición con inicialización:
int x = 0;
En cierto contexto, no tiene sentido hablar de "inicialización", "definición" y "declaración". Si habla de una función, por ejemplo, la inicialización no significa mucho.
Entonces, la respuesta es no : la definición no significa automáticamente declaración más inicialización.
fuente
int x;
es tanto una definición como una declaración.So does it mean definition equals declaration plus initialization
.La declaración dice "esta cosa existe en alguna parte":
int foo(); // function extern int bar; // variable struct T { static int baz; // static member variable };
La definición dice "esta cosa existe aquí; haz memoria para ella":
int foo() {} // function int bar; // variable int T::baz; // static member variable
La inicialización es opcional en el punto de definición de los objetos y dice "aquí está el valor inicial para esto":
int bar = 0; // variable int T::baz = 42; // static member variable
A veces es posible en el momento de la declaración:
struct T { static int baz = 42; };
… Pero eso es entrar en funciones más complejas.
fuente
Para C, al menos, según C11 6.7.5:
Según C11 6.7.9.8-10:
Entonces, en términos generales, una declaración introduce un identificador y proporciona información sobre él. Para una variable, una definición es una declaración que asigna almacenamiento para esa variable.
La inicialización es la especificación del valor inicial que se almacenará en un objeto, que no es necesariamente el mismo que la primera vez que le asigna explícitamente un valor. Una variable tiene un valor cuando la define, ya sea que le dé explícitamente o no un valor. Si no le da un valor explícitamente y la variable tiene almacenamiento automático, tendrá un valor inicial, pero ese valor será indeterminado. Si tiene almacenamiento estático, se inicializará implícitamente según el tipo (por ejemplo, los tipos de puntero se inicializan a punteros nulos, los tipos aritméticos se inicializan a cero, etc.).
Entonces, si define una variable automática sin especificar un valor inicial para ella, como:
int myfunc(void) { int myvar; ...
Lo está definiendo (y por lo tanto también lo está declarando, ya que las definiciones son declaraciones), pero no lo está inicializando. Por lo tanto, la definición no es igual a la declaración más la inicialización.
fuente
"Entonces, ¿significa que la definición es igual a la declaración más la inicialización?"
No necesariamente, su declaración podría ser sin ninguna variable inicializada como:
void helloWorld(); //declaration or Prototype. void helloWorld() { std::cout << "Hello World\n"; }
fuente