Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С и С++ в одном проекте, Подскажите и объясните 
V
    Опции темы
zhenium
Дата 7.11.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.10.2006

Репутация: нет
Всего: 2



Говорю сразу: описание проблемы будет длинным, где-то запутанным.

Есть среда разработки Borland C++ 3.1.
Пишу проект, состоящий из большого количества файлов, причём большинство из них - на обычном С. Некоторые файлы ( по заданию )  нужно написать на С++. Всё бы ничего. Но возникает прорблема: при линковке вылетает ошибка в файле, из которого вызываются фукнкции С++. Причём одна и та же для всех файлов, которые написаны на С++. Таким делом я занимаюсь впервые, поэтому, где капать, не знаю. Может я не так что-то делаю. Подскажите мне или объясните, как этой ошибки можно избежать.

При написании создаётся файл diod.h, в котором прописаны библиотеки С ( stdio.h, stdlib.h, string.h и т.д.), все прототипы функций, включая функции С++.
Каждый файл С++ начинаю со следующего:

Код

#include "diod.h"
#include <iostream.h>

...


В чём я ошибаюсь?

P.S. Если начинать так:

Код

#include "diod.h"
#include <iostream>

using namespace std;
...


то ошибок вылетает вообще куча.

Это сообщение отредактировал(а) zhenium - 7.11.2006, 21:54
PM MAIL   Вверх
vinter
Дата 7.11.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



в bc 3.1 надо так
Код

#include "diod.h"    
#include <iostream.h>    

...



--------------------
Мой блог
PM MAIL WWW   Вверх
JackYF
Дата 8.11.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Возможно, соль в том, что для подсоединения С-кода к С++ нужно отключить декорирование функций...
Попробуй код С++, в котором вызывается С-код, объявлять с помощью extern "C"...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zhenium
Дата 9.11.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.10.2006

Репутация: нет
Всего: 2



>>> JackYF

Если можно, то поясни, как это сделать,т.к. я с таким впервые встретился. 


>>> Vinter 

Делал, как ты сказал. Всё равно вылетает ошибка линковщика, связанная именно с С++файлом. Я уже подумал, может нужно как-то сам Borland настраивать?


Ребята, помогите! Времени всё меньше остаётся...
PM MAIL   Вверх
bilbobagginz
Дата 9.11.2006, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



тов. zhenium, превед.
Си - это язык программирования разработанный Д.Ричи и Б.Керниганом.
Си++ - это другой язык программирования, разработанный командой под лидерством одного дяди со смешным скандинавским именем Бьярн Страуструп, синтаксис которого является расширением языка Си.

Среда Borland неплоха тем, что в ней нет особых строгостей с конвенциями языков Си/Си++. Можно писать проект как будто на С, но при этом ввод/вывод делать через cin/cout  smile 
Среда Borland плоха тем, что по умолчанию она компилирует весь код как С++, т.е. фактически всё что пишется на С, компилится на С++.

чтобы работать на чистом Си, нужно обозначить где-то в настройках сборки проекта, что собирать код нужно по стандарту ANSI C, или другой стандартный Си ( какой нибудь там ISO98 ), т.е. НЕ НА СИ++.
в Си++ не объявляют:
#include <iostream.h>
уже давно это делается так:
#include <iostream>

Далее: если писался проект ногами и через одно место, т.е. сказав, что на С, а на самом деле на С++, но просто без использования классов в программе, и т.д., то и собирать нужно его как С++.
Но, если часть проекта на самом деле на С (на т.с. "чистом Си"), и представляет из себя библиотеку и т.п., то обращаться к её функциям нужно так:
Код

/** 
      допустим: есть либа на Си, и с ней нужно связываться, и её функции вызывать.
       либа - myClib.o уже собрана ( или её собирают каждую сборку проекта, что ТУПО )
       есссно есть файл-заголовок (header) по имени "myClib.h".
      допустим, что внутри файла "myClib.h" объявлена только 1 функция:
      void f(void);
*/

// теперь у себя, в пользовательском коде на C++:
extern "C" {
#include "myClib.h"
}

// . . . .
// потом какие-то другие инициализации, включения и т.д. и т.п.
// . . . .
// а потом вызовы из либы C кода идут как обычно:

f();


в одном и том же файле не практикуется использование обоих языков, т.е. реализация методов C++ на C, и т.д.

Всё.





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
zhenium
Дата 9.11.2006, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 16.10.2006

Репутация: нет
Всего: 2



Ну вроде понял, попробую так и сделать. На всякий случай внесу ясность. Всего в проекте 13 функций. Из них 9 - на чистом Си ( также и заголовочный, main() и иже с ними ), остальные 4 - надо написать с использованием ввода/вывода С++. Вот тут-то тупик и появляется...

Добавлено @ 01:29 
Она заработала!!!
Спасибо вам всем огромное за помощь!!!
Всё крылось как раз-таки в extern "C". Теперь на долго запомню!!!
Без вас бы не справился!!!
Спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.