LINUX.ORG.RU

Функции в структуре Си

 , ,


0

2
#include <stdio.h>

typedef struct object {
  int n;
  int (*prop)();
} object;

int main(void)
{
  int prop(int n)
  {
    return 64+n;
  };
  struct object obj = {26, &prop};
  printf("%d\n", obj.prop(obj.n));
  return 0;
}



В этом коде у меня есть некая структура object, в которой есть функция, а точнее указатель на функцию
В структуре также есть поле n, где хранится некое число
Я создаю структуру obj, куда заношу число и адрес функции в памяти
Говнокод ли это? Как сделать это лучше? Есть ли какой-нибудь аналог this из Java/JS/other-OOP-lang, что бы обратится к полю уже существующей структуры
Если в Си такой город а-ля ООП считается говном, то покажите пример, как сделать это лучше
Привычка организовывать пронстранства имен - плохо ли это в Си? Или забить и использовать static?
P.S.: Я только учусь, хочу стать Мастером Си, писать полезные приложения в 50 строчек и т.д. (шучу)

★★

Последнее исправление: beastie (всего исправлений: 1)

Ответ на: комментарий от waker

Хватит. А то мы эдак с тобой угребище вроде glib родим сейчас!

anonymous
()
Ответ на: комментарий от anonymous

Вложенные функции очень хороши, когда хочется не тащить 100500 аргументов в них! У меня иной раз даже вложенные функции внутри вложенных функций были!

anonymous
()
Ответ на: комментарий от mystery

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

Iron_Bug ★★★★★
()

что касается кода, что typedef struct foo {} foo; есть некоторое излишество. если вообще использовать typedef, то можно не именовать структуру: typedef struct {} foo;

однако, есть мнение (в частности в кернеле), что typedef якобы скрывает от юзера сущность данных и надо везде писать struct foo, а typedef не использовать. я лично против typedef ничего не имею, но в ядре использую их соглашения о коде.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Я typedef использую, потому что прикольно делать Struct mystruct
Навроде синтаксического сахара
Я уже сделал для себя typedef const char* string

mystery ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.