Я пытаюсь использовать код ниже, используя компиляторы MSVC 2013 и GCC.C строка, чтобы сохранить определение макроса
#define AV_FFMPEG_SAMPLE(...)# __VA_ARGS__
const char *function_store = AV_FFMPEG_SAMPLE(
#define BUF_SIZE 65536
#define ALIGN_MASK 0xFF00
int foo()
{
int abc;
int *xyz;
xyz = (int *)malloc(BUF_SIZE);
return (BUF_SIZE & ALIGN_MASK);
}
);
int main(int argc, char **argv)
{
printf("%s\n", function_store);
}
MSVC 2013 Выход:
#define BUF_SIZE 65536 #define ALIGN_MASK 0xFF00 INT Foo() {INT аЬс; int * xyz; xyz = (int *) malloc (BUF_SIZE); return (BUF_SIZE & ALIGN_MASK); }
НКУ Выход:
INT Foo() {INT аЬс; int * xyz; xyz = (int *) malloc (BUF_SIZE); return (BUF_SIZE & ALIGN_MASK); }
Я предпочитаю выход такой же, как выход MSVC 2013, но мне нужно, чтобы получить то же самое, используя GCC (MinGW). Как я могу получить результат, похожий на вывод MSVC 2013, используя GCC (MinGW)?
Возможно, переместите определения макросов из скобок. – Downvoter
Это выглядит как хороший пример того, как ** не ** использовать макросы. Вы не можете использовать расширение '# define' внутри макроса. '#' не должен находиться за именем макроса/скобкой. Вы лучше заявите, чего хотите достичь. Это может привести к XY-проблеме. MSVC даже не совместим с C99, не говоря уже о текущем стандарте C11. – Olaf
О, и: Не произносите результат 'malloc' & friends в C! – Olaf