|
Два входа в одну функцию на C, возможно ли такое? |
|
|
|
 |
Ответов
(15 - 29)
|
Dec 2 2010, 14:12
|
Профессионал
    
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007

|
Ну можно еще более универсальную штуку сочинить, типа: Код typedef void (*pVoidFun)(void);
void Control_Indication(pVoidFun p) { if(p) p(); Indication(); } Тогда можно вызывать Control_Indication(NULL) - будет вызываться только Indication(), а при вызове типа Control_Indication(Control) сначала вызовется функция, адрес которой вы передали вызывающей функции, затем Indication().
|
|
|
|
|
Dec 2 2010, 16:59
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (kosyak© @ Dec 2 2010, 16:39)  Занятная статья. do{}while(0) я видел в чужих исходниках пару раз - и никак не мог понять зачем? Спасибо, разъяснили.. Трюк, конечно, хороший, только надо тоже с аккуратностью применять, ибо: 1) Хороший компилятор выдаст предупреждение о том, что условие никогда НЕ выполняется, хотя все сделает правильно, но лишние вопли придется давить локальными прагамами - некузяво  . 2) Поганый компилятор (например, вот прямо сейчас работаю с рекордно поганым ImageCraft для M8C ) - такое НЕ соптимизирует - вообще гнусно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Dec 2 2010, 18:17
|

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

|
Цитата(_Pasha @ Dec 2 2010, 17:46)  ТХЕ БЕСТ оно будет когда все указанные функции объявим static. Прокомментирую сам. Квалификатор static будет иметь смысл, если я эти функции заброшу в отдельный файл. Таких функций у меня несколько десятков, что ж, мне, столько файлов создавать? Не вижу смысла. P.S. Где-то здесь и зарыта собака "неполной структурированности" языка C. P.P.S. По поводу do {...} while (0) - а чем плохо показанное в той же статье строчкой выше {...} ? Разве кто-то заставляет писать I2C_CLOCK() ; с точкой с запятой в конце? Или в дефайне можно было задать #define I2C_CLOCK(); {NOP(); SCL = 1; NOP(); SCL = 0;} Да, это не работает (кажется, в Hi-Tech PICC у меня получалось такое, а в Keil - нет)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|