Котуинко

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Котуинко

Сообщение arkhnchul »

[uquote="BOB51",url="/forum/viewtopic.php?p=3728114#p3728114"]Кито подскажет как КОШЕРСТНО прописывается
передача дву и более мерных массивов указателей на функцию
аргументами для (другой) функции?[/uquote]
такое у наркологов лучше поспрашивать.
если серьезно - это чисто академический интерес, или на самом деле зачем-то понадобилось? указатель на int должен сойти вроде.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Да вот крутится "навязчива идейка"...
Пока в тестах...
:roll:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

лично я всегда начинаю с описания собственного типа.
допустим, нужен указатель на функцию с тремя параметрами char, int и long? возвращающую int. определяем его:

Код: Выделить всё

typedef int (*func_ptr)(char, int, long);
теперь, имея тип, можно сделать хоть семимерный массив без особого труда

Код: Выделить всё

func_ptr array[10][20]; // например, так для двумерного варианта
ну а потом, заполнив предварительно массив значениями, можно вызывать функции:

Код: Выделить всё

int result = array[i][j](10,20,30);
по-моему, ничего сложного

Добавлено after 5 minutes 27 seconds:
перечитал это
BOB51 писал(а):передача дву и более мерных массивов указателей на функцию
аргументами для (другой) функции?
и подумал, что наверное, речь шла о том, как такой массив передать в функцию... ну так подход тот же самый - определяем тип, а потом в функцию передаем параметр этого типа:

Код: Выделить всё

typedef func_ptr array_t[10][20];

void my_func(array_t parameter); // прототип функции с параметром этого типа

array_t my_array; // объявили переменную этого типа (т.е. двумерный массив)

my_func(my_array); // передали в функцию

// а так в функции обрабатываем переданый параметр, вызывая все функции из массива
void my_func(array_t parameter){
  for(uint8_t i=0; i<10; i++)
    for(uint8_t j=0; j<20; j++)
      parameter[i][j](10,20,30);
}

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

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Штука несколько более садистская...
Есть КОТ(main)
в нем массив СЫР с указателями на функции размещенные во внешнем файле КРЫС...
каждая из функций КРЫСа может при необходимости заменить содержимое
массива СЫР находящегося в области КОТа...
и КОТ может при надобности выполнить одну из функций КРЫСа по указателю , который вытащен из СЫРа
Ну и вдобавок есть еще два объекта - КОРМИЛКА и ПОИЛКА.
КРЫС и КОТ одинаково могут использовать их содержимое (методы) внутри своих функций.
Именно внутри функций без передачи ссылки на КОРМИЛКу и ПОИЛКу параметрами этих функций...
При том, что разновидностей КРЫС в одном проекте может бысть несколько.
Вобщем... САДОМАЗОХИЗМ и измышления...
:roll:
:dont_know:
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Котуинко

Сообщение VladislavS »

Велосипедостроение детектед! ООП придумано когда Земля была ещё чуть тёплая.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

BOB51 писал(а):САДОМАЗОХИЗМ
согласен. особенно манера изложения.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Это из интереса - можно ли повторить простенькую рабочую прожку,
что давненько на "чистом ассемблере" написана была без особого труда под Си...
Пока что ... ОБЛОМС...
всплывают весьма муторноэтажные конструкции...
:(
или такой алгоритм обработки под Си применить проблематично,
надо чего переиначить (а нежелательно... оченно укусненькое решение было...)
:roll:

Эти "хвосты" вылезать начинают при желании разбить программу на раздельные файлы,
имеющие совместно-перекрестный доступ к внутреннему функционалу друг дружки - проблемы "границ видимости".
Возможно не та "точка разбиения" выбрана.
:roll:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

BOB51, нельзя подходить методами программирования на ассемблере к программированию на Си, тем более С++. если вы умеете собирать песок в мешок пинцетом, то переход к лопате означает увеличение производительности вашей работы, но совсем не означает, что вам будет просто взять отдельную песчинку новым инструментом! меняя инструмент, надо использовать его возможности, а не страдать о том, что упущены возможности предыдущего.

есть виртуозы, которые трехкубовым ковшом экскаватора подбирают спичечный коробок, т.е. это сделать можно. но нужно ли это делать?!

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

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Иногда таки не мешает и "пободать стенку" - побочная разборка нюансов даже
при отрицательном общем результате дает плюсики (в другом месте полученный материал пригодится).
Однако для понимания где чего переиначить надо "бодать" до исчерпания последней имеющейся возможности.
8)
Вроде с typedef прояснилось...
МРУММ!!
:hunger:
Возможно частично вопрос закроет.
:beer:

Так из размышлений...
дополнительные
#include mmmm.h
могут прописываться как в самом test.c(test.ccp) файле, так и в заголовочнике данного файла
test.h...
на что может повлиять разница размещения записей?

допустим имеется :
test1.h test1.cpp
test2.h test2.cpp
и
Htest.h Htest.cpp

