:-D спасибо, что повеселили! Видимо я как-то не внятно написал:
К сожалению, ни один из предложенных вариантов не работает.
Поясняю: представленные макро-подстановки я испробовал в реальном проекте (в том, для которого это всё и нужно) и результат не совпал с требуемым. <Сарказм> Что я делаю не так и при чём здесь моя правота?<\Сарказм>. Ещё раз: реальный результат работы препроцессора вне зависимости от моей правоты не тот, что нужен.
обращаю внимание на то, что это код Си++, а в вопросе идёт речь только о Си, однако сейчас это не важно. Итак, для представленных макро-определений препроцессор даёт:
"stamp n." "mynumber" // строка разрывается кавычкой, далее пробел, потом кавычка
а надо:
"stamp n.10"
действовал так: скопировал представленные макро-определения, вставил в свой код (ANSI C), в нужное место вписал stamp(mynumber) и получил "stamp n." "mynumber", разумеется, компилятор не прожевал разрыв внутри строки кавычками (меж которых пробел). Если внимательно взглянуть на #define stamp(num) "stamp n." xstr(num)
то ничего удивительного.
Вопрос исчерпан, ответ не найден. Благодарю всех за участие!
KiVa, пишите макросы большими буквами, в таком виде будете их путать с переменными.
Строчные буквы, ибо подумал наперед чтоб не травмировать ничьи глаза, а в реальном коде – прописные.
Благодарю всех, кто откликнулся: Roman, res2001, Ivan Bogachev, vanyamba-electronics. К сожалению, ни один из предложенных вариантов не работает. Много раз смотрел вывод препроцессора в надежде придумать какую-нибудь хитрость, но всё тщетно. Чтение спецификации на компилятор тоже не подкинуло никаких идей. Пробовал множество своих вариантов и также без нужного результата. Вся соль в стрингификации #, из-за которой не происходит подстановка числа, вместо числа ставится имя самого определения и потом всё оборачивается в кавычки, т.е. на выходе "stamp n.number", а не "stamp n.10", иначе говоря, number не раскрывается, хотя stamp n.10 (без кавычек) формируется нормально, но для дальнейшего использования нужно с кавычками.
Видимо одно из двух: либо моих знаний не хватает, либо этот вопрос не имеет решения. Всем спасибо!
Думать, что оппонент не умеет пользоваться поиском – это плохой посыл, принижающий его профессиональные и интеллектуальные навыки. И отправлять «голые» ссылки в качестве ответа – что сказать? – ответом на вопрос это быть, ну никак, не может! К тому же по ссылкам информация очень устаревшая, её актуальность на текущий момент крайне сомнительна и всё это я читал ещё до того, как задал свой вопрос. Что касается вопроса, то я сам себе уже помог и уже нашёл ответ (к слову, с ссылками он никак не перекрывается).
pfg21 Плата преобразователя температуры iTEMP TMT82 от Endress+Hauser. Функцию компонента не определил - идентифицирую компонент как раз с целью найти на него спецификацию и определить назначение/функцию.
Армянское Радио Разрешение фотки пришлось уменьшить, поскольку Тостер отказывался загружать исходник. К тому же размер компонента очень маленький 1.5 на 1.5 мм. Все дорожки на плате во внутренних слоях, снаружи земли, образующие клетку Фарадея для защиты от наводок. Под микроскопом смотрел - единственная надпись на корпусе компонента это маркировка S4, больше ничего нет. Внешний вид корпуса описан в вопросе. Так что фотка в любом случае не информативна с каким бы качеством она не была.
Ezhyg Из моего опыта S4 это одиночные диоды от Diodes Incorporated (например, серия SD103CWS), но в данной ситуации это не тот случай.
Сегодня буду делать отмывку и попытаюсь снять лак с платы - хочу поработать с обвязкой, авось по ней смогу определить назначение компонента. Если у кого-то есть мысли, то буду рад вычитать их.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
:-D спасибо, что повеселили! Видимо я как-то не внятно написал:
Поясняю: представленные макро-подстановки я испробовал в реальном проекте (в том, для которого это всё и нужно) и результат не совпал с требуемым. <Сарказм> Что я делаю не так и при чём здесь моя правота?<\Сарказм>. Ещё раз: реальный результат работы препроцессора вне зависимости от моей правоты не тот, что нужен.
res2001, давайте посмотрим на вывод препроцессора для варианта от Ivan Bogachev и vanyamba-electronics:
обращаю внимание на то, что это код Си++, а в вопросе идёт речь только о Си, однако сейчас это не важно. Итак, для представленных макро-определений препроцессор даёт:
а надо:
"stamp n.10"
действовал так: скопировал представленные макро-определения, вставил в свой код (ANSI C), в нужное место вписал stamp(mynumber) и получил "stamp n." "mynumber", разумеется, компилятор не прожевал разрыв внутри строки кавычками (меж которых пробел). Если внимательно взглянуть на
#define stamp(num) "stamp n." xstr(num)
то ничего удивительного.
Вопрос исчерпан, ответ не найден. Благодарю всех за участие!