Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Macro, как выглядит функция 
:(
    Опции темы
sergioK
Дата 6.1.2011, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



немного позабыл синтакс языка
взято из файда signal.h 

Код

typedef    void (*__p_sig_fn_t)(int);


#define    SIG_DFL    ((__p_sig_fn_t) 0)
#define    SIG_IGN    ((__p_sig_fn_t) 1)
#define    SIG_ERR ((__p_sig_fn_t) -1)
#define SIG_SGE ((__p_sig_fn_t) 3)
#define SIG_ACK ((__p_sig_fn_t) 4)
]

как выглядит тело функции ? если написать самому без макро и typedef 
это поинтер на функцию void принимающую int  или возвращающую int как результат ?

PM MAIL   Вверх
azesmcar
Дата 6.1.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
принимающую int

 smile 
Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
возвращающую int void


PM   Вверх
sergioK
Дата 6.1.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(azesmcar @ 6.1.2011,  17:51)
Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
принимающую int

 smile 
Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
возвращающую int void

void или void*

т,е, функция выглядит вот так ?
Код


void *  SIG_DFL   (int value){

  pеализация 
}



PM MAIL   Вверх
bsa
Дата 6.1.2011, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergioK, void. Думаешь скобки просто так?
PM   Вверх
sergioK
Дата 6.1.2011, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(bsa @ 6.1.2011,  18:00)
sergioK, void. Думаешь скобки просто так?

да конечно нет ,
Я понимаю что заболбало отвечать на подобные вопросы  smile  но все же 


в чем разница ?

Код

 void (*anyFunc)  (int);


это void возвращает pointer на функцию  т,е, 
обратиться к ней можно сказав 
Код


void f1(int a){
   any code 
}

 void main(){
 anyFunc = f1;
 anyFunc(2) или (*anyFunc) (2) , 
}

 
? vs 

