FAQ:WinAPI VCPP:использование С и С++ в одном проекте — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Новая: === Возможно ли использование файлов чистого С и С++ в одном проекте? Если да, то каковы должны быть наст...)
 
м
Строка 1: Строка 1:
 
=== Возможно ли использование файлов чистого С и С++ в одном проекте? Если да, то каковы должны быть настройки компилятора? А то ругается на Unexpected end of file while looking for precompiled header directive.  ===
 
=== Возможно ли использование файлов чистого С и С++ в одном проекте? Если да, то каковы должны быть настройки компилятора? А то ругается на Unexpected end of file while looking for precompiled header directive.  ===
  
Компилятор распознает язык по расширению файла и устанавливает на весь файл. Нельзя часть файла компилировать как С, а другую как С++. Для того, чтобы функции Си вызывать в С++, а функции С++ в Си, их надо декларировать для С++ как
+
Компилятор распознает язык по расширению файла и устанавливает на весь файл. Нельзя часть файла компилировать как С, а другую как С++. Для того, чтобы функции Си вызывать в С++, а функции С++ в Си, их надо декларировать для С++ как extern "C".
  
 
<syntaxhighlight lang="cpp">
 
<syntaxhighlight lang="cpp">
extern "C"
 
 
#ifdef __cplusplus
 
#ifdef __cplusplus
 
extern "C"
 
extern "C"

Версия 20:55, 30 сентября 2008

Возможно ли использование файлов чистого С и С++ в одном проекте? Если да, то каковы должны быть настройки компилятора? А то ругается на Unexpected end of file while looking for precompiled header directive.

Компилятор распознает язык по расширению файла и устанавливает на весь файл. Нельзя часть файла компилировать как С, а другую как С++. Для того, чтобы функции Си вызывать в С++, а функции С++ в Си, их надо декларировать для С++ как extern "C".

#ifdef __cplusplus
extern "C"
{
#endif
 
int func1(int );
int func2(int );
int func3(int );
 
#ifdef __cplusplus
}
#endif

Возможно, надо стереть *.pch файл и собрать снова. Также в настройках компилятора можно попробовать отключить предкомпиленные заголовки для конкретного файла.

  "C/С++" -> "Precompiled Header"

Правда перекомпиляция будет длится немного дольше.

Или можно подключить в файлах stdafx.h (тогда не придется отключать "use precompiled header").