__FICHIER__ macro montre chemin d'accès complet

La norme MACRO prédéfinie __FICHIER__ disponible en C montre le chemin complet vers le fichier. Est-il un moyen de court-circuiter le chemin? Je veux dire au lieu de

/full/path/to/file.c

Je vois

to/file.c

ou

file.c
  • Il serait vraiment bien de trouver un préprocesseur seule solution. J'ai peur que les suggestions basées sur les opérations de la chaîne sera exécutée au moment de l'exécution.
  • Depuis que vous utilisez gcc, je pense que vous pouvez changer ce __FILE__ contient en changeant le nom de fichier que vous passer sur la ligne de commande. Ainsi, au lieu de gcc /full/path/to/file.c, essayez cd /full/path/to; gcc file.c; cd -;. Bien sûr, il y a un peu plus à lui que cela, si vous êtes en s'appuyant sur gcc du répertoire courant pour le chemin de sortie ou l'emplacement du fichier. Edit: le gcc docs suggèrent que c'est le chemin d'accès complet, et non le nom de fichier d'entrée argument, mais ce n'est pas ce que je vois, pour gcc 4.5.3 sur Cygwin. Donc, vous pouvez aussi bien l'essayer sur Linux et voir.
  • vous êtes PARTOUT avec vos connaissances!
  • GCC 4.5.1 (construit pour arm-none-eabi spécifiquement) utilise le texte exact du nom de fichier sur la ligne de commande. Dans mon cas, c'était l'IDE est la faute de pour en invoquant GCC avec tous les noms de fichier pleinement qualifié, au lieu de mettre le répertoire courant quelque part raisonnable (l'emplacement du fichier de projet, peut-être?) ou et configurable à l'aide de chemins d'accès relatifs à partir de là. Je soupçonne que beaucoup de IDEs le faire (surtout sur Windows) de certains de tri de l'inconfort liés à expliquer où le "répertoire est vraiment pour une GUI application.
  • espère que vous lirez ce commentaire. J'ai une situation où je vois __FILE__ imprimé comme ../../../../../../../../rtems/c/src/lib/libbsp/sparc/leon2/../../shared/bootcard.c et je veux savoir où gcc compilé le fichier tel que ce fichier est relativement situé comme il est montré.
  • Cette question n'est pas dupe de la une. Pour l'un, liés l'un est sur le C++, et les réponses par conséquent plonge dans C++ macro ésotérisme. Deuxièmement, il n'y a rien dans OP question qui exige une macro solution. Il ne solennellement indique un problème et demande une question ouverte.
  • Je sais ce poser est ans, mais ce sera possible de le faire au moment de la compilation GCC 9 (je ne pense pas que qu'il fait sur les 8 de la branche, mais je peux me tromper).
  • Vous pouvez utiliser le basename() fonction pour extraire juste l'actuel nom de fichier pour l'impression
  • Avec au moins le C++11 vous pouvez le faire au moment de la compilation au lieu de dans le préprocesseur: stackoverflow.com/questions/8487986/file-macro-shows-full-path/...
  • Pour info voici un 4 ligne c++11 solution à l'aide de la compilation constexpr testé avec g++ version 4.8.5: stackoverflow.com/a/38237385/52074

InformationsquelleAutor mahmood | 2011-12-13