Init ha sh переменная препроцессором - PullRequest
0 голосов
/ 19 января 2020

Я нашел это описание о создании ха sh строки с размером uint32_t: http://lolengine.net/blog/2011/12/20/cpp-constant-string-hash

Я хочу использовать этот макрос для инициализации глобальной переменной. Я не хочу добавлять строку в скомпилированный двоичный файл, только ха sh.

Но при использовании этого макроса я получаю ошибку: error:Initializer element is not constant

Есть ли обходной путь? поскольку это для C & G CC компилятора?

Любая другая идея поместить ха sh строки препроцессором?

1 Ответ

0 голосов
/ 19 января 2020

В C инициализатор stati c должен быть постоянным выражением, а C очень требователен к тому, что такое постоянное выражение:

arithmeti c константное выражение должно иметь арифметический тип c и иметь только операнды, которые являются целочисленными константами, плавающими константами, константами перечисления, символьными константами, sizeof выражениями, результаты которых являются целочисленными константами, и выражениями _Alignof. (§6.6 / 8)

Обратите внимание, что строковые литералы отсутствуют в списке допустимых операндов, поэтому "A string"[2] не подходит.

C ++ не требует stati c инициализаторы должны быть константными выражениями, и это также намного более щедро в отношении того, что принимается как константное выражение. (Например, переменная static const int может использоваться в C ++, но не в C.)

Таким образом, препроцессор C не сможет помочь вам в создании состояния c объявление инициализируется ха sh, вычисленным из строки символов. Если вы действительно хотите это сделать, вам лучше всего выполнить предварительную обработку исходного файла с помощью утилиты, которая идентифицирует вызовы HASH и заменяет их вычисленным ha sh в качестве целочисленной константы.

...