|
|
  |
Два входа в одну функцию на C, возможно ли такое? |
|
|
|
Dec 3 2010, 07:03
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(MALLOY2 @ Dec 2 2010, 14:43)  Код void Combo(void) { Control(); Indication(); } Без комментариев. The Best  Еще один коментарий - если компилятор достаточно умный, то он из функции Combo сделает именно то, что было нужно ТС. Ну, может быть, с оверхедом на один jmp (И даже для не статических функций Control и Indication) PS. Пишите на FORTRAN'е - там это можно средствами языка
|
|
|
|
|
Dec 3 2010, 08:29
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(ViKo @ Dec 2 2010, 21:17)  Прокомментирую сам. Квалификатор static будет иметь смысл, если я эти функции заброшу в отдельный файл. Таких функций у меня несколько десятков, что ж, мне, столько файлов создавать? Не вижу смысла. Пардон, не было времени на развернутый ответ. Код void Combo(void); void Control(void); void Indication(void); //............................................... static void Control_prim(void); static void Indication_prim(void); Имеем заготовки для того чтобы контрол и индикация вызывались как извне так и максимально оптимизированно Код void Combo(void) { Control_prim(); Indication_prim(); }
void Control(void) { Control_prim(); }
void Indication(void); { Indication_prim(); } Теперь великий смысел оберток, надеюсь понятен.
|
|
|
|
|
Dec 3 2010, 09:32
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(_Pasha @ Dec 3 2010, 10:29)  Теперь великий смысел оберток, надеюсь понятен.  Увы...  Не могли бы вы словами описать, за счет чего будет оптимизация. Пока что вижу разрастание кода... Как будет у меня: Код int main(void) { ... Control(); Indication(); ... Indication(); } void Control(void) { ... } void Indication(void) { ... } Другой вариант: Код int main(void) {... Control(); ... Indication(); } void Control(void) { ... Indication(); } void Indication(void) { ... }
|
|
|
|
|
Dec 3 2010, 12:53
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (ViKo @ Dec 3 2010, 11:41)  Например, так, без точки с запятой после макрофункции, Потом почесали за ухом и решили, что в процессе кования программы макрос разросся и лучше сделать из него обычную функцию. И помчались вставлять точку с запятой везде, где было использование этого макроса. И все ради чего? Ради того, чтобы по религиозным соображениям не использовать конструкцию do {} while(0) ? Да пожалуйста.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 3 2010, 13:39
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Собсна делов-то: Код #define Begin___Macro do{ #define End___Macro }while(0); И даже самый страшный и больной компилер пойдет туда, куда нада. ЗЫ: если дописать break;}while(0); например По сабжу: вообще-то логика организации программ на сях отличается от асмового. Например, если завести нечто типа машины Даффа и расположить жизненно важные части по раз и навсегда определенному приоритету, типа Код void system(char prio) { switch(prio) { case 0: remote_command(); case 1: indication(); case 2: control(); case 3: critical(); } } можно вызывать такое отовсюду и отрубать не актуальные функции входным параметром - приоритетом. Хотя я приверженец protothreads...
|
|
|
|
|
Dec 3 2010, 14:58
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(Сергей Борщ @ Dec 3 2010, 14:53)  Потом почесали за ухом и решили, что в процессе кования программы макрос разросся и лучше сделать из него обычную функцию. И помчались вставлять точку с запятой везде, где было использование этого макроса. Когда я захочу вместо макроса применить функцию, я даже имени такого не оставлю, а изменю, согласно своим "религиозным" убеждениям. Заменить не трудно, при желании, можно даже автоматом. Я стараюсь не плодить лишних сущностей. Цитата(_Pasha @ Dec 3 2010, 15:39)  можно вызывать такое отовсюду и отрубать не актуальные функции входным параметром - приоритетом. Об этом написал MrYuran в посте №3
|
|
|
|
|
Dec 3 2010, 23:11
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Цитата Если функции инлайновые, а параметр константный, константный, это const? У меня есть некоторые сомнения по поводу const. Тут наверно правильнее сказать как-то так: определен на этапе компиляции. Но смысл Вашего поста понятен...Это я так, придираюсь )) Хотя, действительно продвинутый компилятор наверное и с const сработается...но это только догадки..
--------------------
The truth is out there...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|