Où placer srand(time(NULL)) ?

Plop,

Lorsque je souhaite obtenir un nombre aléatoire en C, j’utilise rand(). Mais je ne sais jamais où placer srand(time(NULL)) pour avoir un code propre. Si je le mets dans main.c, il n’a rien à foutre ici. Je voudrais plutôt le placer du côté des fonctions qui utilisent ce nombre aléatoire, mais il risque d’être exécuté plusieurs fois…

Un exemple : je fais un pendu, avec gestion d’un dictionnaire. J’ai besoin de sortir un mot aléatoire du dico, et c’est le seul endroit où j’ai besoin d’un nombre aléatoire. Il est donc logique de chercher à placer srand(time(NULL)) du côté des fonctions de gestion du dictionnaire. Mais où puis-je le mettre ?
L’idéal (d’un point de vue logique) serait de le mettre en vrac dans le fichier .h associé aux fonctions de gestion du dico, mais je n’ose imaginer l’état de la première personne qui fera ça :075

La seule solution semble être de le laisser au début de main, mais ça me déplaît. N’ai-je donc d’autre choix ?

EDIT : Je crois avoir trouvé une deuxième possibilité. Il suffit d’orienter objet :041 Une fonction d’initialisation des variables nécessaires aux fonctions de gestion du dico pourra par la même occasion faire un petit srand(time(NULL)). Mais autant faire du C++ dans ce cas, non ?

Dans main c’est bien sinon, moi j’aime bien le mot clef static du C. Une façon de faire serais ainsi :

void initRand(){ static int val = 0; if (!val){ srand(time(NULL)); val |= 1; } }

Puis de remplacer tes appels à rand() par :

int nextInt(){ initRand(); return rand(); }

C’est une méthode que je trouve amusante mais elle a trois problème :
[ul]
[li]initRand possède un effet de bord[/li]
[li]initRand n’est pas thread-safe ![/li]
[li]certains diront que static n’est pas utilisable ailleurs qu’en C/C++/Objective-C[/li][/ul]

La solution objet est de loin la meilleure mais on ne peut pas t’aider car il faut repenser ta manière d’organiser ton dictionnaire.

Est-ce un problème que initRand ait un effet de bord ?

Optons donc pout la solution orientée objet. Mon dictionnaire est déjà organisé de façon à pouvoir ajouter facilement ce srand(time(NULL)).

Merci pour ta réponse MisterFreez.