Необходимо включить макрос как часть спецификатора формата snprintf()
, где он расширяется до "name=%s "
во время самого препроцессора и создается объединенная строка "Heyaa tester name=%s"
. То, что у вас есть в OP, превращает name=%s
в буквальную строку, которая будет обрабатываться при go %s
с помощью snprintf()
snprintf(x, 100, "Heyaa tester " TESTER, "hello");
Ваша первоначальная попытка должна была быть признана подозрительной, если Вы включили дополнительный флаг предупреждений в вашем компиляторе, так как printf()
вывел бы предупреждение слишком много аргументов, но не нашло бы достаточное количество спецификаторов ([-Wformat-extra-args]
с g cc).
И, как лучшая практика кодирования, всегда чистая память, выделяемая программой динамически, вместо того, чтобы позволить ОС делать это, и всегда компилировать вашу программу с дополнительными флагами предупреждений.