2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3  След.
 
 Подскажите по С, что означает запись
Сообщение09.01.2013, 20:54 
Заблокирован


16/06/09

1547
Что означает запись
Используется синтаксис C
aa = bb->get(bb, bb->ccc);

где aa - int, bb - structure, get - элемент вида intptr_t, *ccc - void входит в структуру bb

Спасибо

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:02 
Заслуженный участник


09/09/10
3729
И что, оно компилируется? bb должен быть указателем на переменную классового типа, иначе никак.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:17 
Заблокирован


16/06/09

1547
В main.h
Используется синтаксис C
typedef struct xxx bb;
struct xxx {
          int                       *ppp;
          struct qqq                *qqq;
          int                        len;
          char                      *name;
          void                      *ccc;
              ......
          intptr_t                   get;
}
 
как-то так

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:33 
Заслуженный участник


09/09/10
3729
По-моему это, извините, чушь. Либо у вас есть дикие макросы, либо вы что-то исказили при передаче. Скорее всего, последнее: uint и string — "левые" типы.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:41 
Заблокирован


16/06/09

1547
да чушь там есть, её убрал. Дело в том, что там прямых типов вообще нету, только переопределённые int_ts, str_kp, поэтому пытался передать их, но неточно. Интерес представляют лишь типы ccc и get, входящие в bb - их передал точно

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:47 
Заслуженный участник


09/09/10
3729
Ну, ответ простой — это бессмыслица. Оно не компилируется, только что проверил.

-- Ср янв 09, 2013 22:53:30 --

Вообще, я понимаю, вы резали по живому. Наведите в вашей IDE курсор мыши на bb слева от -> — по идее, она должен высветить настоящее объявление bb. Потому что слева от -> должно стоять выражение, а никак не имя типа.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 21:54 
Заблокирован


16/06/09

1547
ЗамечТательно! :x Дело в том, что других ссылок на bb нету, а вся конструкция модульная. я перешарил все модули, но никаких bb не нашёл. Ну ладно. Хотя бы тогда скажите что означает
Используется синтаксис C
typedef struct xxx bb;

1) оба bb и xxx являются структурами одного сходного типа;
2) bb является структурой вида xxx;
или
3) xxx является структурой вида bb
Или что-то ещё?

-- Ср янв 09, 2013 22:56:55 --

Joker_vD в сообщении #669478 писал(а):
Наведите в вашей IDE курсор мыши на bb слева от
нереально. Модулей много. я открываю по одному. Сейчас навёл, ничего не высвечивает
Visual Studio 2010

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:00 
Заслуженный участник


09/09/10
3729
xxx — это ярлычок для структурного типа. Согласно синтаксису Си, переменные с таким типом объявляются как struct xxx variable_name. Поскольку писать struct всем влом, вводят для struct xxx новую кличку, bb. Теперь можно писать bb variable_name. Обычно, правда, пишут typedef struct xxx bb, *pbb — чтобы еще и указатель на эту структуру было легче определять (bb *pointer_name кажется, не работает).

Да кидайте в личку настоящий код, мне сегодня вечером особо заняться нечем, погляжу.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:03 
Заблокирован


16/06/09

1547
Joker_vD в сообщении #669487 писал(а):
Теперь можно писать bb variable_name.
и тогда это будет переменная типа xxx со всеми свойствами включая get и ссс? я почти угадал.

я тоже увидел что это какая-то чушь, но работает, поэтому и запостил тему. Спасибо за помощь

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:05 
Заслуженный участник


09/09/10
3729
temp03
Оно НЕ ДОЛЖНО работать. bb — это имя типа, а никак не переменной. Открывайте весь проект, щелкайте по bb правой кнопкой и жмите "Go to declaration"/"Перейти к объявлению".

-- Ср янв 09, 2013 23:12:39 --

Да более того, get(...) — это тоже бессмысленно, если у вас действительно стоит определение intptr_t get;

У вас происходит что-то нездоровое. Я рекомендую все же разобраться досконально. Грепайте.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:16 
Заблокирован


16/06/09

1547
улетела в личку

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:42 
Заслуженный участник


09/09/10
3729
Идиотский фокус:

Используется синтаксис C
#include <malloc.h>

typedef struct xxx bb;
typedef int(*pt)(bb*, void*);

struct xxx {
  pt      get;
  void   *ccc;
};

int main() {
  bb *bb;
  return bb->get(bb, bb->ccc);
}


Или еще короче:

Используется синтаксис C
typedef int xint;

int main() {
  xint xint = 42;
  return xint;
}

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 22:56 
Заблокирован


16/06/09

1547
Joker_vD в сообщении #669512 писал(а):
Идиотский фокус:

Используется синтаксис C
#include <malloc.h>

typedef struct xxx bb;
typedef int(*pt)(bb*, void*);

struct xxx {
  pt      get;
  void   *ccc;
};

int main() {
  bb *bb;
  return bb->get(bb, bb->ccc);
}
Замечательный фокус! А в чём прикол фокуса? Что есть get? Что есть get(bb, bb->ccc)? Ну и главный вопрос! что есть bb->get(bb, bb->ccc)?

Ваш фокус в точности передаёт смысл того что нужно. Так в студию!

-- Ср янв 09, 2013 23:59:42 --

да и вот эта запись
Используется синтаксис C
typedef int(*pt)(bb*, void*);
мне была бы очень интересна

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 23:03 
Заслуженный участник


09/09/10
3729
temp03 в сообщении #669516 писал(а):
Что есть get?

Поле структуры xxx, имеющее тип "указатель на функцию, принимающую указатель на структуру xxx и указатель в никуда, и возвращающая int".

temp03 в сообщении #669516 писал(а):
Что есть get(bb, bb->ccc)?

Вызов функции, на которую указывает get.

temp03 в сообщении #669516 писал(а):
что есть bb->get(bb, bb->ccc)?

Вызов функции, на которую указывает поле get, принадлежащее переменной bb. С параметрами такими-то.

-- Чт янв 10, 2013 00:04:22 --

temp03 в сообщении #669516 писал(а):
typedef int(*pt)(bb*, void*);

pt — это тип-указатель на функцию, которая принимает на вход указатель на переменную типа bb и указатель в никуда, и возвращает int.

 Профиль  
                  
 
 Re: Подскажите по С, что означает запись
Сообщение09.01.2013, 23:16 
Заблокирован


16/06/09

1547
Joker_vD в сообщении #669518 писал(а):
Вызов функции, на которую указывает поле get, принадлежащее переменной bb. С параметрами такими-то.
ясно. Вопрос всё же остаётся в декларации этого get.
Joker_vD в сообщении #669518 писал(а):
pt — это тип-указатель на функцию, которая принимает на вход указатель на переменную типа bb и указатель в никуда, и возвращает int.
т.е. без него вызова функции не будет?

-- Чт янв 10, 2013 00:21:05 --

круто! мла мла мла. Спасибо! Это же и есть указатель, которого мы искали. Т.е. получается вопрос закрыт? Не нужно искать get?
_______________

выполнил поиск по pt. К сожалению тоже ничего. Странно. Но раз get - это pt, а pt тоже нигде нету, то что-то же где-то должно быть ????

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу 1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group