2017-09-13 8 views
0

J'ai un morceau de code mis en place pour prendre un paramètre entier constant (dimension du problème), mais il pourrait fonctionner avec de nombreuses dimensions différentes.Y compris les constantes sans importer le fichier d'en-tête

Je ne veux pas avoir à changer la dimension codée en dur chaque fois que je cours, je définirais idéalement plusieurs fonctions d'en-tête factices qui sont fondamentalement juste:

#ifndef dim_define_h 
#define dim_define_h 

    const int dimension = [DIMENSION SPECIFIC TO THIS HEADER FILE]; 

#endif 

Ensuite, lors de la compilation que je pouvais utiliser selon fichier d'en-tête dont j'avais besoin pour cette instance comme:

g++ dimension_6.h code.cpp 

Est-ce possible? Définir une constante dans un fichier d'en-tête et l'utiliser dans un autre fichier qui n'implique pas explicitement ce fichier d'en-tête?


EDIT:

Ma prochaine tentative était de prendre la fonction principale uniquement, coller ainsi que la définition de la dimension dans un autre fichier, et faire des copies de cela. Ensuite, la compilation ressemble à:

g++ dim_specific_main.cpp lots.cpp more.cpp helpers.cpp 

Et je pense que ça en fait par la compilation des principales maintenant, qui dépendent des fonctions d'assistance définies dans tous les fichiers d'aide. Malheureusement, quand il essaie de compiler les fonctions d'aide, il a besoin de la constante définie dans main.h et il semble l'avoir oublié.

EDIT 2: Je me rends compte maintenant que j'essaie d'utiliser cette variable dans des endroits où elle doit être connue au moment de la compilation, et je pense que le lien se produit après compilation, donc je ne crois pas que cette approche particulière possible.

+2

Cela ne répond pas à la question, mais les noms qui contiennent deux traits de soulignement consécutifs ('__DIM_DEFINE_H__') et les noms commençant par un trait de soulignement suivi d'une lettre majuscule sont réservés à l'implémentation. Ne les utilisez pas dans votre code. –

+3

"Je ne veux pas avoir à changer la dimension codée à chaque fois que je cours" Donc, ne le codez pas dur. –

+0

Rendre la dimension du code agnostique est une augmentation inacceptable de l'exécution malheureusement. Sinon, je serais avec vous, je sais que les globales et les constantes codées en dur sont de mauvaise forme. – Emichael

Répondre

6
const int dimension = THE_DIMENSION; 

puis compilez avec

g++ -DTHE_DIMENSION=6 code.cpp 

Pas-tête nécessaire.

+0

Cela fonctionne en général, malheureusement, je suis dans un environnement assez rigide et je ne peux même pas vraiment ajouter plus de drapeaux à la méthode de compilation du système automatisé. – Emichael

+0

@Emichael pouvez-vous construire le fichier d'en-tête à partir d'un modèle avant la compilation? –

+0

Je ne suis pas sûr de ce que cela implique, pouvez-vous me donner des exemples? – Emichael