LINUX.ORG.RU

Ответ на: комментарий от tailgunner

Лолшо? ☺ Не пытайся быть умней компилятора — это уже многие десятки лет почти ни у кого не выходит. И не забывай про читабельность.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Лолшо?

Ну ты на вопрос-то ответь.

Не пытайся быть умней компилятора — это уже многие десятки лет почти ни у кого не выходит

А я из тех, кто не попал в «почти все».

И не забывай про читабельность.

showme(foo);

Покажи свой вариант.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А я из тех, кто не попал в «почти все».

либо ты быдлокодер, из тех, чей код работает только на одном компьютере, либо идиот.

Ну конъюнкция тоже возможна.

Макросы не для этого, юзай способ beastie.

drBatty ★★
()
Ответ на: комментарий от drBatty

либо ты быдлокодер, из тех, чей код работает только на одном компьютере, либо идиот.

О, еще один. Ты-то хоть на вопрос ответишь или тоже сольешься?

Макросы не для этого, юзай способ beastie.

Меня спрашивали о макросе, я ответил о макросе. Проблемы, офицер?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ну и зануда же ты, родной! ☺

То что вызов printf — сам по себе та ещё атомная бомба и переменная на стеке туда-сюда погоды вообще не делает, ты конечно вежливо забыл.

А я из тех, кто не попал в «почти все».

Всё ясно. Посыпаю голову пеплом и уползаю в уголок скулить.

beastie ★★★★★
()
Ответ на: комментарий от beastie

То что вызов printf — сам по себе та ещё атомная бомба и переменная на стеке туда-сюда погоды вообще не делает, ты конечно вежливо забыл.

Не забыл:

tailgunner> чуть медленнее

Посыпаю голову пеплом и уползаю в уголок скулить.

То есть ответа я так и не дождусь? Значит, не стоило тебе и выползать.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

О, еще один. Ты-то хоть на вопрос ответишь или тоже сольешься?

я ответил. Это неправильный юзкейс для макроса. Функцию вообще лучше в макрос не оборачивать, особенно такую кривую, как printf. Ну например есть две отвёртки: плоская и крестовая. Как правильно закрутить болт крестовой отвёрткой? Правильный ответ - никак. Болты обычно гаечным ключом придерживают, а закручивают, как известно, гайку. Так и тут - ТС изначально ерунду задумал.

drBatty ★★
()
Ответ на: комментарий от drBatty

я ответил. Это неправильный юзкейс для макроса.

Непонятно, почему насчет макроса ты ответил мне; непонятно, причем тут «на одном компьютере»; непонятно, с какой радости ты решил, что всё знаешь о задаче TC.

Функцию вообще лучше в макрос не оборачивать, особенно такую кривую, как printf

Ну начался поток отмазок...

tailgunner ★★★★★
()
Ответ на: комментарий от Reinar

твоём варианте изменяется формат, а это может привести к уязвимости.

Хм. Ты не мог бы объяснить, чем в этом плане отличаются наши варианты?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

machine cycles are cheap, people cycles are not

А какого ответа ты ожидаешь? То что твой вариант — эталонный пример быдлокода и ровно (при вравильной констелящии звёзд) на один цикл быстрее и нечитабельней правильного варианта?

beastie ★★★★★
()
Ответ на: комментарий от Reinar

В данном случае это маловероятно, но да, есть такое.

beastie ★★★★★
()
Ответ на: комментарий от tailgunner

Непонятно, почему насчет макроса ты ответил мне

потому-что глупость сморозил ты, а ТС просто спросил.

непонятно, причем тут «на одном компьютере»

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

непонятно, с какой радости ты решил, что всё знаешь о задаче TC.

я ничего не знаю о задаче ТС, кроме его поста. За то я знаю, что макросы так использовать - плохая идея.

Функцию вообще лучше в макрос не оборачивать, особенно такую кривую, как printf

Ну начался поток отмазок...

вполне конкретный совет. Подумай сам, почему.

drBatty ★★
()
Ответ на: комментарий от wota

Ну наконец-то, кто-то подсказал, не выпендриваясь. Спасибо.

tailgunner ★★★★★
()
Ответ на: комментарий от drBatty

За то я знаю, что макросы так использовать - плохая идея.

Тот, кто придумал «#» и «##» в макросах, так не считали.

AlexCones ★★★
() автор топика
Ответ на: комментарий от tailgunner

[code]

[reinar@condemned current]$ cat test.c
#include <stdlib.h>
#include <stdio.h>

