Y at-il un moyen d'obtenir la ligne courante dans le fichier source que vous êtes, comme __LINE__
fait dans C++?Prendre la ligne actuelle du fichier source dans D
5
A
Répondre
9
Eh oui, vous pouvez utiliser __LINE__
. En outre, __FILE__
.
Comme BCS et Jonathan M Davis soulignez dans les commentaires, il y a un cas particulier pour __LINE__
et amis: quand il est utilisé comme valeur par défaut d'un argument ou une fonction modèle, ils décident de l'emplacement de l'appelant, pas la signature du modèle ou de la fonction. C'est génial pour sauver les appelants de devoir fournir cette information.
void myAssert(T)(lazy T expression, string file = __FILE__, int line = __LINE__)
{
if (!expression)
{
// Write the caller location
writefln("Assert failure at %s:%s", file, line);
}
}
Parfait, merci. Je savais qu'ils ne devaient pas aller changer tous les numéros de ligne dans les lignes d'exception quand ils ont modifié un fichier std lib :) –
FWIW: '__LINE__' est pas exactement les mêmes que dans C. Il y a au moins un cas d'angle où c'est différent: s'il est utilisé comme valeur par défaut pour un argument, il se résout à la ligne qui fait l'appel et non à la ligne où la fonction est définie. – BCS
Ce qui est * vraiment * utile lors de la création de fonctions de test où vous voulez que les échecs signalent la ligne de l'appel plutôt que dans la fonction de test. –