В 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 в качестве целочисленной константы.