#define showme(x) \
printf(" " #x " = %d", x)

int main(int argc, char *argv[])
{
showme(«%s%s%s%s»);

return 0;
}
[reinar@condemned current]$ gcc test.c
[reinar@condemned current]$ ./a.out
«%s%s%s%s./*тут непечатные символы, которые не пропускает парсер лора*/» = -215048704[reinar@condemned current]$
[/code]

Если атакующий сможет повлиять на параметр макроса - чёрт знает, чем это может закончится.

Reinar
()
Ответ на: комментарий от Reinar

мда, всё-таки я не умею в разметку, но думаю ситуация ясна.

Reinar
()
Ответ на: комментарий от AlexCones

Тот, кто придумал «#» и «##» в макросах, так не считали.

так тебе этот макрос для отладочной печати нужен? так бы сразу и сказал.

drBatty ★★
()
Ответ на: комментарий от AlexCones

Значит ваш ответ - «нет».

ну это же отладка - нахрена мне в рабочем коде имена переменных? Их там нет, и быть не может. Все давно пострипаны.

drBatty ★★
()

рефлексия в С в компайл-тайм.

qulinxao ★★☆
()
Ответ на: комментарий от drBatty

нахрена мне в рабочем коде имена переменных?

Пример дан 2 поста назад. Ваш более понятный, «правильный» и рабочий вариант я все еще не увидел. Мой сработал так:

max value for signedchar is 127
min value for signedchar is -128
max value for unsignedchar is 255
min value for unsignedchar is 0
max value for signedshortint is 32767
min value for signedshortint is -32768
max value for unsignedshortint is 65535
min value for unsignedshortint is 0
max value for signedint is 2147483647
min value for signedint is -2147483648
max value for unsignedint is 4294967295
min value for unsignedint is 0
max value for signedlongint is 2147483647
min value for signedlongint is -2147483648
max value for unsignedlongint is 4294967295
min value for unsignedlongint is 0
max value for floatvar is 16777216
min value for floatvar is -16777216

AlexCones ★★★
() автор топика
Ответ на: комментарий от Reinar

Если атакующий сможет повлиять на параметр макроса - чёрт знает, чем это может закончится.

Насколько я понимаю, это то же, что показал wota - признаю ошибку. Впрочем, gcc выдал предупреждение.

tailgunner ★★★★★
()
Ответ на: комментарий от drBatty

Непонятно, почему насчет макроса ты ответил мне

потому-что глупость сморозил ты

На глупость (ошибку, на самом деле) мне указали wota и Reinar, а не ты. А от тебя в этом топике - одни понты и никакой пользы. Как и всегда, впрочем.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от AlexCones

Пример дан 2 поста назад. Ваш более понятный, «правильный» и рабочий вариант я все еще не увидел.

мой вы увидите только тогда, когда я узнаю, ЗАЧЕМ это нужно, кроме как для отладки? А в отладке да, все средства хороши, её же в продакшене нет.

Мой сработал так

и что это даёт полезного?

drBatty ★★
()
Ответ на: комментарий от drBatty

и что это даёт полезного?

K&R'ом была поставлена задача выяснить пределы значений целочисленных типов и эпсилон для плавающих.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

K&R'ом была поставлена задача выяснить пределы значений целочисленных типов и эпсилон для плавающих.

дык я K&R читал сколько лет назад-то? Не помню. У них ответ тоже макросом?

drBatty ★★
()
Ответ на: комментарий от AlexCones

В главе про типы данных.

ну и при чём тут макросы? Эта глава должна быть намного раньше главы про cpp, и про макросы читатель ещё и не догадывается. А значит задание делать должен без всяких макросов.

drBatty ★★
()
#define showme(x) { printf(#x " = %d", x); }

?

frozenix ★★★
()
Ответ на: комментарий от qulinxao

т.е для вывода %lld или что там все числа выведет ,

а вот сам алго без знания как целые типы относятся к друг другу

можно конечно уперется и вывод (закат солнца в ручную) - чисел(мин макс) без использования спецификаторов типа принтфа.

qulinxao ★★☆
()
Ответ на: комментарий от tailgunner

В этом суть доктора. Так не делай потому что у-у-у. Это не трогай потому что ы-ы-ы. А потом тред сметает цунами из капса и странных метафор.

anonymous
()
Ответ на: комментарий от qulinxao

т.е для вывода %lld или что там все числа выведет ,

а вот сам алго без знания как целые типы относятся к друг другу

можно конечно уперется и вывод (закат солнца в ручную) - чисел(мин макс) без использования спецификаторов типа принтфа.

Не в обиду сказано, слова я понял, но смысл ваших фраз до меня как-то не доходит.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

ты дал ссылку на код где используеш паралельно 2 переменых одна через макрос иследуемого типа а другая имеет тип который заведомо охватывает иследуемый (т.е макс и мин иследуемого строго внутри другого).

для нахождения макс и мин это знание не обязательно к использованию

попробуй переписать программу так , что бы не использовать другой тип.

qulinxao ★★☆
()
Ответ на: комментарий от drBatty

какой максималист.

асерты в продактшене у некоторых фирм с ярдными оборотами на домашнем рынке.

ну и вообще рефлексия она такая.

qulinxao ★★☆
()
Ответ на: комментарий от tailgunner

Использование конструкции

do {
...
} while(0)
уже более чем достаточная причина. Так как свидетельствует о том, что её автор не в курсе того, что такое блок.

anonymous
()
Ответ на: комментарий от anonymous

свидетельствует о том, что её автор не в курсе того, что такое блок.

Это лжесвидетельство, поверить которому может только наивный анонимус.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.