Artigo: 126717 - Última revisão: terça-feira, 5 de Julho de 2005 - Revisão: 1.1

PROBLEMA: Erro C1853 gerado por mistura C e C++ ficheiros

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 | Reduzir tudo

Sintomas

Quando cria projectos de Visual C++ que incluem ficheiros de C e C++ e que utilizam cabeçalhos de pré-compilados, poderá receber a seguinte mensagem de erro:
<filename>erro fatal C1853: '<nomedoficheiro>' não é um ficheiro de cabeçalho pré-compilada
criados com este compilador

Causa

O compilador tenta utilizar um cabeçalho de pré-compilado gerado por um compilador C++ num ficheiro de origem C. Isto pode acontecer quando "Utilizar por ficheiro de cabeçalhos pré-compilada" é utilizado com C e C++ código de origem de um projecto.

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

A ajuda de mensagem de erro do Visual C++ versão 2.x para C1853 pode ser enganadora. Implica que o problema ocorre apenas quando misturar ficheiros .PCH gerados com compiladores 16-bit e 32 bits. Frequentemente, no entanto, isto pode ocorrer quando criar um projecto depois de adicionar um ficheiro de origem C a um projecto C++ puro, que utiliza o "por ficheiro utilização de cabeçalhos Precompiled." (A ajuda online do Visual C++ versão 4.0 incorpora correctamente estas informações por indicando esse erro fatal C1853 "pode ser causado por utilizando um ficheiro C++ pré-compilado com código C.")

Resolução

Este problema pode ser resolvido de várias formas dependendo da situação:

Resolução

Para os projectos com um ficheiro de origem C único e múltiplos C++ origem de ficheiros (ou vice-versa), utilize os seguintes passos para desactivar a pré-compilados cabeçalhos para o ficheiro de origem único:

  1. Para o destino actual, abrir a caixa de diálogo Definições do Project e seleccione a secção de pré-compilada cabeçalhos em separador C/C ++.
  2. Seleccione o ficheiro C da árvore de projecto no painel da esquerda.
  3. Para o Visual C++ versão 2.x, desactive a caixa de verificação Utilizar ficheiro de .PCH nos ficheiros por utilizar de pré-compilada cabeçalhos. Para o Visual C++ versão 4.0, 5.0 e 6.0, seleccione não utilizando o pré-compilada botão de opção de cabeçalhos.
  4. Guarde as novas definições e criar o projecto.

Resolução II

Para os projectos com C e C++ vários ficheiros de origem, utilize os seguintes passos para desactivar a pré-compilados cabeçalhos para um conjunto de procedimento de ficheiros de origem:

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

  1. Para o alvo actual, crie um novo grupo, escolhendo o item de menu Project novo grupo.
  2. Mova os ficheiros de origem C para o novo grupo.
  3. Abra as definições do Project e seleccione a secção de pré-compilada cabeçalhos com o diálogo de separador C/C ++.
  4. Seleccione o novo grupo na árvore de projecto no painel da esquerda.
  5. Desactivar a caixa de verificação Utilizar ficheiro de .PCH na pré-o ficheiro por utilização de compilada cabeçalhos.
  6. Guarde as novas definições e criar o projecto.
Isto desactivará a pré-compilados cabeçalhos para um conjunto de ficheiros de origem. No entanto, os ficheiros de origem em adições subsequentes a este grupo podem ter a utilização PCH desactivada conforme definições anteriores do ficheiro.

Com o Visual C++ versão 4.0 , os grupos não são suportados. Para desactivar a utilização de cabeçalhos de pré-compilados para um grupo de ficheiros de origem, siga os passos de resolução que, mas no passo 2 premir a tecla CRTL ao seleccionar cada ficheiro.

Resolução III

Para os projectos não requer pré-compilados cabeçalhos, siga os passos de resolução que, mas no passo 2 seleccionar todos os alvos da árvore de projecto no painel da esquerda.

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

  1. Crie um subprojecto do tipo "Biblioteca estática".
  2. Inserir ficheiros .C este subprojecto.
  3. Elimine os ficheiros .C do projecto de nível superior.
  4. Adicione o biblioteca resultante ou .obj ficheiros na linha de ligação para o projecto de nível superior.
