J'ai rencontré cette chose étrange tout en jouant avec des macros prédéfinies.
Donc, fondamentalement, lorsque vous appelez Y a-t-il de toute façon je peux résoudre ce problème? Ou pourquoi cela arrive-t-il? __ temps __ code> de différents fichiers, cela se produit:
p>
Tout ce que je fais est printf ("% s \ n", __time __); code> de différentes fonctions de différentes sources. P>
3 Réponses :
ou pourquoi cela se produit-il? P> blockQuote>
de la DOCS: P>
Cette macro se développe à une constante de chaîne décrivant
le temps auquel le pré-dépresseur est exécuté fort>. P> blockQuote> Si les fichiers source sont compilés à des moments différents, le temps sera différent. P>
Y a-t-il de toute façon je peux résoudre ce problème? P> blockQuote>
Vous pouvez utiliser un outil de ligne de commande pour générer la chaîne de temps et transmettre la chaîne sous forme de définition de macro au compilateur. De cette façon, le temps sera le même pour tous les fichiers compilés par cette commande. P>
Merci, réponse très utile
Y a-t-il un moyen de stocker le __ __ code> d'un fichier spécifique comme macro?
@Catacata Bien sûr, mais cela ne vous sera pas utile, car vous ne pouvez utiliser que la macro dans la même unité de traduction où vous le définissez.
@erorika Cela pourrait être utile .. Comment pourrais-je accomplir ça?
@Catacata définit simplement une macro: #define id même_time __time __ code>. Maintenant, vous pouvez utiliser
même_time code> macro dans cette même unité de traduction, et il produira le même résultat que
__ fois __ code>.
@erorika Cela ne semble pas affecter ma question en quelque sorte
@Catacata #define id même_time __Time __ code> n'est pas censé résoudre votre problème. C'est une définition inutile (donc «qui ne vous sera pas utile») car ce n'est que bon dans la même unité de traduction (c'est-à-dire le fichier source) et est donc totalement équivalent à l'utilisation de
__ code> dans le premier lieu.
Eh bien, je pense que votre cas d'utilisation est un peu étrange, mais un moyen simple d'obtenir la même heure dans tous les fichiers est d'utiliser compilation_time.h: p> compilation_time.c: p> plus_code.c: P> __ __ code> dans exactement un fichier source et utilisez-le pour initialiser un Variable globale:
#include "compilation_time.h"
...
srand(seed);
Pour répondre à votre question initiale: Cependant, vous demandez à Problème X-Y . Pour répondre à ce que vous essayez réellement de faire: p>
Si vous avez besoin d'une valeur de temps de compilation, vous ferez mieux de laisser votre système construire em> le spécifie. C'est-à-dire, avec __ Time __ code> sera différent pour différents fichiers, car il spécifie le temps où ce fichier spécifique a été compilé. P>
faire code> ou quoi que vous utilisiez, générez une graine aléatoire en quelque sorte, puis transmettez-le sur le compilateur en tant qu'option de ligne de commande pour définir votre posséder la macro em> préprocesseur (par exemple,
gcc -dmy_seed = $ (aléatoire_value) ... code>). Ensuite, vous pouvez appliquer cela à tous les fichiers em> c que vous compilez et que chacun d'entre eux utilise
my_seed code> Toutefois souhaité. P>
C'est fondamentalement la même chose que la réponse d'Eerorika.
__ Time __ Code> se développe à une chaîne donnant le temps auquel le fichier source actuel a été compilé (ou pré-expressé). C'est donc le comportement attendu car vos fichiers source ont été compilés de 1 seconde à part. Qu'est-ce que vous espérez vraiment accomplir?
@Nateeldredge je voulais utiliser temps b> comme une graine aléatoire. Je faisais cela '#define Shift_Key (__Time __ [0] -' 0 '+ __T0 __ [1] -' 0 '+ __T0 __ [3] -' 0 '+ __ Time __ [4] -' 0 '+ __ 6] - '0' + __ Time __ [7] - '0') 'et avait besoin __ Time B> être identique dans toutes mes sources. Y a-t-il de toute façon je peux activer cela?
Veuillez joindre le code dans les marques de backticks (`) afin qu'il sort correctement formaté correctement.
Donc, juste pour vous assurer que vous souhaitez utiliser Compilation B> en tant que graine aléatoire? Cela signifie que le code résultant produira les mêmes nombres aléatoires chaque fois qu'il est exécuté jusqu'à ce que vous recompiliez.
@Nateeldredge exactement
@NateEldredge est là quand même à coller avec la
__ __ code> macro? J'ai besoin d'utiliser une macro pour la graine
Note latérale:
__ code> est un caractère spécial dans le marquage, et il est interprété comme Texte audacieux B> Vous voudrez peut-être mettre vos extraits dans des backtstics (``) pour éviter cela.
@Catacata: Pourquoi doit-il être une macro? Il serait plus simple d'utiliser
__ __ code> pour initialiser une variable globale dans un seul fichier et utiliser cette variable partout.
@Nateeldredge J'essaie d'accomplir le cryptage de la chaîne de l'horaire de compilation à l'aide de macros et le seul moyen de le faire, consiste à utiliser des macros.
@Catacata: D'accord, bonne chance alors. Trop bizarre pour moi.
GCC ... -DSeed = $ (date +% s) ... code> et utilisez
graine code> au lieu de
__ temps __ code>
@PMG Pourriez-vous me relier plus d'informations sur la date et les différents formats / variables que je peux utiliser? Cela pourrait être idéal pour ce que je fais.
Je ne savais pas
+% s code> par cœur. Je viens de taper
Date d'homme code> pour voir les options. Vous pouvez voir le POSIX
DATE CODE> page en ligne a >
@PMG Je ne peux pas sembler avoir la date d'affichage des secondes uniquement, BTW im en utilisant VS2017. C'est le format que j'ai essayé -DSeed = $ (date +% s). L'a ajouté aux options Commandline / Aditionnelles.
On dirait que POSIX n'a pas la
+% s code> ou équivalent. Vous voudrez peut-être utiliser
+% y-% m.% d% h:% m:% s code> ou
+% y% m% d% h% m% s code> .
@pmg je l'ai défini comme
-DSeed = $ (date +% y% m% d% h% m% s) code> mais lorsque vous essayez de l'imprimer
printf ("% s: \ n ", Graine); code> i get
'expression attendue' code> erreur.
Peut-être que vs2017 ne fait pas Substitutions de commande comme Posix Shells ?