Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 478

В чем ошибка при объявлении функции, как extern C?

15.05.2025, 21:55. Показов 4186. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
В заголовочном файле MemoryManager.h есть ряд объявлений типа:
C
1
 extern "C" void* m_alloc(int mem_size);
Они нужны, т.к. планируются их вызовы из библиотеки на С.

Везде в них компилятор (VS 2019) дает ошибки - см. скриншот.
Строки 6-37, а также строка 45 и далее - полностью закомментированы.

В файле MemoryManager.cpp для каждой такой процедуры написана реализация без указания extern "C" (думаю, это неважно - ведь ошибка в .h).

Вопрос: в чем причина ошибки ?

(про extern почитал, написал, похоже, правильно... или нет ?)

PS: "C" - английская
Миниатюры
В чем ошибка при объявлении функции, как extern C?  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2025, 21:55
Ответы с готовыми решениями:

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

Объявлении глобальной переменной extern int
при объявлении глобальной переменно extern int t, ошибки undefined reference to `t'. А если я...

Глобальное объявление класса в qt. extern
Здравствуйте интересует такой вопрос как глобально объявить класс с помощью extern. Много всего...

7
 Аватар для Recrut_rf
377 / 320 / 65
Регистрация: 14.10.2014
Сообщений: 1,368
15.05.2025, 22:13
LUN2,
Возможно стоит что нибудь наподобие моего кода сделать - то есть в отдельный блок всё добавить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include "libavcodec/avcodec.h" 
#include <libavfilter/avfilter.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavfilter/version.h>
    
 
#include <libavutil/timestamp.h>
}
По крайней мере этот вариант у меня в коде точно работал
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2062 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
15.05.2025, 22:14
LUN2, ошибка не в коде, а в самой VisualStudio
В ней на коды ошибок начинающиеся с E - зачастую ошибка в анализаторе кода, а не в коде.
1
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 478
15.05.2025, 22:38  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
LUN2,
Возможно стоит что нибудь наподобие моего кода сделать - то есть в отдельный блок всё добавить:
Recrut_rf, я и так попробовал:

C++
1
2
3
extern "C" {
#include "MemoryManager.h"
}
НО:
1) если я это делаю из заголовочного файла к .cpp, то этот вариант (обертывание инклуда) работает.
2) если из заголовочного файла к .c - также дает ошибку.

Проблема в том, что эти ф-ции используются как из C, так и из C++ - не удается пока сделать, чтобы и туда и туда мой .h включался нормально.

Добавлено через 2 минуты
Цитата Сообщение от Max Dark Посмотреть сообщение
LUN2, ошибка не в коде, а в самой VisualStudio
В ней на коды ошибок начинающиеся с E - зачастую ошибка в анализаторе кода, а не в коде.
Max Dark, и что же тогда, очень интересно, делают ?
Подозреваю, что VS 2019 не только я использую, и extern не такая редкая вещь, чтобы она годами не исправлялась (как мне кажется).
Хотите сказать, что кроме как обновлением версии это не исправить ?
0
 Аватар для Recrut_rf
377 / 320 / 65
Регистрация: 14.10.2014
Сообщений: 1,368
15.05.2025, 22:43
LUN2, неее - надо свои функции добавить туда, где у меня инклуды
в промежуток между фигурными скобками

C++
1
2
3
4
extern "C"
{
ТУТ ОБЪЯВЛЕНИЯ ФУНКЦИЙ
}
Добавлено через 1 минуту
https://learn.microsoft.com/ru... clarations
1
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 478
15.05.2025, 22:48  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
LUN2, неее - надо свои функции добавить туда, где у меня инклуды
в промежуток между фигурными скобками
Recrut_rf, тогда не понял - мои объявления и сидят в файле .h

Чем тогда мой вариант отличается от Вашего ?
0
1181 / 457 / 68
Регистрация: 22.09.2023
Сообщений: 1,376
15.05.2025, 22:50
Лучший ответ Сообщение было отмечено LUN2 как решение

Решение

Цитата Сообщение от LUN2 Посмотреть сообщение
т.к. планируются их вызовы из библиотеки на С.
C
1
2
3
4
5
6
7
8
9
10
#ifdef __cplusplus
extern "C"
{
#endif
 
ТУТ ОБЪЯВЛЕНИЯ ФУНКЦИЙ
 
#ifdef __cplusplus
}
#endif
1
3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 478
15.05.2025, 23:02  [ТС]
Dushevny, да, это то что надо было!
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2025, 23:02
Помогаю со студенческими работами здесь

Multiple definition ошибка, использую extern
Доброго времени суток. Столкнулся с проблемой, описанной в шапке темы. Замысел заключается в...

Ошибка с extern
//main.cpp #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; const int MAPW = 30;...

Ошибка: [Error] expected initializer before 'extern' в файле _mingw_secapi.h
Компилятор ругается на 44 строку. Читал об этой ошибке - в основном происходит если выше забыли &quot;;&quot;...

Опишите функцию extern в Си, её аргументы, назначение и что возвращае
Опишите пожалуйста функцию extern в Си, её аргументы, назначение и что возвращает. Не могу найти...

Использование extern с функциями
Добрый вечер! Скажем я задекларировал в каком-то модуле функцию extern void foo() ;. Но не...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru