ID do artigo: 126717 - Última revisão: terça-feira, 5 de julho de 2005 - Revisão: 1.1

PROBLEMA: Erro C1853 gerados por mixagem C e C++ arquivos

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sintomas

Quando você compila projetos Visual C++ que incluir arquivos C e C++ e que usam cabeçalhos pré-compilados, você receberá a seguinte mensagem de erro:
<filename>Erro fatal C1853: '<nomedoarquivo>' não é um arquivo de cabeçalho pré-compilado
criado com esse compilador

Causa

O compilador tenta usar um cabeçalho pré-compilado gerado por um compilador C++ em um arquivo de origem C. Isso pode acontecer quando "Uso por arquivo de cabeçalhos pré-compilados" é usado com código-fonte C e C++ em um projeto.

Não é válido para usar um compilador C++ criado cabeçalho pré-compilado com um arquivo de origem que está a ser compilado pelo compilador C. Nem ele válido para usar um compilador C é criado cabeçalho pré-compilado com um arquivo de origem que está a ser compilado pelo compilador C++.

A Ajuda de mensagem de erro do Visual C++ versão 2.x para C1853 pode ser enganosa. Isso implica que o problema ocorre somente quando mistura .PCH arquivos gerados com os compiladores 16 e 32 bits. Com freqüência, no entanto, isso pode ocorrer ao criar um projeto depois de adicionar um arquivo de origem C a um projeto de C++ puro que usa o "Per-File uso de cabeçalhos Precompiled." (Ajuda online do Visual C++ versão 4.0 corretamente incorpora essas informações informando que erro fatal C1853 "pode ser causado por usando um arquivo C++ pré-compilado com código C.")

Resolução

Esse problema pode ser resolvido de várias maneiras, dependendo da situação:

Resolução,

Para projetos com um arquivo de origem C único e vários C++ fonte de arquivos (ou vice-versa), use as etapas seguintes para desativar cabeçalhos pré-compilados para o arquivo de origem única:

  1. Para o destino atual, abrir a caixa de diálogo Configurações do projeto e selecione a seção Precompiled Headers sob a guia C/C ++.
  2. Selecione o arquivo C na árvore do projeto no painel esquerdo.
  3. Para Visual C++ versão 2.x, desative a caixa de seleção usar .PCH arquivo no arquivo por uso de Precompiled cabeçalhos. Para Visual C++ versão 4.0, 5.0 e 6.0, selecione o não usando pré-compilado botão de opção de cabeçalhos.
  4. Salvar as novas configurações e crie o projeto.

Resolução II

Para projetos com C e C++ vários arquivos de origem, use as etapas seguintes para desativar cabeçalhos pré-compilados para um conjunto de procedimento de arquivos de origem:

com o Visual C++ versão 2.x :

  1. Para o destino atual, crie um novo grupo escolhendo novo grupo de item de menu Project.
  2. Mova os arquivos de origem C para o novo grupo.
  3. Abra as configurações de projeto e selecione a seção de cabeçalhos pré-compilados em caixa de diálogo guia de C/C ++.
  4. Selecione o novo grupo na árvore do projeto no painel esquerdo.
  5. Desativar a caixa de seleção usar .PCH arquivo in o arquivo por uso de Precompiled cabeçalhos.
  6. Salvar as novas configurações e crie o projeto.
Isto desativará a cabeçalhos pré-compilados para um conjunto de arquivos de origem. No entanto, arquivos de origem em adições subseqüentes para esse grupo talvez seja necessário o uso PCH desativado de acordo com as configurações anteriores do arquivo.

Com o Visual C++ versão 4.0 , não há mais suporte para grupos. Para desativar o uso de cabeçalhos pré-compilados para um grupo de arquivos de origem, execute o as etapas de resolução, mas na etapa 2 mantenha pressionada a tecla CTRL enquanto seleciona cada arquivo.

Resolução III

Para projetos não requerem cabeçalhos pré-compilados, siga as etapas de resolução, mas na etapa 2, selecione todos os destinos da árvore de projeto no painel esquerdo.

