LINUX.ORG.RU

Препроцессор gcc


0

1

Доброй ночи.
Хочу узнать, как возможно сделать вложенные определения #ifdef
Нужно чтоб если определена константа DEBUG
Делалось ещё несколько проверок, определений констант, и если они определены, то должно что-то делаться.. как это сделать?

#define DEBUG     1
#define CONST_1   1
#define CONST_2   1

#ifdef  DEBUG

  ВОТ ТУТ НАДО СДЕЛАТЬ ПРОВЕРКУ НА ОПРЕДЕЛЕНИЯ  КОНСТАНТ   CONST_1  и CONST_2 ,  и если константа (хотябы одна из них) определена, то выполнить вызов какойто функции.

#endif


Как это сделать?

Deleted
Ответ на: комментарий от Deleted

Мнэ... препроцессор не телепат, он делал то, и только то, что Вы ему сказали - он по другому не умеет, это основная аксиома программирования и один из законов Мерфи;-).

Вы скорее всего сказали ему не то, что требовалось - никаких проблем с вложенными ifdef-ами нет, просто надо быть внимательным, в частности писать #endif //имя-макроса что б не запутаться.

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

У меня появился следующий вопрос.
Как сделать с помощью препроцессора проверку текущей архитектуры? ( 32 разряда или 64) .
+ К этому хочется узнать как грамотно сделать модуль для упращённой компиляции для различных ядер + к этому
Хочется узнать, как быстро определить различия в коде ядра..скажем 2.6.36.0 и 2.6.36.3

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

> Как сделать с помощью препроцессора проверку текущей архитектуры?

глобально — никак. но…

в гцц определены __x86_64, __x86_64__, __amd64 и __amd64__ для 64-битных х86-процессоров. для 32-х — __i386, __i386__ и i386.

для других компиляторов/архитектур тоже есть подобные «стандартные» дефайны… навернеое :)

> + <текст/>

нифига не понял…

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

Если модуль ядра, то для 2.6 он должен компилироваться через Makefile из исходников ядра и там будут определены #definе'ы с версией ядра. По ним делается #ifdef.

Хочется узнать, как быстро определить различия в коде ядра..скажем 2.6.36.0 и 2.6.36.3

Сделать diff на каталоги с исходниками, только, толку от этого будет мало. Есди модуль должен работать со всеми ядрами 2.6.x, то нужно долго разбираться.

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

Если вы собираетесь разрабатывать модуль для ядра linux, то вам нужно почитать что-то вроде http://www.opennet.ru/docs/RUS/lkmpg26/ .

Для модуля пишется простой Makefile, а компиляция осуществляется примерно так:

make -C /usr/src/linux SUBDIRS=$PWD modules

а в исходниках модуля уже делаются конструкции вида «#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)»

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