Попытка использовать метки goto в макросе C (работает MSVC), но если макрос вызывается несколько раз в одной и той же функции вызывающей стороны, появляются переопределенные ошибки меток C2045.
Я пытался использовать __label__ из этогопример: https://www.geeksforgeeks.org/local-labels-in-c/ но это ключевое слово label, вероятно, gcc только потому, что MSVC сообщает о метке undefined.
Я понимаю, что это действительно запутанно и глупо, но я пишу транспортер для преобразования кода MASM в C. ВMASM, метки определяются локально с помощью директивы LOCAL, __label__ используется GCC, но что MSVC предлагает в качестве решения?
#include <stdint.h>
#include <stdio.h>
#define Loopy(AA) { \
RTSZ_0:; \
if (AA >= 5) { goto RTSZ_1; } \
AA += 1; \
goto RTSZ_0; \
RTSZ_1:; \
}
int main()
{
int AA = 0;
Loopy(AA);
Loopy(AA);
return 0;
}
Я ожидал, что меткам goto будет назначена уникальная метка, чтобы привключенный несколько раз, не будет ошибок переопределения.
Есть ли ключевое слово C, которое можно применить к макросу или обходному пути? Что-то вроде:
__Uniquelabel__ RTSZ_0; \
__Uniquelabel__ RTSZ_1; \
Есть идеи? Спасибо!