Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2020, 14:30

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 14:49 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 309
Откуда: Новочеркасск
Возникла проблема на пустом месте, а именно с параметрами по умолчанию, чтобы не передавать в функцию "лишнии" значения.
Имеем например функцию:
Код:
uint16 mcp3201_read_for_delay(uint16 *in, uint16 out=0xffff)
{
.....
}

в хидере:
Код:
extern uint16 mcp3201_req_read_for_delay(uint16 *, uint16);

если её вызывать с двумя параметрами нет проблем нигде, а если вызывать только с одним параметром и где нибудь в другом файле (если в этом же, то проблем также нет) возникает беда :) компилятор упорно просит второй параметр.
Вродебы можно обьявить функцию в начале фала в котором предполагается использование, но как то кажеться это неправильно.
Как правильно сделать, чтобы вызывать функцию с произвольным числом параметров в других файлах проекта?


Последний раз редактировалось ELEKTROS 05 дек 2016, 16:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 15:09 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2795
Откуда: Санкт-Петербург
А почему вы дефолтный параметр в определении функции пишете, а не в объявлении (в строчке с extern)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 15:09 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1589
Откуда: Киев
в заголовке указать:

Код:
uint16 mcp3201_read_for_delay(uint16 *in, uint16 out=0xffff);


в файле .cpp:

Код:
uint16 mcp3201_read_for_delay(uint16 *in, uint16 out)
{
...
}


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

P.S. extern у функций в данном случае бессмыслен.
Declarations of variables and functions at file scope are external by default.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 16:28 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 309
Откуда: Новочеркасск
Steel.ne, если я правильно вас понял, то я про такой вариант написал, но в каждом файле *.cpp, где мне использовать функцию писать:
Код:
uint16 mcp3201_read_for_delay(uint16 *in, uint16 out=0xffff);
(если в хидере то ругается компилятор)
как то ненравиться штоли, можно через макрос указать и значение по умолчанию, чтоб одинаково во всех файла было, но в стандартных библиотеках как то же сделано или чтобы так сделать нужны классы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 16:39 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1266
ELEKTROS писал(а):
(если в хидере то ругается компилятор)

Только в хедере.

Цитата:
как то ненравиться штоли, можно через макрос указать и значение по умолчанию, чтоб одинаково во всех файла было, но в стандартных библиотеках как то же сделано или чтобы так сделать нужны классы?

Если программируя на С++ тебе захотелось использовать макросы, то практически гарантированно ты делаешь что-то не так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 05 дек 2016, 17:50 
Заглядывает иногда

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 198
ELEKTROS писал(а):
Возникла проблема на пустом месте, а именно с параметрами по умолчанию, чтобы не передавать в функцию "лишнии" значения.

Передаваться будут все параметры. Компилятор лишь подставит в соответствующем случае значение по умолчанию.

ELEKTROS писал(а):
Как правильно сделать, чтобы вызывать функцию с произвольным числом параметров в других файлах проекта?

Всё, к чему даётся доступ из других "файлов" проекта - должно описываться в "интерфейсе" этого "файла" - в его .h Компилятор видит только то, что в объявлено/реализовано в этом файле + то, что объявлено во включаемых файлом заголовках. То, что лежит в параллельных файлах проекта - ему неведомо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 06 дек 2016, 13:37 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Цитата:
Если программируя на С++ тебе захотелось использовать макросы, то практически гарантированно ты делаешь что-то не так.


C++ является мультипарадигмальным языком в широком смысле этого слова. У него нет строгого предписания по использования, как, допустим, у питона.
Нет ничего плохого в том, чтобы писать на С++ с использованием макросов.

Особенно часто это касается программ, написанных на 70% на языке Си и на 30% на С++. Там использование сишных макросов в коде С++ является и вовсе естественным.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 06 дек 2016, 14:25 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1266
Mirmik писал(а):
C++ является мультипарадигмальным языком в широком смысле этого слова. У него нет строгого предписания по использования, как, допустим, у питона.
Нет ничего плохого в том, чтобы писать на С++ с использованием макросов.

Особенно часто это касается программ, написанных на 70% на языке Си и на 30% на С++. Там использование сишных макросов в коде С++ является и вовсе естественным.

Сейчас компиляторы уже часть функционала из C++17 поддерживают, но конечно можно писать и на С++98, только вряд ли можно сказать, что в этом нет ничего плохого. То же самое можно сказать и про макросы. Они как бы есть, но необходимости в этой устаревшей части языка практически нет. Конечно если у тебя проект на С++ к которому подключено множество стандартных хедеров на С с макросами, то их придется использовать, я лишь говорю, что не стоит вместо inline функции, шаблона или простой константы лепить уже свои макросы, тем более после появления модулей, которые уже есть в VS, другого пути просто не останется, т.к. макросы за пределами модулей просто не видны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 06 дек 2016, 14:32 
Старожил
Аватара пользователя

Зарегистрирован: 11 мар 2010, 12:44
Сообщения: 1156
Откуда: Default city
Единственное в макросах - возможность указания значения при компиляции ключём. Ну не сделаешь ты этого ни в C++17, ни где ещё. Так что макросы пока что ещё живут.

Пример: сборка прошивки под разные ревизии платы с разными кварцами.

_________________
Не дай Бог увидеть нубский ЛУТ, бессмысленный и беспощадный
В МК "на порядок" - это "в два раза"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 06 дек 2016, 15:11 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1266
dekar писал(а):
Единственное в макросах - возможность указания значения при компиляции ключём. Ну не сделаешь ты этого ни в C++17, ни где ещё. Так что макросы пока что ещё живут.

Пример: сборка прошивки под разные ревизии платы с разными кварцами.

Ну правильно, макросы живут в какой-то своей небольшой нише. Директивы условной компиляции тоже постепенно сдают позиции после появления всяких "constexpr if"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Значения по умолчанию в функциях С++
СообщениеДобавлено: 06 дек 2016, 20:48 
Старожил

Зарегистрирован: 31 мар 2014, 22:42
Сообщения: 207
Откуда: Омск
2 ELEKTROS:

То что вы хотите сделать в языках программирования высокого уровня называется - перегруженные функции. Гуглите в эту сторону.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB