LINUX.ORG.RU

ошибка: ожидается идентификатор

 


0

1

Помогите разобраться. В программу входят вот такие строки

#include <sys/ptrace.h>
....
struct syscallentry syscall_ptrace = { 
    .name = "ptrace",
    .num_args = 4,
    .arg1name = "request",
    .arg1type = ARG_OP,
    .arg1list = { 
        .num = 25, 
        .values = { PTRACE_TRACEME, PTRACE_PEEKTEXT, PTRACE_PEEKDATA, PTRACE_PEEKUSR,
                PTRACE_POKETEXT, PTRACE_POKEDATA, PTRACE_POKEUSR, PTRACE_GETREGS,
                PTRACE_GETFPREGS, PTRACE_GETSIGINFO, PTRACE_SETREGS, PTRACE_SETFPREGS,
                PTRACE_SETSIGINFO, PTRACE_SETOPTIONS, PTRACE_GETEVENTMSG, PTRACE_CONT,
                PTRACE_SYSCALL, PTRACE_SINGLESTEP, PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP,
                PTRACE_KILL, PTRACE_ATTACH, PTRACE_DETACH, PTRACE_GETSIGMASK,
                PTRACE_SETSIGMASK },
    },  
    .arg2name = "pid",
    .arg3name = "addr",
    .arg3type = ARG_ADDRESS,
    .arg4name = "data",
    .sanitise = sanitise_ptrace,

    .flags = AVOID_SYSCALL,
};
Компиляция заканчивается вот такой ерундой
lcc: "/usr/include/sys/ptrace.h", строка 33: ошибка: ожидается идентификатор
    PTRACE_TRACEME = 0,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 37: ошибка: ожидается идентификатор
    PTRACE_PEEKTEXT = 1,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 41: ошибка: ожидается идентификатор
    PTRACE_PEEKDATA = 2,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 49: ошибка: ожидается идентификатор
    PTRACE_POKETEXT = 4,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 53: ошибка: ожидается идентификатор
    PTRACE_POKEDATA = 5,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 61: ошибка: ожидается идентификатор
    PTRACE_CONT = 7,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 65: ошибка: ожидается идентификатор
    PTRACE_KILL = 8,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 70: ошибка: ожидается идентификатор
    PTRACE_SINGLESTEP = 9,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 94: ошибка: ожидается идентификатор
    PTRACE_ATTACH = 16,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 98: ошибка: ожидается идентификатор
    PTRACE_DETACH = 17,
    ^

lcc: "/usr/include/sys/ptrace.h", строка 112: ошибка: ожидается идентификатор
    PTRACE_SYSCALL = 24,
    ^
Файл <sys/ptrace.h> у меня выглядит следующим образом http://pastebin.com/dVaMfCzr

Сделал тестовый файл

#include <stdio.h>
#include <sys/ptrace.h>

void main(){
	printf("HW %d\n",PTRACE_SYSCALL);
}
Работает отлично, в чем может быть дело?

★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

Похоже что в первом файле неявно включается ещё какой-то заголовочник, который определяет те же константы макросами. Можно вставить для проверки:

#ifdef PTRACE_TRACEME
#error
#endif
#include <sys/ptrace.h>
Dendy ★★★★★
()

Вангану, что PTRACE_* уже где-то определены.

AptGet ★★★
()

По сабжу уже ответили.

Здесь шутка про lcc.

d ★★★★
()
Ответ на: комментарий от Dendy

Если просто закомментить

#include <sys/ptrace.h>
То компиляция заканчивается вот этим
CC	syscalls/ptrace.o
lcc: "syscalls/ptrace.c", строка 39: ошибка: идентификатор "PTRACE_GETREGS" не
          определен
  				PTRACE_POKETEXT, PTRACE_POKEDATA, PTRACE_POKEUSR, PTRACE_GETREGS,
  				                                                  ^

lcc: "syscalls/ptrace.c", строка 40: ошибка: идентификатор "PTRACE_GETFPREGS"
          не определен
  				PTRACE_GETFPREGS, PTRACE_GETSIGINFO, PTRACE_SETREGS, PTRACE_SETFPREGS,
  				^

lcc: "syscalls/ptrace.c", строка 40: ошибка: идентификатор "PTRACE_SETREGS" не
          определен
  				PTRACE_GETFPREGS, PTRACE_GETSIGINFO, PTRACE_SETREGS, PTRACE_SETFPREGS,
  				                                     ^

lcc: "syscalls/ptrace.c", строка 40: ошибка: идентификатор "PTRACE_SETFPREGS"
          не определен
  				PTRACE_GETFPREGS, PTRACE_GETSIGINFO, PTRACE_SETREGS, PTRACE_SETFPREGS,
  				                                                     ^

4 ошибки обнаружено при компиляции "syscalls/ptrace.c".
make: *** [syscalls/ptrace.o] Ошибка 1

LIKAN ★★★
() автор топика

Вроде и у lcc есть опция ″-E″, прогоните, посмотрите что после прероцессора получается, на предмет определений/переопределений PTRACE_TRACEME.

mky ★★★★★
()

а с gcc работает ?

joy4eg ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.