FAQ:WinAPI VCPP:использование С и С++ в одном проекте — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: === Возможно ли использование файлов чистого С и С++ в одном проекте? Если да, то каковы должны быть наст...) |
RXL (обсуждение | вклад) м («FAQ: WinAPI VCPP: использование С и С++ в одном проекте» переименована в «FAQ:WinAPI VCPP:использование С и С++ в одном проекте») |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 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"> | ||
− | |||
#ifdef __cplusplus | #ifdef __cplusplus | ||
+ | |||
extern "C" | extern "C" | ||
{ | { | ||
+ | |||
#endif | #endif | ||
Строка 15: | Строка 16: | ||
#ifdef __cplusplus | #ifdef __cplusplus | ||
+ | |||
} | } | ||
+ | |||
#endif | #endif | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия на 18:54, 5 октября 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").