Неясная конструкция.

Тема в разделе "LANGS.C", создана пользователем neutronion, 25 мар 2011.

  1. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Приветствую! Собираю код, встретил такой кусок:
    Код (Text):
    1. #ifdef HAVE_BUGGY_TME_SUPPORT
    2. u_int bpf_filter(pc, p, wirelen, buflen,mem_ex,tme,time_ref)
    3.     register struct bpf_insn *pc;
    4.     register u_char *p;
    5.     u_int wirelen;
    6.     register u_int buflen;
    7.     PMEM_TYPE mem_ex;
    8.     PTME_CORE tme;
    9.     struct time_conv *time_ref;
    10. #else  //HAVE_BUGGY_TME_SUPPORT
    11. u_int bpf_filter(pc, p, wirelen, buflen)
    12.     register struct bpf_insn *pc;
    13.     register u_char *p;
    14.     u_int wirelen;
    15.     register u_int buflen;
    16. #endif //HAVE_BUGGY_TME_SUPPORT
    17.  
    18. {
    19.     register u_int32 A, X;
    20.     register int k;
    21.  
    22.         ...
    23. }
    при сборке ругается:
    Код (Text):
    1.  
    2. Error   83  error C2065: 'p' : undeclared identifier    d:\
    3. Error   84  error C2065: 'wirelen' : undeclared identifier 
    4. Error   85  error C2065: 'buflen' : undeclared identifier  
    5. Error   86  error C2448: 'bpf_filter' : function-style initializer appears to be a function definition 
    6. Error   87  error C2065: 'pd' : undeclared identifier  
    7. Error   88  error C2065: 'headersize' : undeclared identifier  
    8. Error   89  error C2448: 'bpf_filter_with_2_buffers' : function-style initializer appears to be a function definition
    Подозрения, что компилятору нужно, что-то сказать, ввиду такой вот конструкции. Как видно по коду необъявленные идентификаторы идут вслед за названием функции. Неясно.
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Это старый диалект С (был до стандартизации С89/ANSI C).
    Тогда у параметров функций типы не указывались, указывались только имена.
    Типы указывались в теле функции, там же где обычно локальные переменные объявляют.

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

    К примеру вместо
    Код (Text):
    1. u_int bpf_filter(pc, p, wirelen, buflen)
    2.     register struct bpf_insn *pc;
    3.     register u_char *p;
    4.     u_int wirelen;
    5.     register u_int buflen;
    должно быть

    Код (Text):
    1. u_int bpf_filter(struct bpf_insn *pc, u_char *p, u_int wirelen, u_int buflen)
     
  3. neutronion

    neutronion New Member

    Публикаций:
    0
    Регистрация:
    31 мар 2010
    Сообщения:
    1.100
    Спасибо! Попробую.