Код

 void* anyFunc   (int value){



а это функция возвращает void pointer, который потом можно закастить  типа  malloc ?



Это сообщение отредактировал(а) sergioK - 6.1.2011, 19:06
PM MAIL   Вверх
azesmcar
Дата 6.1.2011, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



sergioK

void* имел бы следующий вид
Код

typedef    void* (*__p_sig_fn_t)(int);


Добавлено через 2 минуты и 12 секунд
Цитата(sergioK @  6.1.2011,  18:44 Найти цитируемый пост)
это void возвращает pointer на функцию  т,е, 

я ничего не понял из этого предложения. это обявление указателя на функцию, принимающего один аргумент типа int и возвращающего void. В чем конкретно вопрос?
PM   Вверх
log584
Дата 6.1.2011, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.1.2010

Репутация: нет
Всего: нет



Цитата(sergioK @ 6.1.2011,  18:44)
а это функция возвращает void pointer, который потом можно закастить  типа  malloc ?

Короче, человек прикалывается, над нами, а мы ему вторим... вот и все...

Добавлено через 3 минуты и 40 секунд
Цитата(sergioK @ 6.1.2011,  17:56)
Цитата(azesmcar @ 6.1.2011,  17:51)
Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
принимающую int

 smile 
Цитата(sergioK @  6.1.2011,  17:34 Найти цитируемый пост)
возвращающую int void

void или void*

т,е, функция выглядит вот так ?
Код


void *  SIG_DFL   (int value){

  pеализация 
}



Вы еще что не прикололись что - ли?

Добавлено через 6 минут и 9 секунд
Цитата(sergioK @ 6.1.2011,  17:34)
как выглядит тело функции ?

Явно, человек курил что - то, перед.

Добавлено через 10 минут и 11 секунд
Цитата(bsa @ 6.1.2011,  18:00)
sergioK, void. Думаешь скобки просто так?

И в догонку, тяжелая артилерия....
PM MAIL   Вверх
sergioK
Дата 6.1.2011, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(azesmcar @ 6.1.2011,  19:18)
sergioK

void* имел бы следующий вид
Код

typedef    void* (*__p_sig_fn_t)(int);


Добавлено @ 19:20
Цитата(sergioK @  6.1.2011,  18:44 Найти цитируемый пост)
это void возвращает pointer на функцию  т,е, 

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

т,е указатель на функцию это обычная переменная которой нужно присвоить имя функции?

тогда ,вот такое зачем нужно ?
Код

     typedef void (&funcRef) (int);
    funcRef f=anyFunc;


Код

  typedef void const(  *funcRef ) (int);


или 
Код

  typedef void  const ( *funcRef ) (int);
 void const ( *funcRef ) (int);



??

PM MAIL   Вверх
mes
Дата 6.1.2011, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(sergioK @  6.1.2011,  19:32 Найти цитируемый пост)
тогда ,вот такое зачем нужно ?

ссылку нужно, а константный указатель можно инициализировать, но не присваивать.. 
но ссылки только в C++

Цитата(sergioK @  6.1.2011,  19:32 Найти цитируемый пост)
void const ( *funcRef ) (int);

ничего не перепутали ? может так :
Код

void  ( *const funcRef ) (int);


Это сообщение отредактировал(а) mes - 6.1.2011, 21:27


--------------------
PM MAIL WWW   Вверх
log584
Дата 6.1.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.1.2010

Репутация: нет
Всего: нет



Цитата(sergioK @ 6.1.2011,  20:32)
т,е указатель на функцию это обычная переменная которой нужно присвоить имя функции?

Нет, не обычная. Указатель на функцию имеет, кроме прочего тип возвращаемого значения (для компилятора), указатель - имя в тексте (для компилятора и линкера) - адрес в obj, список принимаемых параметров (опять же для компилятора).
 Имена функций - это для тебя, а для компилятора всего лишь еще один символ.

Это сообщение отредактировал(а) log584 - 6.1.2011, 22:05
PM MAIL   Вверх
log584
Дата 6.1.2011, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.1.2010

Репутация: нет
Всего: нет



Цитата(sergioK @ 6.1.2011,  20:32)
Код

     typedef void (&funcRef) (int);
    funcRef f=anyFunc;

Я не пойму. Ссылка на что? Где funcRef взялось? Почему в определении типа - ссылка? Ну может быт быть чего - то  не понял.&funcRef - Ссылка на что?

Ты хотя бы строку signal.h озвуч, что бы мы посмотрели.

Это сообщение отредактировал(а) log584 - 6.1.2011, 22:02
PM MAIL   Вверх
sergioK
Дата 6.1.2011, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 15.2.2008

Репутация: нет
Всего: нет



Цитата(log584 @ 6.1.2011,  21:33)
Я не пойму. Ссылка на что? Где funcRef взялось? Почему в определении типа - ссылка? Ну может быт быть чего - то  не понял.&funcRef - Ссылка на что?

ссылка на функцию, Я тоже не пойму ,  иначе бы не спрашивал, возможно это специально что-бы нельзя было пркомпелировать на С?


Код

 typedef  void (&funcRef ) (int); 



Код

 typedef  void (const * funcRef ) (int);  получаеться один и тот же эффект


и это 
набери  у себя код, может Я чего то не вижу , на С++ много лет не писал,


вот это   typedef const void (&funcRef ) (int) заставляет функцию быть void const
только зачем  ? это не мой код

 и какая разница между этими тремя вариантами 
const int  anyFunc(int a){
      cout<<a;
}
void int anyFunc(int a){
      cout<<a;
}
int  anyFunc(int a) const { // это только внутри класса 
      cout<<a;
}






PM MAIL   Вверх
mes
Дата 7.1.2011, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(sergioK @  6.1.2011,  21:32 Найти цитируемый пост)
ссылка на функцию, Я тоже не пойму ,  иначе бы не спрашивал, возможно это специально что-бы нельзя было пркомпелировать на С?

может стоит сформулировать вопрос так , чтоб остальным понятно  было ?

Цитата(sergioK @  6.1.2011,  21:32 Найти цитируемый пост)
typedef  void (const * funcRef ) (int);  получаеться один и тот же эффект

один эффект с чем ? такое вобще не должно компилиться.. 


Цитата(sergioK @  6.1.2011,  21:32 Найти цитируемый пост)
void int anyFunc(int a){
      cout<<a;


Цитата(sergioK @  6.1.2011,  21:32 Найти цитируемый пост)
  typedef const void (&funcRef ) (int) заставляет функцию быть void const

где Вы взяли этот ммм..ужас ?



--------------------
PM MAIL WWW   Вверх
bsa
Дата 8.1.2011, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



sergioK, const после названия метода класса - это квалификатор для указателя this внутри этого метода. Т.е. написав const ты получишь this типа const MyClass *this; Еще есть квалификатор volatile (отключение оптимизаций доступа к this).
PM   Вверх
миг
Дата 10.1.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 15.9.2008

Репутация: нет
Всего: 1



sergioK привет, кэп!

Это сообщение отредактировал(а) миг - 10.1.2011, 22:00
--------------------
Oaks may fall when reeds stand the storm.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1072 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.