Синтаксис препроцессора для использования #define в качестве идентификатора (имени функции) и строки - PullRequest
2 голосов
/ 25 февраля 2010

Я не уверен, возможно ли это, но я хотел бы создать общий объектный файл и хотел бы упростить его использование, имея #define, который можно использовать для разыменования имен функций. 1002 *

В libfoo.h

#define FOO_SO_FUNCTION_A    aFunction

В libfoo.so

#include "libfoo/libfoo.h"

extern "C" int FOO_SO_FUNCTION_A( void )
{
    ...
}

В clientfoo

#include "libfoo/libfoo.h"

...
libfoofunc = dlsym( libfoo, MAKE_STRING(FOO_SO_FUNCTION_A) );

Моя проблема в том, что

#FOO_SO_FUNCTION_A

Просто изменится на "FOO_SO_FUNCTION_A", потому что препроцессор по праву запускается только один раз. Есть ли другой способ сделать это?

1 Ответ

5 голосов
/ 25 февраля 2010

Используйте это:

#define REALLY_MAKE_STRING(x) #x
#define MAKE_STRING(x) REALLY_MAKE_STRING(x)

Из-за некоторых деталей правил, когда именно препроцессоры заменяют макросы, требуется дополнительный уровень косвенности.

...