Это дает мне ошибку: "вставка" a "и" ++ "не дает действительный токен предварительной обработки"
И это правильно. И C не позволяет использовать оператор вставки токенов таким образом.
Похоже, вы хотите создать выражение вида
ms->name++
Обратите внимание, что он состоит из четырех токенов: ms
, ->
, name
и ++
. Если ваша операция вставки токена была выполнена, когда макро-аргумент, соответствующий name
, фактически имел форму идентификатора, скажем Mark
, то результатом был бы один токен ->Mark
(между двумя другими). ->Mark
не является действительным токеном.
Несмотря на то, что пробел часто разделяет токены, он не требуется между большинством токенов. С другой стороны, между токенами всегда допускается , поэтому вы всегда можете написать приведенное выше выражение, например так:
ms -> name ++
или как это:
ms->name ++
или как это:
ms /* look, Ma, a comment! */
->name
++
Насколько я могу судить, ваш макрос абсолютно не нуждается в вставке токена. Просто удалите ##
.