cpp вставляет дополнительное пространство между токенами - PullRequest
0 голосов
/ 08 июня 2009

Я пытаюсь заставить gnu - cpp сохранять специальные комментарии, такие как / * + ... /, потому что они нужны мне для подсказок оптимизатора. Это хорошо работает с cpp из xlc (AIX), но теперь я получаю дополнительное пространство между косой чертой и плюсом (/ )?

например:.

$ cat cpp-test.sql
#define _STAR *
#define OPT_HINT(x) /_STAR+ x _STAR/

select OPT_HINT(INDEX(TABLE table_pk)) * from table

$ /usr/bin/cpp -E < cpp-test.sql
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "<stdin>"

select / *+ INDEX(TABLE table_pk) */ * from table

$

Я бы хотел получить "select / * + INDEX (TABLE table_pk) * / * из таблицы".

Есть предложения?

С наилучшими пожеланиями

Dirk

1 Ответ

2 голосов
/ 08 июня 2009

Вы можете вставить токены вместе, используя оператор препроцессора ##:

#define F foo
#define B bar

F##B

производит

foobar

Но обратите внимание, что cpp предназначен для препроцессора C (и C ++) - он не должен быть инструментом общего назначения. Если вы действительно хотите делать подобные вещи, взгляните на альтернативные макропроцессоры, такие как m4.

Также обратите внимание, что построение комментариев не будет работать для кода C или C ++, так как они обрабатываются в другой фазе предварительной обработки, чем макросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...