вариант 1

Htest.h содержит
#include "test1.h" // скобки или <> в данном случае неважно -
// о разнице в области поиска размещения речь не идет
#include "test2.h"

Htest.cpp содержит
#include "Htest.h"

и вариант 2
Htest.h не содержит строчек подключения, а


Htest.cpp содержит
#include "Htest.h"
#include "test1.h"
#include "test2.h"

в принципе вроде равнозначно?
но так ли это ...
:dont_know:
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Котуинко

Сообщение arkhnchul »

в Htest.h используются какие-то конструкции из test1 и test2? если да - включаем их туда, если нет - то нет.
даже если препроцессор разберется и технически все будет равнозначно - в целом удобнее в каждый файл включать только те заголовочники, которые нужны непосредственно ему.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

ПЕЧАЛЬКА однако...
Приятно - мяконькие typedef не слишком хорошо уживаются с многофайловиками и extern...
В отличии от линейно - однофайлового варианта с "условно-независимыми" библиотеками...
Приходится к задуренной "стандартной" системе объявления указателей (множествоскобочной) обращаться...
А там... "указатель указателя" как-то... напряжно воспринимаются... И описания аки их конструировать (за какими скобками * ставить) весьма мало и смуторно...
:(
Воть такой тест-пример (абсолютно случайная задачка для отработки перекрестных вызовов при нескольких файлах в проекте):
mino_1.zip
(8.55 КБ) 233 скачивания
Замена на typedef в нем работать не будет.
А в текущем виде и компилируется и платкой отрабатывается (сбрасывает в терминалку отчет-распечатку).
:roll:
Может еще какой вариант упущен...
:dont_know:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

вегда typedef будет работатть, если вы ПОНИМАЕТЕ, что это такое и для чего оно.
если вам нужно, чтобы введенный вами тип понимался в разных файлах, вы должны описать этот тип в файле-заголовке и подключить этот заголовок везде, где требуется этот тип. вы же можете пользоваться типом uint32_t везде, где подключили stdint.h? точно так же вы сможете пользоваться своими типами везде, где подключите свой заголовочник с описанием этого типа.

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

Мой уютный бложик... заходите!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Очень печалько, однако таки ФАКТ... (может касаемо только адуриньей IDE? :dont_know: )
Вышевыложенный тест (mino_1) и компилируется и макеткой отрабатывается...
А вот его собрат (все то же самое, кроме способа написания указателя на функцию):
mino_2.zip
(8.58 КБ) 216 скачиваний
где указатель на функцию выведен через typedef в общем для всех заголовочнике
НИКАК компилироваться не желает...
Мозги уже зашипели...
Кстати там и с extern "разминка" сделана.
В чем разница - Х/З.... одначе весьма досадно...
:(

КСТАТИ...
Поле ошибок (красненьки строчки) ошибки типов указателей на функцию также выводит в "скобочном" варианте...
А там ведь GCC задействован...
:roll:
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Котуинко

Сообщение Reflector »

Typedef определяет новый тип, не переменную, а ты пытаешься типу присваивать указатели на функции...
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Верно... ПРОТУПИЛ...
"Скобчатая" форма сразу и определение переменной делает...
:oops:
Однако... таки некоторые заметки остались
(принято к сведению "как есть" ибо пока без особой надобности в уточнениях)
mino_3.zip
(5.69 КБ) 248 скачиваний
:roll:
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Котуинко

Сообщение arkhnchul »

опять не-extern переменные в заголовочнике. Доколе?! :)))
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

А пока сам не разберусь какие могут быть extern, а какие НЕТ.
8)
Из всего, что пред глазы попадалось на ту тему - только треть
странички в книже Страутструпа (язык программирования С++ стр.34)...
Ежли учесть что проекты-многофайловики с перекрестным использованием
"общих" элементов не так часто попадаются в примерах...
Не слишком уж много...
А приличный многофайловик без знаний "границ кошерстности" для extern
нашкарябать весьма затруднительно.
:roll:
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Котуинко

Сообщение Мурик »

BOB51 писал(а):А пока сам не разберусь какие могут быть extern, а какие НЕТ.
Это же элементарно. Если переменная объявлена без extern, она создается, т. е. под нее выделятся место в памяти. Если переменная объявлена с extern, это указывает компилятору что где-то в другом месте переменная объявлена без extern. Компилятор не выделяет память под переменную.
То есть в программе может быть только одна переменная с одним и тем же именем объявлена без extern (пространства имен и т. д. не считаем).
Прочитайте учебник по Си. В нем все написано.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Котуинко

Сообщение BOB51 »

Мурик,
попытайтесь объявить extern переменную, тип которой
определяется ранее выполненным typedef.
Будет весьма интересно.
8)
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Котуинко

Сообщение ARV »

Чего тут пытаться?! Объявление переменной должно быть после typedef, и все будет пучком.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «Разные вопросы по МК»