В соответствии с ссылкой C определение #define
равно
#define <identifier>[( parameters, ... )] [replacement-list]
Вы не должны использовать квадратные скобки в пределах <identifier>
(см. стандарт C99 ) и поэтому предложенное вами решение не будет должным образом обработано препроцессором.
Вместо этого будет работать
#define B(x) St[x].v0 // note the brackets
, где вы будете передавать дополнительные параметры в макрос (используя скобки),Однако это запутает ваш код и, скорее всего, запутает пользователей / читателей вашего кода.См. Также , почему вы должны быть осторожны с макросами .