Uma pergunta um pouco estranha, no entanto, se bem me lembro, o código-fonte C ++ não requer um sistema de arquivos para armazenar seus arquivos.
Ter um compilador que escaneia documentos escritos à mão por meio de uma câmera seria uma implementação adequada. Embora praticamente não faça muito sentido.
No entanto, o C ++ 20 agora adiciona o local de origem com file_name
. Isso significa que o código-fonte deve sempre ser armazenado em um arquivo?
__FILE__
. A classesource_location
apenas permite que você acesse no local da chamada de função.<iostream>
esses podem não ser arquivos (se é que você me entende), não os arquivos escritos por desenvolvedores?Respostas:
Não, o código-fonte não precisa vir de um arquivo (nem ir para um arquivo).
Você pode compilar (e vincular) C ++ completamente dentro de um pipe, colocando seu compilador no meio, por exemplo
e tem sido assim há décadas. Veja também:
A introdução de
std::source_location
em C ++ 20 não muda esse estado de coisas. Acontece que alguns códigos não terão um local de origem bem definido (ou podem ser bem definidos, mas não muito significativos). Na verdade, eu diria que a insistência em definirstd::source_location
usando arquivos é um pouco míope ... embora para ser justo, é apenas um equivalente sem macro__FILE__
e__LINE__
que já existe em C ++ (e C).@ HBv6 observa que se você imprimir o valor de
__FILE__
ao compilar usando GCC a partir do fluxo de entrada padrão:executando as impressões executáveis resultantes
<stdin>
.O código-fonte pode até vir da Internet.
@Morwenn observa que este código:
funciona em GodBolt (mas não funciona em sua máquina - nenhum compilador popular suporta isso).
Você é advogado de línguas? Ok, então vamos consultar o padrão ..
A questão de saber se as origens do programa C ++ precisam vir de arquivos não é respondida claramente no padrão de linguagem. Olhando para um rascunho do padrão C ++ 17 (n4713), a seção 5.1 [lex.separate] diz:
Portanto, o código-fonte não é necessariamente mantido em um arquivo em si, mas em uma "unidade chamada arquivo-fonte". Mas então, de onde vêm as inclusões? Alguém poderia supor que eles vêm de arquivos nomeados no sistema de arquivos ... mas isso também não é obrigatório.
De qualquer forma,
std::source_location
não parece mudar esta redação em C ++ 20 ou afetar sua interpretação (AFAICT).fonte
Mesmo antes do C ++ 20, o padrão tinha:
A definição é a mesma para
source_location::file_name
.Como tal, não houve uma mudança em relação ao suporte para implementações sem sistema de arquivos em C ++ 20.
O padrão não define exatamente o que "arquivo de origem" significa, então se ele se refere a um sistema de arquivos pode ser uma interpretação. Presumivelmente, pode estar em conformidade com uma implementação para produzir "a nota manuscrita que você me deu naquele momento", se isso realmente identificar o "arquivo de origem" nessa implementação da linguagem.
Concluindo: Sim, as origens são chamadas de "arquivos" pelo padrão, mas o que é um "arquivo" e se um sistema de arquivos está envolvido não é especificado.
fonte
scanner-c++
retorno de "Armário esquerdo, terceira gaveta, quarta pasta com abas vermelhas, página 17" .