Tengo un programa ANSI C que comprende dos archivos. El primer archivo contiene la función main()
y el segundo archivo contiene otras funciones a las que llama el primer archivo. Antes de la definición main()
función, he colocado el siguiente código:¿Cómo hacer global constante (trabajo a través de múltiples archivos) en el programa C?
#define PI 3.14159265358979323846
pero el segundo archivo no vi esta variable. El primer archivo lo ve bien. Luego, coloqué esta misma línea en el segundo archivo (manteniéndolo en el primer archivo como se muestra arriba), antes de las definiciones de función, pero aún así el segundo archivo no lo ve. Las cosas siempre compilan bien, pero al rastrear la variable PI en gdb, muestra "No symbol "PI" in current context."
¿Cómo hacer que PI sea una constante global visible en todos los archivos compilados en la aplicación?
EDIT/UPDATE:
Sobre la base de la respuesta hasta ahora, he creado el siguiente archivo:
myheader.h
#ifndef my_header_stuff
#define my_header_stuff
#define PI 3.1415926535897932384626433832795
#endif
y en los dos archivos que quiero para ver este PI constante, he incluido este archivo de la siguiente manera:
file1.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
int main(void) {
etc...
}
y Archivo2.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
double interesting_function(void) {
etc...
}
Preguntas:
Cuando uso GDB para depurar,
b PI
devuelve (en ambos archivos, el mismo resultado) "Ningún símbolo "PI" en el contexto actual ". Sin embargo, las matemáticas que dependen de PI se calculan correctamente. ¿Hay alguna manera de ver PI en gdb?¿Puedo incluir también las dos líneas para stdio y stdlib en el archivo
myheader.h
?¿Puedo incluir también cualquier prototipo de función en el archivo
myheader.h
? Si lo hago, y luego digamos que creo un archivo3.c que no requiere ninguno de estos prototipos porque no usa esas funciones, ¿hay algún daño?
Siempre ponga todas las definiciones en archivos .c y declaraciones (incluyendo macros) en archivos .h.Eso debería resolver el problema el 99% del tiempo. – JosephH
Gracias JosephH, ¿me pueden ayudar con la mecánica de esto? Ver mi intento anterior. – ggkmath
Ver la respuesta que acabo de publicar – JosephH