[Вопрос] Работа с define и её странности (Проблема решена)

Статус
В этой теме нельзя размещать новые ответы.

Zoxan_Twist

Новичок
Автор темы
126
29
Доброго времени суток.
Есть цель:
Вывести число с созданного ранее define.
Пример:
Код:
#define value 200
#define Trans_val(%1)    "%1"

public OnGameModeInit()
{
    print("Значение: "Trans_val(value)" выведено успешно");
    return1;
}
В итоге мы получаем: "Значение: %1 выведено успешно"
Я понимаю что "%1" компилятор воспринимает как строку и не замечает что %1 это какое-то значение из ранее созданного define. Долго думал как это можно обойти. Но так в голову ничего толкового не пришло. Прошу помощи у тех кто хоть что либо в этом смыслит.
Заранее спасибо.
P.s. Если кто-то подумает "А не проще ли выделить память и сделать форматирование?". Отвечу "Не проще ибо этот способ хоть и будет и легкий но не для меня".
 

Zoxan_Twist

Новичок
Автор темы
126
29
Ем... У тебя там единица.
В итоге после компиляции я должен получить это:
Код:
print("Значение: ""200"" выведено успешно");
Что выведет в консоли: Значение: 200 выведено успешно
А не вот это:
Код:
print("Значение: ""%1"" выведено успешно");

хоть поставлю %0 или %1. Разницы никакой. Это на коде никак не скажется.
Пытался поставить скобки в отдельном define но смысла с этого не было никакого
 

Zoxan_Twist

Новичок
Автор темы
126
29
С выводом в консоль проблем нет, согласен. Но как только доходит дело до SendClientMessage там то без форматирования никак. Оно меня не устраивает что и подтолкнуло на такой выход. Все бы было хорошо если бы не ( " " ) - эти скобки. Как говорил ранее они воспринимают %1 как строку, а не define как нужно.
 

Zoxan_Twist

Новичок
Автор темы
126
29
Спасибо огромное за ответ, но к этому времени я уже сам это понял :D

Значит объясню тем кто не понял:
#define Trans_val(%1) #%1

#define - Создание макроса.
Trans_val - название макроса.
%1 - входящее значение
#%1 - самое главное
# - присваивает значению %1 "скобки"
%1 - само значение которое входит в макрос (если так можно выразиться).

Пример:

До компиляции:
Код:
#define Trans_val(%1)   #%1
#define val   200

main() {
print("Значение c define: " Trans_val(val) " записано без форматирования");
}
После компиляции:
Код:
print("Значение в define: " Trans_val(val) " записано без форматирования");
будет заменено на:
Код:
print("Значение в define: 200 записано без форматирования");
А сам:
Код:
#define val   200
будет удален
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.