Приветствую! Собираю код, встретил такой кусок: Код (Text): #ifdef HAVE_BUGGY_TME_SUPPORT u_int bpf_filter(pc, p, wirelen, buflen,mem_ex,tme,time_ref) register struct bpf_insn *pc; register u_char *p; u_int wirelen; register u_int buflen; PMEM_TYPE mem_ex; PTME_CORE tme; struct time_conv *time_ref; #else //HAVE_BUGGY_TME_SUPPORT u_int bpf_filter(pc, p, wirelen, buflen) register struct bpf_insn *pc; register u_char *p; u_int wirelen; register u_int buflen; #endif //HAVE_BUGGY_TME_SUPPORT { register u_int32 A, X; register int k; ... } при сборке ругается: Код (Text): Error 83 error C2065: 'p' : undeclared identifier d:\ Error 84 error C2065: 'wirelen' : undeclared identifier Error 85 error C2065: 'buflen' : undeclared identifier Error 86 error C2448: 'bpf_filter' : function-style initializer appears to be a function definition Error 87 error C2065: 'pd' : undeclared identifier Error 88 error C2065: 'headersize' : undeclared identifier Error 89 error C2448: 'bpf_filter_with_2_buffers' : function-style initializer appears to be a function definition Подозрения, что компилятору нужно, что-то сказать, ввиду такой вот конструкции. Как видно по коду необъявленные идентификаторы идут вслед за названием функции. Неясно.
Это старый диалект С (был до стандартизации С89/ANSI C). Тогда у параметров функций типы не указывались, указывались только имена. Типы указывались в теле функции, там же где обычно локальные переменные объявляют. Сейчас это недопустимо - у параметров функций не указаны типы, потому и ругается. Скопируй типы переменных из тела в объявление функции, а в теле поудаляй. К примеру вместо Код (Text): u_int bpf_filter(pc, p, wirelen, buflen) register struct bpf_insn *pc; register u_char *p; u_int wirelen; register u_int buflen; должно быть Код (Text): u_int bpf_filter(struct bpf_insn *pc, u_char *p, u_int wirelen, u_int buflen)