Resolução IV (VC 4.x e 5.0)

  1. Crie um subprojeto do tipo "Static Library".
  2. Insira os arquivos .C este subprojeto.
  3. Exclua os arquivos .C do projeto de nível superior.
  4. Adicione o resultante biblioteca ou arquivos .obj na linha de vínculo para o projeto de nível superior.
Isso permitirá que você especifique um cabeçalho pré-compilado para o projeto de nível superior (.CPP arquivos) e um cabeçalho pré-compilado diferente para o subprojeto (.C arquivos).

Situação

Esse comportamento é por design.

Mais Informações

O Visual C++ versão 2.0 permite que somente um arquivo de cabeçalho pré-compilado por destino em um projeto. Este arquivo é nomeado PROJNAME.PCH por padrão onde NOMEDOPROJETO é o nome do projeto. Isso pode ser alterado no controle de edição Project Options das configurações de destino usando a opção /fp (por exemplo, "/fp MYNAME.PCH").

Este arquivo de cabeçalho pré-compilado (.PCH) pode ser gerado usando o automático ou por arquivo usar sistema conforme mostrado na seção de configurações de projeto da C/C ++ guia diálogo cabeçalhos pré-compilados.

A opção PCH automática (opção /YX) gera um arquivo .PCH quando o arquivo .PCH atual é inválido ou quando o arquivo de cabeçalho é atualizado. Arquivos .PCH inválidos incluem aquelas geradas por outro compilador (C ou C++) ou aqueles que contêm um conjunto diferente de arquivos de cabeçalho do conjunto encontrado na fonte de. Essa opção salva ideal tempo de compilação se todos os arquivos de origem usar essa opção contêm um conjunto idêntico de arquivos de cabeçalho e de um tipo (C ou C++) ou se apenas um arquivo de projeto geralmente é criado.

A eficiência dessa opção pode depender de ordem de compilação. Arquivos de origem C e C++ na ordem de compilação de intercalação sempre gera novamente um novo arquivo .PCH. Criando um projeto depois de atualizar um arquivo C quando a última compilação resultou em um arquivo .PCH C++, gera novamente o arquivo .PCH.

A opção de arquivo por usar PCH gera um arquivo .PCH sempre que um arquivo de origem com a caixa de seleção 'Criar .PCH arquivo' (opção /Yc) habilitado é compilado. O arquivo .PCH gerado é usado com todos os arquivos de origem que têm a caixa de seleção 'Usar .PCH arquivo' (opção /Yu) ativada. O compilador não gerar novamente um novo arquivo .PCH se aquele gerado é inválido; em vez disso, ele fornece uma das seguintes mensagens de dois:
  • Se o PCH foi gerado pelo compilador C++:
    <filename>Erro fatal C1853: '<nomedoarquivo>' não é um arquivo de cabeçalho pré-compilado criado com esse compilador
  • Se o PCH foi gerado por um código-fonte que contém um conjunto diferente de inclui:
    <filename>Erro fatal C1852: '<nomedoarquivo>' não é um arquivo de cabeçalho pré-compilado válido
Observação : é possível especificar mais de uma fonte para criar um .PCH arquivo, no entanto Microsoft não recomende isso. Nem é a Microsoft recomenda que você misturar os dois sistemas PCH porque misturar os dois pode resultar em erros descritos acima.

Versões anteriores do Visual C++ (1.51, 1.50 e 1.1) permitem que um separado pré-compilado arquivo de cabeçalho para C e C++ arquivos de origem. Como o Visual C++ versão 2.0 é limitado a apenas um PCH, não é possível usar arquivos de cabeçalho pré-compilado diferente para o C e C++ arquivos. Portar tal projeto sobre resultará na seguinte mensagem ao tentar criar o projeto:
Os arquivos de origem "file1.c" e "file2.cpp" ambos configurados para
produzir o arquivo de saída "proj.pch". O projeto não pode ser criado.

Referências

Para obter mais informações sobre cabeçalhos pré-compilados, procure em "Cabeçalhos pré-compilados" nos manuais online do.

A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbmt kbcompiler kbcpponly kberrmsg kbprb KB126717 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 126717  (http://support.microsoft.com/kb/126717/en-us/ )