ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1000345 Топик полностью
fk0, легенда (30.04.2020 14:33, просмотров: 328) ответил abivan на одна строка лишняя оказалась
А что такое qcl? У меня нехорошее предчувствие, что это что-то микрософтовское, у которого своё представление о порядке раскрытия макросов-аргументов при передаче в другой макрос. Отсюда и лишняя строка. По стандарту (мой вариант) STRINGIFY написан 2 раза потому, что просто _STRINGIFY(n) не сработает, если n является в свою очередь макросом. На выходе будет "n". Поэтому два макроса: вначале STRINFIFY(n) превращается в _STRINGIFY(5), при первом раскрытии макросов, а 

потом

_STRINGIFY(5) превращается в "5". У микрософта же какое-то своё странное представление о порядке раскрытия аругментов макросов, я его никогда не понимал, но оно отличается от стандарта и заставляет сложные макросы выписывать два раза: одну версию для gcc и стандартных компиляторов, вторую для микрософтовоских.


PS: ну да, в теле другого макроса макросе вместо STRINGIFY можно использовать сразу _STRINGIFY.


Демонстрация эффекта:

http://coliru.stacked-crooked.com/a/202737be5d2984bc


[ZX]