LINUX.ORG.RU

C: макросы


0

0

Подсмотрел тут http://www.linux.org.ru/view-message.jsp?msgid=1897145 интересное решение по преобразованию макросов и числового в строковый формат, теперь вот мучаюсь :-)

Макросы в программе сейчас используются для определения размеров массивов, соответственно в fscanf выражения нужно вставлять строковое значение числового макроса за вычетом единицы (согласно man на fscanf ширина поля задется без завершающего '\0').

Нерабочий код (на примере того по ссылке):
#define MAXBETASIZE 1024
#define _s(a) #a
#define _string(a) _s(a)
...
char beta[MAXBETASIZE];
sscanf(bigstring, "%" _string(MAXBETASIZE-1) "s", &beta);

Единицу в последнем случае он не вычитает и ругается при сборке, можно ли препроцессор заставить вычитать её?

★★★★★

Совсем я запутался, это невозможно, препроцессор ведь :-)

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

Если нужен хороший препроцессор, то имеет смысл посмотреть в сторону M4. Там это будет:

define(`MAXBETASIZE', 1024) define(`_string', `%eval($1 - 1)s')

sscanf(bigstring, "_string(MAXBETASIZE)", &beta);

А M4 может даже #line вставлять.

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

> char beta[MAXBETASIZE+1];

Тогда уж: char beta[MAXBETALEN+1];

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