#c #c
#c #c
Вопрос:
я запускаю код c в vs2008. Мне было любопытно, могу ли я смешать этот код с кодом c
Комментарии:
1. Я думал, что в Visual Studio в любом случае есть только компилятор C ; у него нет компилятора C. Итак, если ваш код вообще компилируется, то вы уже в порядке.
2. @Kerrek SB: У него есть
/TC
флаг. Не идеальный режим C, но достаточно близкий (IIRC использует общее подмножество C и C )
Ответ №1:
Короткий ответ — да. Однако есть некоторые нюансы.
C обычно поддерживает большое подмножество C. Это означает, что вы можете использовать практически все, что доступно на C (например, функции, библиотеки и т.д.) Из кода C . С этого момента у вас есть два варианта: простой и немного сложнее.
Вариант № 1 — Использовать компилятор C .
Просто обработайте свой код как C . Проще говоря — используйте компилятор C .
Вариант № 2 — смешать C и C .
Вы можете написать свой код на C и скомпилировать его с помощью компилятора C . Используйте C-подобный C , где вам нужно использовать компоненты C . Например, у вас может быть настройка, подобная следующей:
-
head1.h — объявления ваших функций C. Например:
void foo1();
-
header2.h — объявления ваших функций C, которые намерены использовать код C .
#ifdef __cplusplus extern "C" { #endif void foo2 (); #ifdef __cplusplus } #endif
И два исходных файла, один C и один C :
-
source1.c
#include "header1.h" #include "header2.h" void foo1 () { foo2 (); /* Call a C function that uses C stuff */ }
-
source2.cpp
#include <vector> #include "header2.h" #ifdef __cplusplus extern "C" { #endif void foo2 () { std::vector<int> data; /// ... etc. } #ifdef __cplusplus } #endif
Конечно, вам придется скомпилировать файлы «cpp» с помощью компилятора C (но вы все равно можете скомпилировать файлы «c» с помощью компилятора C) и связать вашу программу со стандартной средой выполнения C .
Например, аналогичный (но немного более сложный) подход используется Apple. Они смешивают C и Objective-C, вызывая гибридный Objective-C .
Обновить:
Если вы решите компилировать код C как C , я рекомендую вам потратить некоторое время на изучение различий между C и C . Бывают случаи, когда код может быть как легальным C, так и C , но давать разные результаты. Например:
extern int T;
int main()
{
struct T { int a; int b; };
return sizeof(T) sizeof('T');
}
Если это программа на C, то правильный ответ — 8. В случае C ответ равен 9. Я объяснил это более подробно в своем сообщении в блоге здесь.
Надеюсь, это поможет. Удачи!
Ответ №2:
Если вы компилируете свой код с использованием компилятора C в качестве программы на C , вы можете использовать std::vector
.
Если вы компилируете свой код с использованием компилятора C в качестве программы на C, то вы не можете.
Это связано с тем, что std::vector
это тип, определенный стандартом C , стандарт C не определяет какой-либо тип как std::vector
.
Простыми словами, компилятор C не понимает, что std::vector
такое.
Комментарии:
1. Придирка: компилятор тот же; это всего лишь переключатель режимов для переключения между C и C . / Придирка
2. извините за неправильное понимание OP, я удалю свои комментарии.
3. @amit: Неважно, я тоже удалил свой. Счастливый конец. 🙂
Ответ №3:
Есть переключатель для компиляции файлов .c как C (/ TP) . Если вы включите это, вы можете использовать c как C . Имейте в виду, что некоторый код c не будет компилироваться как C без изменений (в основном это связано с приведением типов; c имеет более строгие правила для этого).
Ответ №4:
Если вы взаимодействуете с какой-либо существующей библиотекой C, то вы, конечно, можете использовать C . Если вы компилируете как C, вы не сможете использовать какие-либо функции C , такие как std::vector
.