Isto irá permitir-lhe especificar um cabeçalho de pré-compilado para o projecto de nível superior (.CPP ficheiros) e um cabeçalho de pré-compilado diferente para o subprojecto (.C ficheiros).

Ponto Da Situação

Este comportamento ocorre por predefinição.

Mais Informação

Visual C++ versão 2.0 permite apenas um ficheiro de cabeçalho pré-compilada por destino num projecto. Este ficheiro é denominado PROJNAME.PCH por predefinição em que PROJNAME é o nome do projecto. Isto pode ser alterado no controlo de edição Project opções das definições de destino utilizando a opção /fp (por exemplo, "/fp MYNAME.PCH").

Este ficheiro de cabeçalho pré-compilada (.PCH) pode ser gerado utilizando o automático ou por ficheiro utilizar sistema tal como apresentado na secção pré-compilada cabeçalhos das definições do separador diálogo projecto C/C ++.

A opção de PCH automático (opção /YX) gera um ficheiro .PCH quando o ficheiro .PCH actual é inválido ou quando o ficheiro de cabeçalho é actualizado. Ficheiros .PCH inválidos incluem os gerados pelo outro compilador (C ou C++) ou aqueles que contêm um conjunto de ficheiros de cabeçalho diferente do conjunto de encontrado na origem de. Esta opção guarda melhor tempo de compilação se todos os ficheiros de origem que utilizam esta opção contêm um conjunto de ficheiros de cabeçalho idêntico e são de um tipo (C ou C++) ou se apenas um ficheiro do projecto, normalmente, é criado.

A eficiência desta opção pode depender de ordem de compilação. Intercalagem C e C++ ficheiros de origem da ordem de compilação sempre volta a gerar um novo ficheiro .PCH. Criar um projecto depois de actualizar um ficheiro C quando a última compilação resultou num ficheiro .PCH C++, regenera o ficheiro .PCH.

A opção ficheiro por utilizar PCH gera um ficheiro .PCH sempre que for compilado num ficheiro de origem com a caixa de verificação 'Criar .PCH ficheiro' (opção /Yc) activado. O ficheiro .PCH gerado é utilizado com todos os ficheiros de origem que tenham a caixa de verificação 'Utilizar .PCH ficheiro' (opção /Yu) activada. O compilador não gerar um novo ficheiro .PCH se aquele gerado é inválido; em vez disso, fornece uma das seguintes duas mensagens:
  • Se o PCH foi gerado pelo compilador C++:
    <filename>erro fatal C1853: '<nomedoficheiro>' não é um ficheiro pré-compilada cabeçalho criado com este compilador
  • Se o PCH tiver sido criado por um código de origem que contém um conjunto diferente de inclui:
    <filename>erro fatal C1852: '<nomedoficheiro>' não é um ficheiro de cabeçalho de pré-compilada válido
Nota : é possível especificar mais do que uma origem para criar um .PCH ficheiro, no entanto Microsoft não o recomende. Nem a Microsoft recomenda que misturar os dois sistemas PCH uma vez que misturar os dois pode resultar em erros descritos acima.

Versões anteriores do Visual C++ (1.51 1.50 e 1.1) permitido que separado pré-compilada ficheiro de cabeçalho para C e C++ ficheiros de origem. Porque é limitado a apenas um PCH Visual C++ versão 2.0, não é possível utilizar ficheiros de cabeçalho de pré-compilada diferente para C e C++ ficheiros. Migrar esse projecto sobre originarão a seguinte mensagem ao tentar criar o projecto:
Os ficheiros de origem "file1.c" e "file2.cpp" são ambos configurados para
produzir o ficheiro de saída "proj.pch". O projecto não pode ser criado.

Referências

Para mais informações sobre cabeçalhos pré-compilados, verifique procure "Pré-compilada cabeçalhos" Books Online.

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )