С Новым годом! Форум программистов, компьютерный форум, киберфорум
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. Показов 5935. Ответов 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
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
25.02.2012, 12:42
вы неверно понимаете назначение данной конструкции. она употребляется с прототипами функций написанных на С. для кода она не употребляется - код С вы можете употреблять в программах без ограничений.
0
Прогер
 Аватар для Programmer.
632 / 263 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
25.02.2012, 21:51  [ТС]
vxg,
Да да ето я понимею, но когда питаюс обявыть прототипы, да и без них выдает ошибок
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
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
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
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
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
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
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
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
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
29.02.2012, 22:59
в длл при экспорте функции без extern C не обойтись - имена испортятся
0
11 / 13 / 3
Регистрация: 01.04.2009
Сообщений: 536
27.02.2023, 02:10
Извините, но я подниму эту тему, так как не понял как все же надо поступать

Имеется код на СИ который надо запустить из программы в C++ Builder 6
как это правильно сделать?
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,361
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru