Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
1

Использование C++ кода внутри программы на C: какие есть варианты?

09.02.2012, 00:57. Просмотров 5675. Ответов 40
Метки нет (Все метки)

Есть программа на C++, и в ней кое-какие нужные функции, которые хотелось бы использовать в программе на C. Переписывать заново функции с С++ на С не хочется, какие есть альтернативные пути решения?
С точки зрения дизайна кода звучит это довольно дико, обычно всё наоборот. Может, есть какие-то флаги для линкера, чтобы он мог слинковать две единицы трансляции как надо?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2012, 00:57
Ответы с готовыми решениями:

Замена Visual Studio 2015: подскажите, какие есть варианты
В общем, нужно скомпилировать проект который написан под VS2015. Скомпилить нужно в винде (32 и...

Использование кода символа внутри строки?
Как должна выглядеть стока, содержащая символ с определённым кодом? Можно как то вместо...

Подскажите какие платные есть варианты для встроенного редактора кода?
Необходимо в свое приложение включить редактор кода. Нашел пока два варианта:...

Какие есть способы вычисления регистра EIP внутри программы?
Подскажите пожалуйста какие есть способы вычисления регистра EIP внутри программы, кроме такого:...

40
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 11:34 21
Чё-то мне подсказывает что это синтаксически неверный код.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 11:57 22
kravam, для С++ - да. Для С - нисколько.
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 12:09 23
Сдаётся мне, что это синтаксически неверный код как для С, так и для С++; по умолчанию предполагается разговор о синтаксически верных кодах, не?

Добавлено через 2 минуты
Evg, не раз замечено уже: ты задание дашь, а чё к чему не объяснишь. Только гадать остаётся.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 12:21 24
kravam, и что же тут синтаксически неверного для С?
http://liveworkspace.org/code/... f829973660
http://liveworkspace.org/code/... f6b6c5ecb6

Цитата Сообщение от kravam Посмотреть сообщение
Только гадать остаётся
Я вот почему-то сразу понял, к чему этот код был дан. В том посте даже комментарий на ваш пост был. И как тут не догадаться?
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 12:33 25

А кто разрешал добавить main?

+++++++++++++++++++++++++++++++++++

А вообще это не компилится не так:
C++
1
g++ main.cpp
не так:

C++
1
gcc main.c
C++
1
2
3
4
5
6
7
8
9
g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=e:/dev-cpp_nomingw/bin/../libexec/gcc/mingw32/4.6.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.1/configure --enable-languages=c,c++,fortran,objc,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp -
-disable-win32-registry --enable-libstdcxx-debug --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
Thread model: win32
gcc version 4.6.1 (GCC)
Так что если мы говорим: вот код на языке C, и вот он компилится (не компилится) как C++, то разговор не сдвинулася с мёртвой точки, ибо я не вижу кода на языке С, компилящегося как код на языке С!
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 12:34 26
kravam, слив засчитан.
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 12:35 27
Слив-то сливом, а код ваш не компилится не так, не эдак!
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 12:43 28
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
silent@silent-VirtualBox:~/Рабочий стол$ cat main.c
int new(int class, int throw)
{
    return class + throw;
}
 
int main(void)
{
    new(1, 2);
     
    return 0;
}
silent@silent-VirtualBox:~/Рабочий стол$ gcc -pedantic main.c -o main
silent@silent-VirtualBox:~/Рабочий стол$ ./main
silent@silent-VirtualBox:~/Рабочий стол$ g++ -pedantic main.c -o main
main.c:1:5: error: expected unqualified-id before ‘new’
main.c: In function ‘int main()’:
main.c:8:14: error: expected type-specifier before ‘;’ token
main.c:8:14: error: no matching function for call to ‘operator new(unsigned int, int, int)’
main.c:8:14: note: candidate is:
<built-in>:0:0: note: void* operator new(unsigned int)
<built-in>:0:0: note:   candidate expects 1 argument, 3 provided
silent@silent-VirtualBox:~/Рабочий стол$
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 12:55 29
ВЫ можете чисто и честно нормальным русским языком объяснить, чё вы хотите показать? Я в очередной раз вижу, что код этот не компилится. По-моему, это подтверждает мои слова, что этот код не компилится. Как специально путаете.
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 12:59 30
kravam, и где же он не компилируется?
Строка 13: компиляция С-компилятором gcc. Ни одной ошибки (с ключом pedantic).
Строка 14: запуск также проходит успешно.
Делаем вывод: код успешно компилируется С-компилятором.
Строка 15: компиляция С++-компилятором g++. Ошибки.
Делаем вывод: код не компилируется С++-компилятором.
Делаем общий вывод: код, который может быть скомпилирован С-компилятором, не всегда может быть скомпилирован С++-компилятором.
Таким образом ваше высказывание опровергнуто.
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 13:12 31
silent_1991, а при компиляции g++ расширение менять на cpp не пробовали? попробуйте
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.02.2012, 13:16 32
kravam, Вы издеваетесь? На кой чёрт менять расширение на cpp, если я уже скомпилировал код С-компилятором. Т.е. уже опроверг ваше "код не компилится ни так, ни так".
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
10.02.2012, 13:31 33
А, да, прошу прощения, я всегда думал, что C++ более "развязен" чем C
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
10.02.2012, 13:43 34
мне больше нравится такой пример

C
1
2
3
4
5
6
7
8
9
10
void f()
{
   printf ("hello world!");
}
 
int main()
{
   f (1, 1, 1);
   return 0;
}
или такой

C
1
2
3
4
5
6
7
typedef struct {} type;
 
int main()
{
   type* pType = malloc (sizeof(type));
   return 0;
}
успешной сборки на с++
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
12.02.2012, 13:09 35
Цитата Сообщение от kravam Посмотреть сообщение
Evg, не раз замечено уже: ты задание дашь, а чё к чему не объяснишь. Только гадать остаётся
В своё время Платон сделал одно интересное наблюдение. Человеку можно до потери пульса объяснять, но всё равно не объяснить, потому что человек уверен в своей собственной правоте и не хочет слушать ничего другого. То бишь "чукча не читатель, чукча писатель". Но при этом человеку можно задать вопрос, ответив на который со своей точки зрения, он получит заведомо противоречивый ответ. Таким образом человеку можно по крайней мере показать, что он не прав в своих идеях.

В твоём случая я давно наблюл, что ты ничерта не читаешь, что тебе пишут. А потому самый простой способ довести до тебя, что ты неправ - это задать тебе вопрос, ответив на который ты увидишь, что твои соображения были неправильными. Чтобы уяснить истину, тебе нужно либо немного пораскинуть мозгами, либо тупо ещё раз перечитать всю тему, потому что ответ на поставленный вопрос уже не раз был озвучен.
1
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
12.02.2012, 13:40 36
Цитата Сообщение от Evg Посмотреть сообщение
В твоём случая я давно наблюл, что ты ничерта не читаешь, что тебе пишут
Обоснуй. А я хоть щас могу обосновать своё утверждение.
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
12.02.2012, 14:00 37
Цитата Сообщение от kravam Посмотреть сообщение
Обоснуй. А я хоть щас могу обосновать своё утверждение.
эта тема и десяток другиъ
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
12.02.2012, 14:08 38
Несерьёзно.
0
Evg
Эксперт CАвтор FAQ
21117 / 8133 / 628
Регистрация: 30.03.2009
Сообщений: 22,448
Записей в блоге: 30
12.02.2012, 22:16 39
Цитата Сообщение от kravam Посмотреть сообщение
Обоснуй. А я хоть щас могу обосновать своё утверждение.
Цитата Сообщение от kravam Посмотреть сообщение
Несерьёзно.
Я не вижу смысла что-то обосновывать человеку, который спорит с очевидными вещами. Ты меня спросил, почему я тебе задаю вопросы, я ответил. Принимаешь ты мой ответ или нет - дело твоё. Так же не понимаю, что ты собрался обосновать
0
быдлокодер
1718 / 905 / 106
Регистрация: 04.06.2008
Сообщений: 5,612
12.02.2012, 23:14 40
Не отвечать за свои слова это не по-пацански
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.02.2012, 23:14

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

скажите какие есть программы для построения блок схем из кода???
скажите какие есть программы для построения блок схем из кода???

Посоветуйте, какие есть варианты
Нужно организовать автоматический обмен данными справочника &quot;Сотрудники&quot; между Бухгалтерией и ЗУП....

Какие варианты кода не вызовут ошибку компиляции?
Какие варианты кода не вызовут ошибку компиляции? Вариант 1 class Parent...

Какие есть варианты в Environment.Exit()?
Возможно глупый вопрос, но какие есть коды в Environment.Exit(код)? Что они делают? Пример я знаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.