Comment faire de la constante globale (travail sur plusieurs fichiers) dans un programme C?
J'ai un C ANSI programme composé de deux fichiers. Le premier fichier contient les main()
de la fonction, et le deuxième fichier contient d'autres fonctions que le premier fichier d'appels. Avant la main()
définition de fonction, j'ai placé le code suivant:
#define PI 3.14159265358979323846
mais le 2ème fichier ne vois pas cette variable. Le premier fichier le voit bien. Ensuite, j'ai placé cette même ligne dans le deuxième fichier (tout en le gardant dans le premier fichier comme ci-dessus), avant que les définitions de fonction, mais encore dans le second fichier, ne pas le voir. Les choses toujours compile bien, mais lors du suivi de la variable PI dans gdb, il montre "No symbol "PI" in current context."
Comment faire de la PI une constante globale visible dans tous les fichiers compilés dans l'application?
MODIFIER /MISE À JOUR:
En fonction de la réponse jusqu'à présent, j'ai créé le fichier suivant:
myheader.h
#ifndef my_header_stuff
#define my_header_stuff
#define PI 3.1415926535897932384626433832795
#endif
et dans les deux fichiers que je veux voir cette constante PI, j'ai inclus ce fichier comme suit:
fichier1.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
int main(void) {
etc...
}
et fichier2.c
#include <stdio.h>
#include <stdlib.h>
#include "myheader.h"
double interesting_function(void) {
etc...
}
Questions:
-
Lorsque j'utilise GDB pour déboguer,
b PI
retourne (dans les deux fichiers, même résultat) "Pas de symbole "PI" dans le contexte actuel". Cependant, le calcul en fonction PI est calculé correctement. Est-il un moyen pour afficher PI dans gdb? -
Je peux aussi inclure les deux lignes pour stdio et stdlib dans le
myheader.h
fichier? -
Puis-je également inclure tous les prototypes de fonction dans les
myheader.h
fichier? Si je le fais, et puis il faut dire que j'ai créer un fichier3.c qui n'a pas besoin de l'un de ces prototypes, car il n'utilise pas ces fonctions, est tout mal fait?
Grâce JosephH, pouvez-vous m'aider avec la mécanique de cette? Voir ma tentative au-dessus.
Voir la réponse que je viens de posté
OriginalL'auteur ggkmath | 2011-11-29
Vous devez vous connecter pour publier un commentaire.
PI
avec la valeur pi.#include
dans vos fichiers d'en-tête#define NAME value
? Ou, si vous ne pouvez pas l'expliquer, c'était peut-être mon débogage de la confusion.Je ne pense pas que vous obtenez des résultats différents. Pourriez-vous vérifiez?
OriginalL'auteur JosephH
Une macro n'est pas une variable, et il n'apparaît pas dans gdb comme une variable. Les choses sont en train de recueillir des beaux parce qu'ils travaillent très bien; vous avez juste le mauvais attentes pour gdb.
En général, une macro de ce qui est nécessaire dans plus d'un endroit doit être définie dans un fichier d'en-tête inclus partout où il est nécessaire; par exemple, la macro
M_PI
est déjà défini à la pi dans la normemath.h
.L'autre chose que vous pouvez faire est d'avoir
const int PI = 3.14159etcetc;
dans un fichier, etextern const int PI;
dans tous les autres, mais c'est une douleur car elle nécessite la définition de la valeur d'exister dans exactement un unité de compilation.C'est malheureux, mais
M_PI
n'est pas en c standard.OriginalL'auteur hobbs
J'avais déclarer PI dans le fichier d'en-tête et d'inclure ce fichier d'en-tête pour tous les fichiers source
Vous devez placer les déclarations de fonction, les macros dans le fichier d'en-tête (et peut-être de simples fonctions inline)
La mise en œuvre doit être placé .c fichiers
//J'ai édité la réponse à la réponse à votre commentaire
J'ai édité ma réponse
Merci Janv. Souhaitez-vous utiliser #define PI 3.14159 à les déclarer dans le header? Si oui, ne serait pas un #include <fichier.h> il suffit de l'insérer que j'ai actuellement? Si non, comment?
tout d'abord, je voudrais utiliser la constante M_PI de <math.h>, mais si je veux déclarer la variable pour plus .c fichiers, je serais certainement faire comme je l'écris ci-dessus
OriginalL'auteur Jan Vorcak
Vous pouvez créer une variable globale.
Noter que l'utilisation du préprocesseur est surtout découragé.
Également noter que M_PI définir suggéré par d'autres n'est pas disponible dans la dernière norme C (C99) donc vous ne pouvez pas compter sur elle.
Sont ces deux placé à l'avant de la définition d'une fonction?
Oui, si vous voulez my_global pour être utilisé par ces fonctions.
Pourquoi pas? Les préprocesseurs sont mal, ou?
OriginalL'auteur Beginner
Si vous travaillez uniquement avec la norme des définitions mathématiques, la norme en-tête de fichier
math.h
a quelques bons:Pour définir des constantes globales, il existe de nombreuses méthodes, expliquée de manière adéquate dans d'autres réponses.
M_PI
n'est pas en c standard.OriginalL'auteur wallyk
Il serait très agréable si vous créez un fichier d'en-tête pour le fichier qui est inclus dans le fichier principal, et C'est une bonne pratique et vous permettra d'améliorer vos compétences Linguistiques. Imaginer que nous avons un fichier source avec un des fonctions, des variables globales et des constantes que nous aurons besoin dans le fichier source principal, on pourrait créer un fichier d'en-tête de ce fichier et mettez-les fonctions y:
Dans votre fichier".c" fichier, vous devez faire ce qui suit:
Dans votre main.c" fichier que vous devez faire :
J'espère que j'ai aidé en quelque sorte.
OriginalL'auteur pharaoh
le préprocesseur direct sera remplacer par le code avant de compiler, si dans votre cas, votre premier fichier de la PI va remplacer par 3,14... et il n'y a pas de PI symbole dans la table des symboles de la première traduire unité. ainsi, le gdb va dire pas de 'PI' symbole.
si vous souhaitez utiliser des #define et ne voulez pas utiliser l'en-tête de fichier, vous devez #deine PI au début de chaque fichier.
OriginalL'auteur user not found