Как выполнить расчет в препроцессоре со строкой в ​​C

Возможный дубликат:
Как преобразовать выражение в строку в С

Я надеюсь, что я могу найти какое-то решение моей проблемы здесь.

Я хочу добавить шестнадцатеричные числа, определенные в ADD1, и мне нужно поместить их в *str в строковой форме.

Это только пример, чтобы сначала доказать его возможность. Я на самом деле делаю то же самое в файле заголовка.

#include <stdio.h>


#define XMK_STR(x)      #x
#define MK_STR(x)       XMK_STR(x)
#define ADD1 0x6000+0x10

main()
{
        char *str = "START " MK_STR(ADD1) "\n";
        printf(str);
}

person linuxexplore    schedule 12.10.2012    source источник
comment
Итак, вам нужна строка 0x6010?   -  person Ancurio    schedule 12.10.2012
comment
Требование @ouah аналогично, но на самом деле я должен сделать то же самое в заголовочном файле.   -  person linuxexplore    schedule 12.10.2012
comment
@linuxexplore - это не расчет, выполняемый в препроцессоре, а оптимизация, выполняемая компилятором. Читать так: нет, оптимизация будет выполняться компилятором, а ПОСЛЕ выполнения препроцессора (поэтому вы не можете указать это с помощью макроса препроцессора).   -  person Adriano Repetti    schedule 12.10.2012
comment
Это нехорошо для меня, тогда мне нужно жестко закодировать эти типы значений :-(   -  person linuxexplore    schedule 12.10.2012


Ответы (1)


Нет. Вы не можете выполнять вычисления с помощью препроцессора. По сути, это заменитель текста.

Вы можете использовать sprintf() и распечатать добавленный результат в str, для этого вы можете использовать ADD1.

person P.P    schedule 12.10.2012
comment
Да, чтобы сделать это явным, sprintf не будет частью препроцессора. Он будет выполняться только при запуске компилятора, который следует за препроцессором. - person fkl; 12.10.2012
comment
Значит, я не могу сделать это в заголовочном файле? я ищу какой-нибудь хак, если есть ;-) - person linuxexplore; 12.10.2012
comment
да, вы не можете этого сделать. Однако вы можете попробовать что-то вроде ideone.com/CHQLA или ideone.com/1VNUs. - person P.P; 12.10.2012
comment
Спасибо @KingsIndian, но у меня есть только заголовочный файл, main() нет. - person linuxexplore; 12.10.2012
comment
Мне нужно поместить вывод MK_STR(ADD1) в другую строку #define :-P - person linuxexplore; 12.10.2012