Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: указатель на функцию
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
TigerSHARC
есть код

CODE
//! Command processing function
typedef tBool (* FuncCmd)( some_struct * p, char * pArg );


//! Command description
typedef struct tagPARSE_cmd {
const char * p; //!< command name
FuncCmd func; //!< command functions
} tPARSE_cmd;


затем происходит вызов

CODE
func(x,y);



Непонятно где тело функции func и что в ней происходит.
_Артём_
Цитата(TigerSHARC @ Aug 31 2012, 22:54) *
затем происходит вызов

CODE
func(x,y);

И что вызов действительно происходит?
Компилятор скомпилировал, линкер слинковал?


Цитата(TigerSHARC @ Aug 31 2012, 22:54) *
Непонятно где тело функции func и что в ней происходит.

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

Как-то так попробуте:
Код
tPARSE_cmd Parser;

tBool Cmd1( some_struct * p, char * pArg )
{
// парсинг команды 1
}

tBool Cmd2( some_struct * p, char * pArg )
{
// парсинг команды 2
}

int main()
{
/// bla bla bla - какой-то код
Parser.funk=Сmd1;
tBool parsing_result=Parser.funk(A, B);
if (parsing_result) {
  // bla bla bla - какой-то код
}
  /// bla bla bla - какой-то код
  Parser.funk=Сmd2;
parsing_result=Parser.funk(C, D);
if (parsing_result) {
  // bla bla bla - какой-то код
}
}


PS- Offtop - не пойму в чём сермяга, писать так
Код
typedef struct tagPARSE_cmd {
    const char       * p;    //!< command name
    FuncCmd    func;    //!< command functions
} tPARSE_cmd;

чем хуже писать так:
Код
struct tPARSE_cmd {
    const char       * p;    //!< command name
    FuncCmd    func;    //!< command functions
};

?
TigerSHARC
Цитата(_Артём_ @ Sep 1 2012, 00:38) *
PS- Offtop - не пойму в чём сермяга, писать так
Код
typedef struct tagPARSE_cmd {
    const char       * p;    //!< command name
    FuncCmd    func;    //!< command functions
} tPARSE_cmd;

чем хуже писать так:
Код
struct tPARSE_cmd {
    const char       * p;    //!< command name
    FuncCmd    func;    //!< command functions
};

?



смысл в том что такой код скомпилирует любой компилятор. Это сделано для переносимости. здесь где-то тема была....

P.S. по сабжу спасибо. Надо внимательнее код глянуть. Просто думал какие-то секретв есть, но, видимо тело где-то всё равно должно быть.
ReAl
Цитата(_Артём_ @ Aug 31 2012, 23:38) *
PS- Offtop - не пойму в чём сермяга, писать так
Код
typedef struct tagPARSE_cmd { ... } tPARSE_cmd;
чем хуже писать так:
Код
struct tPARSE_cmd { ... };
Для C++ разницы нет, в обеих случаях потом можно писать для объявления/определения переменной
Код
tPARSE_cmd parse_cmd;
tPARSE_cmd * SomeFunc(tPARSE_cmd *arg);
Для C в первом случае можно писать так же, во втором придётся
Код
struct tPARSE_cmd parse_cmd;
struct tPARSE_cmd * SomeFunc(struct tPARSE_cmd *arg);
Просто надоедает.
Но все конструкции должны употребляться всеми компиляторами. Некоторые очень старые могут не понять
Код
typedef struct /* тут без имени вообще либо точно такое же имя, как внизу */ {
    const char       * p;    //!< command name
    FuncCmd    func;    //!< command functions
} tPARSE_cmd;
поэтому для совместимости пишут имя структуры с префиксом или суфиксом, кому лень — просто подчёркивание, кому не лень — слово «tag».
Я давно пишу просто typedef struct { /* ... */ } name; (и то только если исходник предназначен для компиляции в С-режиме).
_Артём_
Цитата(ReAl @ Sep 1 2012, 10:08) *
Для C++ разницы нет

Понятно. Я обычно создаю в ИАРе С++ проект даже не глядя нужен ли он там...

Цитата(ReAl @ Sep 1 2012, 10:08) *
Некоторые очень старые могут не понять

Может кому-то это и надо.

Цитата(ReAl @ Sep 1 2012, 10:08) *
(и то только если исходник предназначен для компиляции в С-режиме).

А в каких случаюх может возникнуть необходимость в С-режиме?
Бывает такое, что на С++ никак нельзя?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.