Препроцессор C избавляется от __align__ и __attribute__ - PullRequest
6 голосов
/ 21 апреля 2011

Я работаю с примитивом C Parser, который не обрабатывает директиву препроцессора.

Я могу без проблем обработать большую часть заголовка переключателем -E.

В последнее время я обнаружил случаи, когда присутствуют атрибут и align .

Я пытался избавиться от них с помощью этой настройки:

gcc -D "aligned(ARGS)" \
    -D "__align__(ARGS)" \
    -D "__attribute__(ARGS)" \
    -E /usr/local/include/fancyheader.h 

Обновление:

Но безуспешно, пример:

struct __attribute__((aligned(16))) long4
{
  long int x, y, z, w;
};

Вышеуказанные операторы преобразуются в, с этим "1" в ожидании около

struct 1 long4
{
  long int x, y, z, w;
};

Кто знает, как правильно избавиться от расширений __align__ и __attribute__?

Ответы [ 3 ]

10 голосов
/ 21 апреля 2011

Что происходит, когда вы используете -D "aligned(ARGS)="?

3 голосов
/ 21 апреля 2011

Препроцессор присваивает значение 1 всем макросам, определенным в командной строке, без указания списка замены.Например, если вы скомпилируете с -DFOO:

std::cout << FOO << std::endl;

выведет 1.Если вы хотите явно установить список замены макросов пустым, используйте -DFOO= (или в вашем случае -D__align__(x)=.

0 голосов
/ 21 апреля 2011

Как насчет отмены определения всех встроенных и предопределенных макросов с помощью параметра -U, а затем создания новых определений с помощью параметра -D?

...