Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2

Почему в билдер extern "C" не работает?

25.02.2012, 12:09. Показов 5973. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем, у меня вопрос, почему в билдер(XE2) extern linkage не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm47::Button2Click(TObject *Sender)
{
#if defined __cplusplus
       extern "C"{
#endif
        //тут код C
 
#if defined __cplusplus
       }
#endif
}
И выпадают ошибки:
[BCC32 Error] Unit47.cpp(170): E2215 Linkage specification not allowed
[BCC32 Error] Unit47.cpp(170): E2040 Declaration terminated incorrectly
[BCC32 Error] Unit47.cpp(177): E2139 Declaration missing ;
[BCC32 Error] Unit47.cpp(177): E2190 Unexpected }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2012, 12:09
Ответы с готовыми решениями:

Почему прога не работает в С++ билдер
struct Book { AnsiString Avtor; // Данные о авторе книги AnsiString Nazvanie; // Данные о названии...

Жуткий билдер не понятно что творит и почему
Народ объясните пожалуйста ничего понять не могу почему я объявляю переменные int mazda=0 и потом в процессе выполнения программы оно...

Не работает глобальный идентификатор extern
У меня два файла : main.cpp func.cpp во втором файле обьявлена и инициализирована extern int a = 3; Почему в первом файле она...

14
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
25.02.2012, 12:42
вы неверно понимаете назначение данной конструкции. она употребляется с прототипами функций написанных на С. для кода она не употребляется - код С вы можете употреблять в программах без ограничений.
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
25.02.2012, 21:51  [ТС]
vxg,
Да да ето я понимею, но когда питаюс обявыть прототипы, да и без них выдает ошибок
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
25.02.2012, 23:36
каких ошибок? может не в этом дело
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
26.02.2012, 04:57  [ТС]
vxg,
[BCC32 Error] Unit47.cpp(170): E2215 Linkage specification not allowed
[BCC32 Error] Unit47.cpp(170): E2040 Declaration terminated incorrectly
[BCC32 Error] Unit47.cpp(177): E2139 Declaration missing ;
[BCC32 Error] Unit47.cpp(177): E2190 Unexpected }
Вот ошибки
0
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
26.02.2012, 10:47
Может стоит этот код вынести из функции
C++
1
void __fastcall TForm47::Button2Click(TObject *Sender)
и разместить в начале модуля
1
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
26.02.2012, 14:06
вот это -
[BCC32 Error] Unit47.cpp(170): E2215 Linkage specification not allowed
- не та ошибка о которой я говорю
вопрос в том - что вы запихиваете в директиву extern "C" и почему же это оно не может без нее жить - как я понял без этой директивы у вас какие то ошибки
1
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
26.02.2012, 18:31  [ТС]
_engineer_,
Да, так уже работает, значит его в функцие нелзя использовать...


vxg,

Ето ошибка тоже из за того что ее нелзя использовать в функцие...

Спасибо всем

Добавлено через 2 часа 26 минут
Может ктото приведит пример, как вбилдер работает extern "C" ?

Я пытаюс так:
1. Создоваю .с файл с содержанием
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
#include <tchar.h>
extern int sum(int a, int b)
{
 int c = a + b;
  return c;
}
int _tmain(int argc, _TCHAR* argv[])
{
  sum(10,10);
    return 0;
}
потом пытаюс обявить прототип в проект, и использовать его... Но есть ощыбки...

C++
1
2
3
4
5
6
7
#if defined __cplusplus
extern "C"{
#endif
  int jami(int a, int b);
#if defined __cplusplus
}
#endif
Вот ощыбки:
[ILINK32 Error] Error: Unresolved external '_jami' referenced from C:\DOCUMENTS AND SETTINGS\ARES\MY DOCUMENTS\RAD STUDIO\PROJECTS\WIN32\DEBUG\UNIT47.OBJ
[ILINK32 Error] Error: Unable to perform link
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
27.02.2012, 13:07
extern "C" используется для линковки с библиотеками (не с файлами вашего проекта). я не понимаю что вы хотите сделать с extern "C"...

Добавлено через 47 секунд
ошибка которую вы привели говорит следующее - не могу найти функцию jami - где она у вас? ее нет
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.02.2012, 01:36  [ТС]
vxg,

Да, шас понял... С функцию, можно обявить в хедер:
extern.h:

C++
1
2
3
4
5
6
7
8
9
10
11
#ifdef __cplusplus
extern "C" {
#endif
int f(int a, int b)
{
 a += b;
 return a;
}
#ifdef __cplusplus
}
#endif
А в СРР файл его можно исползовать так:
C++
1
2
3
4
5
#include "extern.h"
//...
int s = f(10,10);
cout << s << endl;
//...
правилно понял?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
29.02.2012, 07:52
в заголовочных файлах как правило не производится определения функции за исключением случаев когда это inline-функция (функция код которой будет автоматически подставлен вместо ее вызовов в код программы). традиционным способом объявления функций является размещение их прототипов в заголовочных файлах и их определение в CPP файлах. в другие модули из которых мы хотим получить доступ к функции вставляется ссылка на заголовочный файл при помощи директивы #include. ваш пример будет работать, просто он несколько выходит за рамки традиционных подходов к делению программы на модули. необходимости в директиве extern "C" в данном коде нет.
1
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.02.2012, 08:01  [ТС]
vxg,
Вот я задумываюс, вчем необходимость когда либо использовать extern "C" ?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
29.02.2012, 22:59
в длл при экспорте функции без extern C не обойтись - имена испортятся
0
12 / 14 / 3
Регистрация: 01.04.2009
Сообщений: 537
27.02.2023, 02:10
Извините, но я подниму эту тему, так как не понял как все же надо поступать

Имеется код на СИ который надо запустить из программы в C++ Builder 6
как это правильно сделать?
0
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
27.02.2023, 04:17
Цитата Сообщение от Viktor2004 Посмотреть сообщение
Имеется код на СИ который надо запустить из программы в C++ Builder 6
Ну так и в чем вопрос? Вставили и выполнили. Если появились ошибки - прочитали и исправили. Как еще-то?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2023, 04:17
Помогаю со студенческими работами здесь

Не работает extern для vector
Добрый день всем. Подскажите пожалуйста в чем беда то? Есть глобальный vector: extern vector&lt;Card&gt; CardList А дальше в...

Проблемы с выводом.В студии работает,перевожу в билдер
Привет,помогите реализовать вывод.У меня есть вот такой вывод,который работает в визуалке,но в билдере он ругается на...

Почему когда я включая си билдер пишется- "Error! Object.obj not found. Programm will be closed."
Почему когда я включая си билдер пишется- &quot;Error! Object.obj not found. Programm will be closed.&quot; помогите...

Не работает extern "C" {} с компилятором С++
Наверное лучше всего задать вопрос тут .. :cry: Есть такой код (в данный момент хидер файл, включаю в код cpp файла, пока идет...

Что означает extern "C" или extern "C++"?
Например такой код, extern &quot;C&quot; void f(); Или C++ вместо C. Что это означает и где это применяется ?:)


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru