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

Странные объявления функций в заголовочных файлах

03.06.2018, 23:46. Показов 927. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь потихоньку разобраться в C++. Когда читаешь теорию, почти все понятно, но когда лезешь в реальный код, возникает много вопросов. По большинству из них можно найти ответы в интернете, но по этому вопросу не нашел абсолютно ничего и нигде.
К сожалению, я даже не знаю, как правильно задать вопрос, так как в принципе не понимаю, что это такое.

Не первый раз встречаю следующее объявления функций в .h файлах.

C++
1
void SOMETHING FunctionName();
иногда и такого вида

C++
1
SOMETHING1 void SOMETHING2 FunctionName();
В .cpp файлах уже все стандартно и понятно

C++
1
void FunctionName() {...};
Вопрос в том, что это за условные SOMETHING и почему ни в каких книжках нет упоминания о таком синтаксисе. Какую тему хотя бы почитать по этому поводу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2018, 23:46
Ответы с готовыми решениями:

Расположение определения функций в заголовочных файлах
grizlik78, Часто вижу что приватную секцию указывают внизу, интересно, зачем? Вроде удобнее...

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить...

О стандартных заголовочных файлах
Не знаю в какую категорию отнести данное нубство, но все же: Часто использую некоторые...

Массивы в заголовочных файлах
в заголовочном файле в описании класса пишу: int _const_iMas = {0x63,0x7c,0x78,0x79}; В...

8
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
03.06.2018, 23:52 2
Цитата Сообщение от alekor Посмотреть сообщение
SOMETHING
перевод сия слова " что нибудь" " нечто"
Цитата Сообщение от alekor Посмотреть сообщение
Не первый раз встречаю следующее объявления функций в .h файлах.
хотелось бы конкретно узнать где, в реальных программах или в клише
если в реальных, то вполне возможно что это макрос, который подставляет условия в зависимости от компилятора, например способ вызова
0
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 5
03.06.2018, 23:59  [ТС] 3
В реальных программах. Нигде этого больше не встречал, ни в книжках, ни в каких-то примерах.

SOMETHING - это просто мой обобщенный пример. На самом деле может быть все, что угодно, вплоть до каких-то аббревиатур типа ASSC1.

Вот тут например:

https://github.com/sindney/fur... Fury/Gui.h
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.06.2018, 00:12 4
Цитата Сообщение от alekor Посмотреть сообщение
Вот тут например:
тут явно описан какой то макрос
FURY_API
он может принимать разные значения в зависимости подо что ты компилишь, для винды, лиукса или еще чего
нужно залезть поглубже и посмотреть как сей макрос реализован
в файле
Macros.h https://github.com/sindney/fur... y/Macros.h
видим
C++
1
2
3
4
5
#ifdef FURY_API_EXPORT
        #define FURY_API __declspec(dllexport)
    #else
        #define FURY_API __declspec(dllimport)
    #endif
если пишем dll ку то функция экспортируется
если используем то импортируется
если вообще не винда то пустой макрос
C++
1
#define FURY_API
1
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 5
04.06.2018, 00:22  [ТС] 5
Спасибо за пояснение по поводу макросов, но где почитать именно про этот синтаксис объявления функций? Я все равно не очень понимаю, как это работает в объявлениях функций. Есть ли какая-то документация на этот счет?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.06.2018, 00:31 6
Цитата Сообщение от alekor Посмотреть сообщение
Я все равно не очень понимаю, как это работает в объявлениях функций.
это зависит от платформы и от компилятора, больше конечно от платформы
есть определенные служебные слова например в винде
__declspec _pascal __cdecl, __fastcall, и __stdcall ну и другие
читать нужно программирование именно под этой платформой
вот например
https://msdn.microsoft.com/ru-... h89ks.aspx
из чужого форума
__cdecl — отсутствие декорации имен. Применять в том случае, если в C++ используешь функцию, которую написали на C или наоборот, на С++ пишешь функцию для C.
__fastcall — передача части параметров и результата не через стек, а через регистры. Для оптимизации применяется.
__stdcall — оно же PASCAL — противоположный C-шному договор о передаче параметров в функцию и о том, кто после выполнения функции чистит стек. Применяется в Win API.
Добавлено через 2 минуты
вот еще
https://ru.wikipedia.org/wiki/Соглашение_о_вызове
0
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 5
04.06.2018, 00:37  [ТС] 7
Спасибо! Просто пока читал общую теорию, без привязки к платформе. Поэтому, наверное, и не очень понимаю.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
04.06.2018, 00:45 8
Цитата Сообщение от alekor Посмотреть сообщение
Поэтому, наверное, и не очень понимаю.
я думаю, пока это тебе и не надо
когда займешься дизасемблированием или написанием кроссплатформеных библиотек, тогда и изучишь
а пока считай что этих слов нет, пробелы вместо них
0
0 / 0 / 0
Регистрация: 03.06.2018
Сообщений: 5
04.06.2018, 00:55  [ТС] 9
УУУУ, в такие дебри даже лезть не планирую Изучаю просто, чтобы научиться писать простенькие плагины к некоторым графическим приложениям для облегчения своей жизни. Вообще я не программист и нет цели им стать в полном понимании этого слова, я больше по графике. Моя конечная цель - разобраться, как работают плагины. В SDK серьезных программ сам черт ногу сломит. Решил пока посмотреть код попроще, но все равно встречаются непонятные моменты типа вот этого.
0
04.06.2018, 00:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2018, 00:55
Помогаю со студенческими работами здесь

Константы в заголовочных файлах
declare.h #pragma once extern const size_t rows; extern const size_t cols; double...

Линковка, реализация в заголовочных файлах
Ситуация следующая. Представим себет хедер, который содержит некоторый функционал и должен...

Множественные ошибки в заголовочных файлах
Компилятор DDK выдает кучу ошибок в его же заголовках — winbase.h, wdm.h, ntdef.h, там выходит...

Определение переменных в заголовочных файлах
Здорова! Определил переменную в заголовочном фале от так #pragma once #ifndef...

Статические свойства структур в заголовочных файлах
Всем привет. Не могу найти в интернете инфу о том, как ведут себя статические свойства структур...

Объявлние классов в разных заголовочных файлах
Приветствую всех участников форума. Есть 2 класса А и В. Каждый из содержит указатель на другой...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru