LINUX.ORG.RU

Перевод с C в C++


0

0

У меня есть заголовочный файл. Если я подключаю его к C - файлам, то все нормально, но мне надо подключить его к CPP файлам. При это он выдает кучу ошибок. Например, есть строка int (handler*) {int,int} Пишет handler is not declared in this scope Может, можно как-нибудь справиться с этим (править заголовочный файл нельзя).


Чота строчка какая-то песец страшная. Не си это!

anonymous
()
Ответ на: комментарий от Rendal

сделай cut&&paste хотябы начала файла(хотябы сотню строчек) а мы здесь посмотрим с кем ты имееш секс.

cvv ★★★★★
()

Это достандартные имени кернигана и ричи си.
Некоторые компиляторы сей едят так, некоторые едят с флагом. Некоторые вапще не едят.
Если не найдёшь нужного флага в своём компайлере, попробуй врапперы на стандартных сях.

gpg
()
Ответ на: комментарий от gpg

>Это достандартные имени кернигана и ричи си.

посмотрите внимательней. Вы уверенны??? я видел много кода в стиле кернигана и ричи но такое я вижу в первые.

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

>Это достандартные имени кернигана и ричи си. 

Насколько я понимаю, ты имеешь ввиду такую штуку

int f (a,b)
int a, int b
{
    // do smth.
}

У автора поста "int, int" внутри фигурных скобок. Честно говоря, это вообще ни на что не похоже.

Хотя ... давно это было ... может, я и сам что-то с чем-то путаю?

anonymous
()
Ответ на: комментарий от cvv

Я исхожу из того, что сишный компилятор это съел, а Rendal скорее всего ошибся в цитировании.
Это более правдоподобно, чем чудодейственный компилятор цэ.

gpg
()
Ответ на: комментарий от gpg

Кстати, если заменить фигурные скобки на круглые, то ошибка будет только в отсутствии extern и ;
Это ещё более правдоподобная расшифровка.

gpg
()
Ответ на: комментарий от gpg

> Кстати, если заменить фигурные скобки на круглые, то ошибка будет только в отсутствии extern и ;

Нет. Даже если это 'int (handler*)(int, int)' - это точно не функция, и не указатель на нее (иначе было бы *handler).

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

Прошу у всех прощения за ошибку. Конечно, этот код - полная чепуха. На самом деле конструкция там такая:
int rt_request_linux_irq(unsigned irq,
irqreturn_t (*handler)(int irq,
void *dev_id,
struct pt_regs *regs),
char *name,
void *dev_id);
А вот несколькими строчками выше:
int rt_request_irq(unsigned irq,
int (*handler)(unsigned irq, void *cookie),
void *cookie,
int retmode);
И это компилится без ошибок.
Дело здесь в typedef void irqreturn_t, который определен в подключаемом заголовочном файле, потому что когда я меняю irqreturn_t на void, он больше не пишет в том месте ошибки. Можно как-нибудь заставить это заработать, не исправляя заголовочный файл?

Rendal
() автор топика
Ответ на: комментарий от Rendal

так куда получше. только ж я тебя просил давать куски побольше ато всёравно тяжеловато.

вобщем ситуация действительно немного странная

1) попытайся поигратся ключами типа -std=gnu99

2)попытайся сделать что-то типа -Dirqreturn_t=void

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

Насколько я понял ситуацию, имеется два хедера, в одном тайпдеф, в другом его использование.
Почему бы просто не включить первый хедер перед вторым?

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