Я отвечу на ваш вопрос, что вы хотите иметь способ создания токенов уникальных идентификаторов через препроцессор.
gcc имеет расширение, которое называется __COUNTER__
, и делает то, что вы ожидаете от его имени. Вы можете комбинировать это с конкатенацией макросов ##
для получения уникальных идентификаторов.
Если у вас есть компилятор C99, вы можете использовать P99 . У него есть макросы, называемые P99_LINEID
и P99_FILEID
. Их можно использовать как
#include "p99_id.h"
P99_LINEID(some, other, tokens, to, make, it, unique, on, the, line)
и аналогично для P99_FILEID
.
Первый отображает имя из ваших токенов, номер строки и хеш, который зависит от того, сколько раз был включен файл "p99_id.h". Второй макрос просто использует этот хеш, а не номер строки, так что имя воспроизводимо в нескольких местах внутри одной и той же единицы компиляции.
Эти два макроса также имеют аналоги P99_LINENO
и P99_FILENO
, которые просто генерируют большие числа вместо токенов-идентификаторов.