Войти
ФлеймФорумПрограммирование

[C]Функция как член структуры. (2 стр)

Страницы: 1 2
#15
17:54, 5 ноя. 2012

Chaos_Optima
А что, если структура анонимная?


#16
17:54, 5 ноя. 2012

Chaos_Optima
> вполне возможно что он просто не заметил.

У него вообще нет идентификатора kernel
Я не знаю, можно ли писать sizeof(*Kernel)

#17
17:59, 5 ноя. 2012

Chaos_Optima
> а не проще было сразу сказать что надо писать не
> Kernel=malloc(sizeof(Kernel));
> а
> Kernel=malloc(sizeof(kernel));

В случае Pure C ему надо было бы вообще писать Kernel = malloc(sizeof(struct kernel));

И я уже сказал, что именование сущностей глупое: переменная — с большой буквы, поле структуры — с большой, функция — с большой, структура — с маленькой.

#18
18:04, 5 ноя. 2012

TarasB
> Я не знаю, можно ли писать sizeof(*Kernel)

typedef struct Test {
  char t[10];
} Test;

Test* test = (Test*) 0;
printf("%d\n", sizeof(*test));

Ошибки, вроде, быть не должно.

#19
18:33, 5 ноя. 2012

Да, так сработало: http://ideone.com/VfXVGP

#20
18:39, 5 ноя. 2012

=A=L=X=
TarasB
$tatic
Chaos_Optima
Спасибо большое всем!
Сильно помогли :)

#21
20:37, 5 ноя. 2012

MrGruffi
Держи няшку:D

#include <stdio.h>
 
typedef void Start1(void);
struct Kernel
{
    Start1 Start;
} kernel;
 
void Kernel::Start(void)
{
 
}
 
int main(int argc, char **argv)
{
    kernel.Start();
}
http://ideone.com/sZgRua
#22
23:21, 5 ноя. 2012

laMer007
> #include <stdio.h>
>
> typedef void Start1(void);
> struct Kernel
> {
> Start1 Start;
> } kernel;
>
> void Kernel::Start(void)
> {
>
> }
>
> int main(int argc, char **argv)
> {
> kernel.Start();
> }
Спасибо конечно. Но на данном этапе С++ ООП мне явно не нужен :)

#23
0:24, 6 ноя. 2012

MrGruffi
> Спасибо конечно
Это была шутка, но компилируется. :-[

#24
2:41, 6 ноя. 2012

изобретаем с++:

struct kernel 
{
  int (*Start)(void);

  void (*destructor)(void);
}*Kernel;

int Start(void)
{
  printf("50","%i");
}

void kernel_destructor(void)
{
}

struct kernel *new_kernel(void)
{
  struct kernel Kernel;

  Kernel=malloc(sizeof(Kernel));
  Kernel->Start=&Start;
  Kernel->destructor = &kernel_destructor;

  return Kernel;
}

void delete_kernel(kernel *k)
{
  k->destructor();
  free(k);
}

int main(int argc, char **argv)
{
  kernel *kernel;

  Kernel = new_kernel();
  Kernel->Start();
  delete_kernel(Kernel);

  return 0;
}
Страницы: 1 2
ФлеймФорумПрограммирование

Тема в архиве.