LINUX.ORG.RU

полиморфная функция

 


1

1

вот придумал, как сделать ф-цию, обрабатывающую параметры разных размеров, понимаю, что наверно не первый такой умный, но вот захотелось поделиться, показана простая функция, но можно использовать и в более сложных ситуациях

#define PR_HEX_WRAP(a, b) print_hex(a, sizeof(typeof(*a)), b)

void print_hex(void *a, size_t memb_s, size_t s) {
	size_t i;
	s = s * memb_s;
	printf("0X");
	for (i = 0; i < s; i++) {
		if ((i % memb_s == 0) && (i > 0)) 
			printf(" 0X");
		printf("%X", *((uint8_t *)a + i));
	}
	printf("\n");
}

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

★★★

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

А они слушают комитет, иногда его дополняя.

Можно с тем же успехом всё перевернуть и смысл не поменяется. Все слушают друг друга и иногда дополняют.

Серьёзно, вы пишете на гнуСи и вам так не нравится, что это не общепринятый стандарт?

Пишу на c89, с библиотекой какая есть в ОС (она явно не от с89 но и не от каких других cXX). Но при этом осознаю что gnu89 намного популярнее.

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

Можно с тем же успехом всё перевернуть и смысл не поменяется. Все слушают друг друга и иногда дополняют.

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

Это не делает разработчиков компилятора более важными в плане развития языка.

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

И хромого можно так собрать, поддержка сборки шлангом в апстриме.

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

Ненужный шланг собирает ненужные андроид и хром.

Пропустим прелюдию и перейдём сразу к коитусу: а что нужно-то?

LamerOk ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Языка си выше c89 не существует

Сильное заявление для тех кто несведущ, а объяснение ты дал слегка сумбурное :)

Для меня лично идеальный стандарт на котором стоит писать новый софт на C - это C99. Хотел написать почему именно он мне нравится, но открыв список фич понял что пользуюсь почти всеми, и все они вкуснота. Переписывать сюда этот список совсем нет смысла.

Не знаю каким надо быть старопердуном чтобы писать на C89, даже под древний atmel есть поддержка C99

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

У них есть апстрим и есть форки. То есть на форке явно указано что он форк и вторичен. У си нет апстрима.

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

Хм, посмотрел ещё раз список фич и понял что gcc -std=c89, который я использую, это не c89 по факту а смесь c89 и c99.

__VA_ARGS__, long long, инициализация структур по названиями полей там есть и я их использую. Ну и новые функции такие как snprintf, разумеется, но я всё же склоняюсь библиотеку от компилятора отделять.

А вот VLA это явно ненужная и вредная для языка штука, поскольку она связана со сложными неявными операциями, которых быть не должно. boolean тип по-моему не нужен. Объявления переменных не в начале блока - засоряют код, вредно.

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

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

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

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

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

Еще нужно добавить, что
«Объявления переменных в коде - засоряют код и ВРЕДНО» …

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

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

У меня объекты в коде не объявляются.
Они создаются в run-time на основании метаданных.

Ни какой компилятор НЕ ИСПОЛЬЗУЕТСЯ ... /за исключением своего/ ...

Впрочем для OLE это

НОРМА ...

ДИНАМИЧЕСКОЕ СВЯЗЫВАНИЕ …

Кстати ОЧЕНЬ УДОБНАЯ фича при разработке …

Для тех КТО В ТАНКЕ см. объектные модели Excel, … да Windows в целом …

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

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

У меня объекты в коде не объявляются.

Так я говорил про переменные, а не объекты. Разные вещи. Ну по крайней мере в C++. В C — там бардак в стандарте.

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

У них есть апстрим и есть форки. То есть на форке явно указано что он форк и вторичен. У си нет апстрима.

Товарищи о чем вы спорите?
Со стороны глядя - жалобы танцоров на

ЯЙЦА ...
anonymous
()
Ответ на: комментарий от reprimand

Не знаю каким надо быть старопердуном чтобы писать на C89, даже под древний atmel есть поддержка C99

Думаешь?

Я как раз один jff-проектик на си пытаюсь ваять (пока не знаю, выйдет ли из него что толковое, но если ВДРУГ выйдет, мне хотелось бы, чтобы его можно было запускать на любом утюге). Я вот тоже решил заложиться на C99, но у меня резон проще, мне нравится писать bool, как в плюсах, а в сях <stdbool.h> стал стандартом как раз с C99. Да, я знаю, что внутри него обычное целое число, но блин, код выглядит гораздо более читаемым.

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

Для тех КТО В ТАНКЕ см. объектные модели Excel, … да Windows в целом …

Смотрели, и даже использовали. Крайне ненадёжная штука. Про отсутствие кроссплатформенности я уж молчу, но даже в рамках винды недостаток — плохая диагностика ошибок.

