Sin embargo, una pregunta un poco extraña, si no recuerdo mal, el código fuente de C ++ no requiere un sistema de archivos para almacenar sus archivos.
Tener un compilador que escanee documentos escritos a mano a través de una cámara sería una implementación conforme. Aunque prácticamente no tiene mucho sentido.
Sin embargo, C ++ 20 ahora agrega la ubicación de origen con file_name
. ¿Implica esto ahora que el código fuente siempre debe almacenarse en un archivo?
__FILE__
. La clasesource_location
solo le permite obtenerla en el sitio de llamada de función.<iostream>
que pueden no ser archivos (si ve lo que quiero decir), ¿no los archivos escritos por los desarrolladores?Respuestas:
No, el código fuente no tiene que provenir de un archivo (ni ir a un archivo).
Puede compilar (y vincular) C ++ completamente dentro de una tubería, colocando su compilador en el medio, por ejemplo
y ha sido así durante décadas. Ver también:
La introducción de
std::source_location
en C ++ 20 no cambia esta situación. Es solo que algún código no tendrá una ubicación de origen bien definida (o puede estar bien definida, pero no muy significativa). En realidad, diría que la insistencia en definir elstd::source_location
uso de archivos es un poco miope ... aunque para ser justos, es solo un equivalente sin macros__FILE__
y__LINE__
que ya existe en C ++ (y C).@ HBv6 señala que si imprime el valor de
__FILE__
al compilar usando GCC desde el flujo de entrada estándar:ejecutando las impresiones ejecutables resultantes
<stdin>
.El código fuente incluso puede provenir de Internet.
@Morwenn señala que este código:
funciona en GodBolt (pero no funcionará en su máquina; ningún compilador popular lo admite).
¿Eres abogado de idiomas? Ok, entonces consultemos el estándar.
La pregunta de si las fuentes del programa C ++ deben provenir de archivos no se responde claramente en el estándar del lenguaje. Mirando un borrador del estándar C ++ 17 (n4713), la sección 5.1 [lex.separate] dice:
Por lo tanto, el código fuente no se guarda necesariamente en un archivo en sí, sino en una "unidad llamada archivo fuente". Pero entonces, ¿de dónde vienen las inclusiones? Uno asumiría que provienen de archivos con nombre en el sistema de archivos ... pero eso tampoco es obligatorio.
De todos modos,
std::source_location
no parece cambiar esta redacción en C ++ 20 ni afectar su interpretación (AFAICT).fuente
Incluso antes de C ++ 20, el estándar tenía:
La definición es la misma para
source_location::file_name
.Como tal, no ha habido un cambio con respecto al soporte para implementaciones sin sistema de archivos en C ++ 20.
El estándar no define exactamente qué significa "archivo de origen", por lo que si se refiere a un sistema de archivos puede depender de la interpretación. Presumiblemente, podría ser adecuado que una implementación produzca "la nota manuscrita que me entregó en ese momento" si eso realmente identifica el "archivo fuente" en esa implementación del lenguaje.
En conclusión: Sí, las fuentes se denominan "archivos" según el estándar, pero no se especifica qué es un "archivo" y si hay un sistema de archivos involucrado.
fuente
scanner-c++
regresar "Armario izquierdo, tercer cajón, cuarta carpeta con pestañas rojas, página 17" .