Une question un peu étrange, cependant, si je me souviens bien, le code source C ++ ne nécessite pas de système de fichiers pour stocker ses fichiers.
Avoir un compilateur qui scanne les papiers manuscrits via une caméra serait une implémentation conforme. Bien que cela n'ait pratiquement pas beaucoup de sens.
Cependant, C ++ 20 ajoute maintenant l'emplacement source avec file_name
. Cela implique-t-il maintenant que le code source doit toujours être stocké dans un fichier?
__FILE__
. La classesource_location
vous permet simplement de l'obtenir sur le site d'appel de fonction.<iostream>
ceux-ci (si vous voyez ce que je veux dire), pas les fichiers écrits par les développeurs?Réponses:
Non, le code source ne doit pas provenir d'un fichier (ni aller dans un fichier).
Vous pouvez compiler (et lier) C ++ complètement dans un tube, en plaçant votre compilateur au milieu, par exemple
et c'est comme ça depuis des décennies. Voir également:
L'introduction de
std::source_location
dans C ++ 20 ne change pas cet état de fait. C'est juste que certains codes n'auront pas d'emplacement source bien défini (ou il peut être bien défini, mais pas très significatif). En fait, je dirais que l'insistance sur la définition à l'std::source_location
aide de fichiers est un peu myope ... même si, en toute honnêteté, c'est juste un équivalent sans macro de__FILE__
et__LINE__
qui existe déjà en C ++ (et C).@ HBv6 note que si vous affichez la valeur de
__FILE__
lors de la compilation en utilisant GCC à partir du flux d'entrée standard:exécuter les impressions exécutables résultantes
<stdin>
.Le code source peut même provenir d'Internet.
@Morwenn note que ce code:
fonctionne sur GodBolt (mais ne fonctionnera pas sur votre machine - aucun compilateur populaire ne le prend en charge.)
Êtes-vous un avocat spécialisé dans les langues? Ok, alors consultons la norme.
La question de savoir si les sources de programmes C ++ doivent provenir de fichiers n'est pas clairement répondue dans la norme de langage. En regardant un brouillon de la norme C ++ 17 (n4713), la section 5.1 [lex.separate] se lit comme suit:
Ainsi, le code source n'est pas nécessairement conservé dans un fichier en soi, mais dans une "unité appelée fichier source". Mais alors, d'où viennent les includes? On pourrait supposer qu'ils proviennent de fichiers nommés sur le système de fichiers ... mais cela n'est pas non plus obligatoire.
En tout cas,
std::source_location
ne semble pas changer cette formulation en C ++ 20 ni affecter son interprétation (AFAICT).la source
Même avant C ++ 20, la norme avait:
La définition est la même pour
source_location::file_name
.En tant que tel, il n'y a pas eu de changement en ce qui concerne la prise en charge des implémentations sans système de fichiers dans C ++ 20.
La norme ne définit pas exactement ce que signifie «fichier source», donc la question de savoir s'il se réfère à un système de fichiers peut dépendre de l'interprétation. Vraisemblablement, il pourrait être conforme pour une implémentation de produire "la note manuscrite que vous m'avez remise juste à ce moment-là" si cela identifie effectivement le "fichier source" dans cette implémentation du langage.
En conclusion: Oui, les sources sont appelées «fichiers» par la norme, mais ce qu'est un «fichier» et si un système de fichiers est impliqué n'est pas spécifié.
la source
scanner-c++
revenir "Armoire de gauche, troisième tiroir, quatrième dossier à onglets rouges, page 17" .