Самой эпической историей был случай, как человеку пришлось съездить в командировку через треть страны с причиной «у вас ничего не работает». Оказалось, что проблему создала даже не его организация, а другая, которая их боту пересылала информацию через письма, формируемые аутлуком через то самое OLE, точнее, ActiveX. Потом кто-то просто обновил офис, и всё это превратилось в тыкву. Проблему решили, но осадочек остался.

Случай попроще — коллега написал в своей программе формирование отчётов через Word. Оно прекрасно работало… правильно, пока Word не обновился. После этого мы послали весь этот OLE/(D)COM/ActiveX-зоопарк лесом, раскурили спецификацию RTF и написали свою низкоуровневую библиотеку генерации RTF-документов. И что вы думаете — ей уже 20 лет, и она до сих пор прекрасно работает, только новую функциональность иногда добавляем. RTF как таковой, конечно, давно устарел, но все офисы его по-прежнему поддерживают, более того, это единственный формат, который большинство офисов (как проприетарных, так и открытых) поддерживают с плюс-минус одинаковой предсказуемостью. Сейчас бы я, скорее всего, заложился на ODF, но не суть.

Дрянь это ваше OLE и его наследники. При ОДНОРАЗОВОЙ разработке удобно, конечно. При условии, если вы сразу после разработки свалите и не будете это поддерживать. (Ну или наоборот, сделаете из этой поддержки хлеб, периодически вместо добавления новых фич подчищая за майкрософтом, как в том анекдоте про семью адвокатов.)

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

Оно прекрасно работало… правильно, пока Word не обновился.

Не правильно пишу код.
У меня OLE код правильно работает с любой версией Word …

Вы извините, но вы в этих вопросах … /вы поняли/.
Так что обсуждать эту тему желания нет …

PS: Windows весь пронизан COM и OLE и все работает.
Что до его производительности COM и OLE, то нужно понимать где их целесообразно применять.

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

У меня OLE код правильно работает с любой версией Word …

Что, и при переходе c WordBasic на VBA ничего не ломалось? :)

Вы извините, но вы в этих вопросах … /вы поняли/.

…написал анонимус, так никому и не показавший своего кода, да.

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

написал анонимус, так никому и не показавший своего кода, да.

С вами диалог вести не буду.
Что касаемо как там у вас код пишется, то это меня не интересует.

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

Ну понятно. Ты, видимо, не в курсе, что перечисленное можно было использовать как OLE-объекты и вызывать из других программ?.. Конечно, это скучно, на личности переходить гораздо приятнее.

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

Ты, видимо, не в курсе

Я и COM-клиенты, и COM-серверы писал. Руками, на крестах. Это не космический космос, это относительно простая технология. Просто ты настолько вопиюще безграмотен, что вышибаешь даже лоровское днище.

OLE - это протокол межкомпонентного взаимодействия, а VBA - язык программирования. Ты бы хоть в педивикии смысл аббревиатур посмотрел, чтобы не получилось как у тебя «при смене perl на php сломался http».

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

Приходит сын адвоката,тоже адвокат, домой, говорит - бать поздравь, я дело в суде довел до конца, которое еще начал мой дед…
Батя говорит, - ты идиот! Это дело кормило нашу семью три поколения!!! На что мы теперь будем жить!?

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

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

А разговор был про то, что люди вызывают эти объекты, радуются жизни. А потом MS берёт и перетряхивает номенклатуру вызовов.

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

при этом наглухо не понял, про что, собственно, был разговор.

Я прекрасно понял, про что был разговор. Про то, что одни безграмотные дебилы наколеночными скриптами прибили свою студентческую поделку к ворду 95, а несчастный пользователь попытался запустить её с 2003-им и «всё сломалось!!11». И виноваты в этом, конечно же, не криворукие скрипткиддисы, состряпавшие скрипт, и не менеджер проекта, который предпочёл замести под коврик тот факт, что весь ваш ынтырпрайз-солюшын за миллиард рублей в год зависит наглухо от конкретной версии ворда, и не ваша голимая госшарага, где никто за десять лет не почесал задницу проверить совместимость того говна, что вы втюхали клиенту, с новым программным окружением в расчёте на «Раз не звонит, значит всё работает» и «Ну не будут же они обновлять версию ворда?».

А микрософт, микрософт виноват во всех ваших бедах. Плохой, не хороший микрософт. Новые программы выпускает, сука.

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

где никто за десять лет не почесал задницу проверить совместимость того говна, что вы втюхали клиенту

Читать ты не умеешь, я понял. И неумение компенсируешь своими фантазиями.

криворукие скрипткиддисы

Так на них подобная завлекаловка и рассчитана.

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

Вот тут согласен. Почему щас не сделают с использованием dbus? Ну типа как DE регистрирует в сессии хэндлер для polkit чтобы всплывать диалоги запроса пароля, чому бы так не сделать для диалога выбора файлов?

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