Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
1

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

25.02.2012, 12:09. Просмотров 2280. Ответов 12
Метки нет (Все метки)

Привет всем, у меня вопрос, почему в билдер(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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 12:09
Ответы с готовыми решениями:

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

MessageBox - чтобы вместо "Yes" и "No" показывало "Да" и "Нет"
Доброе время суток, как переделать int Key= Application->MessageBox(L"Text",...

Открыть папку "мой компьютер", "панель управления", "program files"
Нужно открыть папку "мой компьютер", "панель управления", "program files"

Ищу исходник игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д
Нужен код игры на С++, на подобие "Солитер", "Быки и коровы", "Змейка" и т. д....

Ошибки: "Failed to allocate SAVEmem" и ""bcc32" exited with code 1."
Помогите пожалуйста с этими ошибками. Такое не только у меня, полазил по разным...

12
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
25.02.2012, 12:42 2
вы неверно понимаете назначение данной конструкции. она употребляется с прототипами функций написанных на С. для кода она не употребляется - код С вы можете употреблять в программах без ограничений.
0
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
25.02.2012, 21:51  [ТС] 3
vxg,
Да да ето я понимею, но когда питаюс обявыть прототипы, да и без них выдает ошибок
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
25.02.2012, 23:36 4
каких ошибок? может не в этом дело
0
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
26.02.2012, 04:57  [ТС] 5
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
_engineer_
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
26.02.2012, 10:47 6
Может стоит этот код вынести из функции
C++
1
void __fastcall TForm47::Button2Click(TObject *Sender)
и разместить в начале модуля
1
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
26.02.2012, 14:06 7
вот это -
[BCC32 Error] Unit47.cpp(170): E2215 Linkage specification not allowed
- не та ошибка о которой я говорю
вопрос в том - что вы запихиваете в директиву extern "C" и почему же это оно не может без нее жить - как я понял без этой директивы у вас какие то ошибки
1
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
26.02.2012, 18:31  [ТС] 8
_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
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
27.02.2012, 13:07 9
extern "C" используется для линковки с библиотеками (не с файлами вашего проекта). я не понимаю что вы хотите сделать с extern "C"...

Добавлено через 47 секунд
ошибка которую вы привели говорит следующее - не могу найти функцию jami - где она у вас? ее нет
0
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.02.2012, 01:36  [ТС] 10
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
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
29.02.2012, 07:52 11
в заголовочных файлах как правило не производится определения функции за исключением случаев когда это inline-функция (функция код которой будет автоматически подставлен вместо ее вызовов в код программы). традиционным способом объявления функций является размещение их прототипов в заголовочных файлах и их определение в CPP файлах. в другие модули из которых мы хотим получить доступ к функции вставляется ссылка на заголовочный файл при помощи директивы #include. ваш пример будет работать, просто он несколько выходит за рамки традиционных подходов к делению программы на модули. необходимости в директиве extern "C" в данном коде нет.
1
Programmer.
Прогер
631 / 262 / 15
Регистрация: 17.11.2010
Сообщений: 1,371
Записей в блоге: 2
29.02.2012, 08:01  [ТС] 12
vxg,
Вот я задумываюс, вчем необходимость когда либо использовать extern "C" ?
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,948
29.02.2012, 22:59 13
в длл при экспорте функции без extern C не обойтись - имена испортятся
0
29.02.2012, 22:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 22:59

Найти частоту встречаемости следующих друг за другом символов "А", "В"и "С".
В заданном тексте найти частоту встречаемости следующих друг за другом...

В чём ошибка? Почему пишет,что #include "stdafx.h" не работает и тд нету библиотеки,как можно код поменять?
В чём ошибка? Почему пишет,что #include &quot;stdafx.h&quot; не работает и тд нету...

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd"
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере...


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

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

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