Red de conocimiento informático - Conocimiento informático - Si hay varios archivos fuente C en el proyecto, ¿cómo determinar qué archivo fuente compilar primero?

Si hay varios archivos fuente C en el proyecto, ¿cómo determinar qué archivo fuente compilar primero?

Es mejor enseñar a la gente a pescar que enseñarles a pescar. gt;gt;, especialmente lt;lt;efectivo C gt;gt;, es la biblia de C, una lectura obligada... y finalmente Avanzada. También puedes consultar Explorando el modelo de objetos C en profundidadgt;gt;... Lo he leído todo y creo que es muy útil.

Bien, aquí están las preguntas:

Antes de responder la pregunta, revise los conceptos básicos;

1: Las variables globales en C se utilizan en todo el programa Solo se puede definir una vez, pero se puede declarar varias veces (sin límite), definirlo en un lugar y luego declararlo cuando se use en otros lugares

2: ¿Qué significa definir un; ¿variable? ¿definición? Por ejemplo, int i; es una definición;

y extern int i; es solo una declaración

Pero si escribe extern int i = 0; , while No es una declaración (¿Es un poco complicado? Será más fácil una vez que esté familiarizado con él)

Entonces, creo que su pregunta es. En realidad, surge de tu ambigüedad sobre el concepto de definir y declarar variables en la sintaxis de C;

Dijiste que declaraste i en a.cpp, pero en b.cpp debes declararlo en extern. compilar, esto es normal.... Esto es normal, porque tu i está definida en a.cpp...

Dijiste que declaraste i en b.cpp, a.cpp se puede compilar con o sin extern. Supongo que su código todavía define i en a.cpp y i en b.cpp no ​​es global.

En cuanto a tu comentario sobre tener múltiples archivos fuente. ¿Cómo se determina el orden de compilación? Esta pregunta es difícil de responder. Me temo que diferentes compiladores la manejarán de manera diferente.... No creo que debas pensar en esto... De hecho, el compilador compilará los diferentes archivos fuente en módulos independientes y luego los vinculará en un programa ejecutable, ya que todos son módulos independientes, en teoría el orden de compilación no No importa. El orden de compilación no importa.

Pensé que debería decirle cómo administrar y utilizar correctamente las variables globales;

Primero, cree un archivo "global.h" (el nombre del archivo depende de usted) . (El nombre del archivo depende de usted, solo le estoy dando un ejemplo aquí) y recuerde agregar protectores de encabezado a sus archivos de encabezado. Si me dice que no sabe qué es un protector de encabezado, le sugiero encarecidamente que deje de leer... descargue un manual de C ahora);

En el archivo global.h. Aquí está global.h:

#ifndef GLOBAL_H

#define GLOBAL_H

extern int g_i // Aquí está la declaración, una buena práctica es poner en la variable global Agregue g_ al frente.

#endif

Luego cree un nuevo archivo global.cpp que contenga global.h y luego defina todas las variables globales.

El siguiente es el contenido de global. .cpp:

#include "global.h"

int g_i = 1982 // ¡Defina aquí!

En este punto, todo está hecho. Finalmente, incluya global.h en el archivo cpp donde necesite usar variables globales.

Por ejemplo, a.cpp y b.cpp; se compilan bien, ¿verdad?

//////////////////////////////////////////// // //

Comprueba la nueva pregunta del autor... Agregaré una respuesta.

Pregunta 1: Mi pregunta es, si la aplicación está definida en my.cpp, debe usar extern para declarar la aplicación en mfc.cpp; de lo contrario, la compilación saldrá mal, pero si la aplicación está definida en mfc.cpp, no es necesario declararla en my.cpp y la compilación se realizará sin problemas. ?

Mi respuesta: Esto sigue siendo una cuestión de declaración y definición. Como dije antes. Una variable (como su theApp) solo se puede definir una vez en todo el programa y luego, donde sea necesario, debe declararse antes de poder usarse.

Mire la situación real: usted define la aplicación en my.cpp y, cuando desea usarla en mfc.cpp, por supuesto, primero debe declararla y agregar extern a Declare la variable; de ​​lo contrario, se convertirá en una definición, lo que hará que defina la misma variable global dos veces en my.cpp y mfc.cpp, lo que naturalmente no se podrá compilar.

Si definiste la aplicación en mfc.cpp, no necesitas declararla porque no estás usando la aplicación directamente en my.cpp. Por lo tanto, no es necesario declararlo. Creo que esto está claro.

Además, para agregar algo de sentido común básico, generalmente escribimos int i; dicha declaración es una "definición", y la "definición" en realidad desempeña el papel de "declaración"; no define variables, pero cuando solo desea declarar una variable global externa (es decir, una variable global en otros archivos cpp), debe agregar extern.

Creo que al autor le sorprendió la necesidad de agregar extern.

Pregunta 2:

El resultado de ejecutar este programa es que solo se ejecuta la declaración de salida del constructor, pero no la declaración de salida del destructor.

Esta cuestión es más complicada. Esto implica el proceso de inicio del programa C: simplemente diré:

Tome Windows como ejemplo. Después de hacer clic en un programa exe, el sistema creará un "objeto de núcleo de proceso" y creará una memoria virtual 4G. espacio y otros recursos necesarios para ejecutar el programa, luego cree un "objeto del núcleo del subproceso", inicie un subproceso (es decir, el subproceso principal), el subproceso llama a una función de inicio de C, que inicializará todas las variables globales en el programa (en este momento verá la ejecución del constructor de la clase base de su aplicación y lo imprimirá), todas las variables globales se construyen antes de comenzar a ejecutar la función principal.

Su función principal regresará. En este punto, se ejecutará la salida() del ejecutable de C, lo que destruirá todas las variables globales (es decir, la aplicación), pero la ventana de su consola ya habrá cerrado. Entonces no ve la copia impresa de la ejecución del destructor. Ah, okey.

Además: recomiendo sinceramente que todos echen un buen vistazo a lt;lt;C primergt;gt; y lt;lt;Effective C gt;gt; ;lt;En profundidad mfcgt; gt; Como libro de texto de C, aunque es un libro muy bueno, y aunque este libro es muy bueno, demuestra muy bien los maravillosos usos de la herencia de C y las funciones virtuales a través de mfc. Sin embargo, Hou Jie, autor de "In-Deep MFC", lo dijo bien: No construyas una plataforma alta sobre arena... Es muy importante sentar una base sólida. Cuando comprende los conocimientos básicos de C, en realidad es muy sencillo observar la profundidad de mfc...