a.txt
a text
#include "b.txt"
b.txt
b text
Se pré-processarmos os arquivos acima usando cpp -P a.txt
, obteremos a seguinte saída no console:
a text
b text
No entanto, se tentarmos pré-processar usando clang -P a.txt
, receberemos o seguinte erro:
ld: unknown file type in '/Users/myUser/a.txt'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Qual é a diferença entre o comportamento de pré-processamento de clang
e cpp
? Particularmente, qual é a diferença neste caso de uso de arquivos .txt? Tópico aparentemente relacionado , bem como outro especificado para MacOS.
cpp
é um pré-processador.clang
é um compilador que pode invocar um pré-processador antes de compilar seus arquivos de entrada. Você não pode simplesmente usá-los com as mesmas opções de linha de comando.clang
é similar agcc
. Ambos optam-E
por invocar apenas a fase de pré-processamento - e ambos assumem que um arquivo de entrada cujo nome termina com.txt
é destinado ao vinculador.O seguinte funciona no meu sistema. O
-
argumento diz ao comando para ler stdin, para que não veja o.txt
sufixo.O pré-processador usado por
clang
adiciona uma linha extra em branco. Como a saída se destina a ser compilada, geralmente como C ou C++, isso geralmente não importa.O pré-processador C não é realmente um processador de texto de uso geral. Por exemplo, ele divide sua entrada em tokens de pré-processamento , portanto, um apóstrofo solitário provavelmente causará um erro, pois o pré-processador o trata como uma constante de caractere incompleta.