Показать сообщение отдельно
Старый 29.05.2004, 01:48     # 7
Crazy_kettle
Junior Member
 
Регистрация: 13.05.2004
Сообщения: 128

Crazy_kettle Известность не заставит себя ждатьCrazy_kettle Известность не заставит себя ждать
to Programmer
Большое спасибо. Не думал в MSDN глянуть, а зря ... (как выяснилось)
После беглого обзора написанной информации, я было уже обрадовался. Но, оказалось, что не всё так просто. Думал, есть даже два варианта, но прогадал. (Может, кому-нибудь будет интересно. Поэтому я приведу их)
Цитата:
#define BEGSTR "Blah-Blah-Blah %"
#define MYINTSIZE "30"
#define ENDSTR "d\n"

#define FORMATSTR BEGSTR MYINTSIZE ENDSTR

printf(FORMATSTR,i);
Здесь переменная i типа int;

или

Цитата:
#define FORMATOUT(Format,Par) printf("Blah-Blah-Blah %" #Format "d\n",Par)
FORMATOUT(10,i);
Но как видно, что варианты не то решение, которое я хотел, т.к. в первом случае MYINTSIZE это макрос-СТРОКА, и я не знаю как использовать этот макрос, как целочисленную константу (т.е. i=MYINTSIZE не пройдёт, пойдёт i=atoi(MYINTSIZE), но это тоже нехорошо, т.к тратятся такты проца на этапе выполнения). Но всё равно этот вариант довольно таки хорош, т.к. можно объявить #define MYINTSIZE 30 и #define S_MYINTSIZE 30. И незабыть их менять одновременно (особенно при большом количестве таких констант) будет удобнее, чем в ранее предложенном варианте 2).

Второй дан, чисто из-за любознательности, т.к. вместо числа 10, можно подставить лишь число и никак не макрос-константу, и тем более не переменную и понятно по каким причинам.

Вот и сталкнулся я с несовместимостью строковой константы и числовой константы, хотя поидее для препроцессора (не для компилятора) они отличаются лишь ковычками """, ведь после препроцессора, за обработку вступает компилятор, а значит, все числовые константы всё равно должны быть оставлены в символьном виде (т.е. препроцессор либо копирует строки, либо переводит символьные константы в строки). Странно, что нет возможности (хотя может, это я просто не нашёл) перевести числовые константы в строковые константы и наоборот. Так что возникает вопрос "Или это по большому счёту никому не нужно, или что-то я не так понимаю?".

Почитал я man cpp. Но там вообще нет никакой документации о синтаксисе, правилах использования, "фишках", только мануал но исплользованию программы cpp
Crazy_kettle вне форума