Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!


<<
Каталог | Трекер | Назад | Вниз | Обновить тред | Автообновление
511 | 27 | 173

C Programming Language #29 Аноним # OP  15/03/18 Чтв 18:09:44 1156306  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ или http://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Годное пособие для гуманитариев: http://web.archive.org/web/20160727235220/http://c.learncodethehardway.org/book/ (автор внезапно захотел денег)
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

Чем конпелировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №26: https://arhivach.org/thread/315652/
- №27: https://arhivach.org/thread/325831/
- №28: https://arhivach.org/thread/339326/

Шапка: http://piratepad.net/bJ1SdmkZyu
Аноним 15/03/18 Чтв 20:38:49 1156415
image.png (2901Кб, 1230x1230)
Вкатился. Вопросы по эмбеддед-си здесь задавать?
Ответы: >>1156422 >>1156530
Аноним 15/03/18 Чтв 20:47:30 1156422
>>1156415
нет
Ответы: >>1156547
Аноним 15/03/18 Чтв 20:52:30 1156424
Всё байтоёбите?
Ответы: >>1156517
Аноним 16/03/18 Птн 02:42:45 1156517
>>1156424
Всё сагоёбишь?
Аноним 16/03/18 Птн 04:12:53 1156530
>>1156415
конечно, я почитаю, но отвечать не буду, потому что ничего не знаю.
Ответы: >>1156547
Аноним 16/03/18 Птн 05:45:31 1156547
image.png (8Кб, 406x108)
image.png (16Кб, 426x182)
>>1156422
>>1156530
Ладно, тогда вопрос по прикладному С:

Сейчас у меня есть массив структур с кастомными функциями под микруху для чтения, которым нужно передавать адреса элементов. Вопрос: можно ли этот код который я наиндусил как-то переписать по-человечески с нормальными указателями структуры?

Ну и всю структуру затягивать через pgm_block_read я тоже не хочу, потому что потом буду писать код в котором нужно будет затягивать/записывать только одну переменную.


Вот описание для функций библиотеки: https://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html
Ответы: >>1156550
Аноним 16/03/18 Птн 06:11:27 1156550
>>1156547
> переписать по-человечески с нормальными указателями структуры?
Не совсем понятно, чего ты хочешь. Ты разрешения спрашиваешь? Да, можно. Нет, не особо нужно: под капотом при возврате структуры размером больше, чем влезает в один-два регистра, функции неявно передается указатель на результат, функция его туда пишет, все счастливы. Возможно, для авров компиль более тупой, хуй знает.
Ответы: >>1156551
Аноним 16/03/18 Птн 06:22:49 1156551
>>1156550
>Не совсем понятно, чего ты хочешь.

Ну я хочу заменить все эти танцы с бубном и инкрементами указателя на что-то вроде ret_test.wind = pgm_read_word(&Profile[time].wind) и так далее, так можно сделать? Какой правильный синтаксис для таких конструкций?
Ответы: >>1156629
Аноним 16/03/18 Птн 08:48:02 1156629
>>1156551
тебе не красиво? сделай юнион с char@.
Ответы: >>1156884
Аноним 16/03/18 Птн 12:18:01 1156727
Где прочитать все сдвиги C99 относительно C89?
Язык не важен, важна ёмкость изложения.
Ответы: >>1156896
Аноним 16/03/18 Птн 17:11:09 1156884
>>1156629
Да хуй там, оказывается можно указывать на сами элементы массива. Жалко только что нету ассемблерного кода для считывания вообще всего блока.
Аноним 16/03/18 Птн 17:34:20 1156896
>>1156727
Вступление к соответствующему стандарту или справка от Pelles C.
Аноним 17/03/18 Суб 08:23:15 1157165
Я невнимателен, или и правда нигде не сказано о том как malloc выравнивает левую границу? Мне два бита нужно, есть вообще какие-то гарантии на этот счёт?
Ответы: >>1157629
Аноним 17/03/18 Суб 19:11:23 1157629
>>1157165
> правда нигде не сказано о том как malloc выравнивает левую границу
Сказано. malloc делает выравнивание так, чтобы оно было достаточным для любого встроенного типа. Для всего остального есть aligned_alloc из C11.

> Мне два бита нужно
Чо? Тебе бы что-нибудь по архитектуре компов почитать. Минимально адресуемая единица - байт. А на практике, любым маллоком будет выделено не менее sizeof(uintptr_t).
Ответы: >>1157905
Аноним 18/03/18 Вск 04:47:03 1157905
>>1157629
>Чо?
Мне в указателе, в крайних двух разрядах, необходимо сохранить два флага, в самой переменной, а не в выделяемой памяти я имею в виду.
Ответы: >>1157913 >>1157981
Аноним 18/03/18 Вск 05:15:27 1157913
>>1157905
Ты всё-таки почитай как адресуется память и как происходит чтение-запись.
Аноним 18/03/18 Вск 07:14:10 1157981
>>1157905
тут уже один чувак так делал, в в одном заведении учитесь?

по идее гарантий никаких нет. вроде нет соотв. дефайнов на этот счёт. выделяй сразу с запасом. (void@)((uint_ptr)malloc(T + 3) & ~(uint_ptr)3)
Ответы: >>1157984
Аноним 18/03/18 Вск 07:17:24 1157984
>>1157981
ой не так.

(void@)((uint_ptr)malloc(T + 3) + 3 & ~(uint_ptr)3)
Аноним 18/03/18 Вск 07:21:10 1157986
но тогда хранить нужно и настоящий адрес (или смещение). ну понятно - выделяешь ещё sizeof(void@), выравниваешь, вписываешь указатель и смещаешь.

у меня кстати по этой теме вопрос, можно как-то сделать обёртку над malloc, но чтобы с тем же именем? или это должна быть поддержка библиотеки, там, альтернативное имя...
Ответы: >>1157993
Аноним 18/03/18 Вск 07:32:06 1157993
>>1157986
>можно как-то сделать обёртку над malloc, но чтобы с тем же именем
Вот тут у мужика что-то вышло, я правда хуй его знает насчёт переносимости.
https://habrahabr.ru/company/mailru/blog/281497/

>но тогда хранить нужно и настоящий адрес
Тут за два бита битва, а ты целиком адрес хранить предлагаешь.
Ответы: >>1158011
Аноним 18/03/18 Вск 07:57:46 1158011
>>1157993
>Вот тут у мужика что-то вышло, я правда хуй его знает насчёт переносимости.
хорошая, почитал.

>>1157993
>Тут за два бита битва, а ты целиком адрес хранить предлагаешь.
с другой стороны мы уже выяснили, что освобождать память не надо...
Ответы: >>1158134
Аноним 18/03/18 Вск 10:21:24 1158134
>>1158011
Во догонку ещё вроде бы BoehmGc умеет подменять обращения к malloc,

А как-то статическую переменную по кратному адресу выровнять можно?
Ответы: >>1158603
Аноним 18/03/18 Вск 10:32:16 1158137
Можно ли как-то реализовать такое?
Или только инклюдить через ifndef

#define LOH 123
#include "../" + LOH + "/file.h"
Ответы: >>1158603 >>1158607
Аноним 18/03/18 Вск 15:06:26 1158374
>>1156306 (OP)
родные, покажите реализацию компаратора для типа double, пожалуйста
Ответы: >>1158402
Аноним 18/03/18 Вск 15:34:29 1158402
>>1158374
bool AreSame(double a, double b)
{
return fabs(a - b) < EPSILON;
}
Ответы: >>1158442
Аноним 18/03/18 Вск 16:19:55 1158442
>>1158402
почему bool а не int?return fabs(a - b) < EPSILON; возвращает + если разность "~0" и - если числа разные, я правильно понял? но ведь компаратор не только говорит разные числа или одинаковые, он еще говорит какое больше
Ответы: >>1158603
Аноним 18/03/18 Вск 19:50:07 1158603
>>1158134
#include <stdalign.h> // C11, но есть расширения и для более старых версий стандарта.

>>1158137
Можно.
#define LOH 123
#define INCLUDE_CAT(...) INCLUDE_CAT_(__VA_ARGS__)
#define INCLUDE_CAT_(...) #__VA_ARGS__
// Мы работаем с токенами, поэтому кавычки не нужны, их ставит
// INCLUDE_CAT_, а если нужны <> вместо кавычек, то делаем так:
// #define INCLUDE_CAT_(...) <__VA_ARGS__>
#include INCLUDE_CAT(../LOH/file.h)

>>1158442
Ну так добей условие-то, в чем проблема-то?
double delta = a - b;
return (fabs(delta) < EPSILON) ? 0 : (delta < 0) ? -1 : +1;
Ответы: >>1158607 >>1159398
Аноним 18/03/18 Вск 19:56:43 1158607
>>1158603
>>1158137
Чета я подумал, что оно так может что-нибудь еще в пути к файлу случайно развернуть, если оно совпадет с именем макроса. Например, #define file ERROR оно будет инклудить ../123/ERROR.h, что не есть хорошо. Лучше разворачивать только LOH:
#define INCLUDE_BUILD(S) INCLUDE_CAT(../test/S/file.h)
#define INCLUDE_CAT(...) #__VA_ARGS__
#include INCLUDE_BUILD(LOH)
Аноним 20/03/18 Втр 05:11:40 1159398
>>1158603
>return (fabs(delta) < EPSILON) ? 0 : (delta < 0) ? -1 : +1;
спасибо большое
Аноним 20/03/18 Втр 06:30:02 1159423
Ахахах, у вас что, даже нет встроенного сравнения чисел?
Ответы: >>1159452
Аноним 20/03/18 Втр 07:42:13 1159452
>>1159423
Ты про spaceshit? Нету. Как ты в него нужный эпсилон передашь? Ах никак, ах авторы компилятора интерпретатора твоего языка лучше тебя знают, какая погрешность у твоих значений?
Аноним 20/03/18 Втр 08:03:57 1159459
можно ли обработать SIGTERM?
Ответы: >>1159463
Аноним 20/03/18 Втр 08:11:12 1159463
>>1159459
да
Аноним 21/03/18 Срд 11:25:46 1160046
День добрый, аноны. Не знаю как более красиво решить задачу:
Я делаю выборку из БД и сколько строк она вернет - неизвестно. Проходясь циклом по результату выборки я каждую строку помещаю в структуру, а структуру в массив. Для этого перед каждой выборкой мне приходится сначала выбирать количество записей и на основании его инициализировать массив. То есть приходится делать два запроса, хотя полезные данные возвращает только один из них. Скажите, как мне затолкать результаты выборки в массив заранее не зная его размера?
Аноним 21/03/18 Срд 11:34:21 1160056
>>1160046
никак, певый скюл запрос с каунт закеширует результат в бд, второй будет бесплатно. ну или читай фиксированными чанками.
Ответы: >>1160061 >>1160466
Аноним 21/03/18 Срд 11:37:08 1160061
>>1160056
Хм, ну если на производительности это не скажется то пусть так и остается. Спасибо.
Аноним 22/03/18 Чтв 00:06:20 1160466
>>1160056
>закеширует
Не кэш, а буфер. Кэш умеет синхронизироваться.
Аноним 22/03/18 Чтв 08:42:42 1160607
>>1160046
Используй односвязный список, например.
Ответы: >>1160626
Аноним 22/03/18 Чтв 09:40:57 1160626
>>1160607
Почти двачую. Список чанков, хранящих по n записей - это правильный способ решения проблемы, если производительность критична аж пиздец как. Если нет - realloc тоже сойдет.
Аноним 24/03/18 Суб 18:44:17 1162041
Репост из крестового треда

Как в vs2017 (или вообще какими ключами компиляции) смерджить все секции в одну - .text? Я видел в msdn'е статьюю про /merge .rdata=.text, но там не сказано, какой разделитель и как использовать для нескольких секций
Ответы: >>1162063
Аноним 24/03/18 Суб 19:08:56 1162063
>>1162041
> но там не сказано, какой разделитель и как использовать для нескольких секций
Сделай несколько мержей: /MERGE:.rdata=text /MERGE:.data=.text /MERGE:.bss=.text
Аноним 24/03/18 Суб 20:21:20 1162103
>>1160046
Наиболее красиво - это выкинуть массив нахуй, и обрабатывать записи по мере поступления. Попробуй, может, получится. В большинстве случаев получается. Тем более что в С++ вроде бэкпортили range из D, так что должно быть несложно. (Не знаю точно так как давно не юзал). Если не получается и по данным надо что-то считать с рандомным доступом, возможно, ты просто хуево знаешь SQL, потому что когда ты его знаешь хорошо, ты выбираешь уже все готовое к применению.
.c или .h Аноним 28/03/18 Срд 12:28:13 1164019
сап двачеры, срачеры, хуячеры, усачеры и тд. Объясните недоразвитой мошонке, мне, в чем разница нахуй между файлами .c и .h. я ебать пишу такой файл с прототипами имен переменных ну да надо переносимость обеспечить сохраняю с расширением .h подключаю через инклуд и все робит, меняю расширение на .c и опять нахуй все робит, ебать думаю я че за хуйня не должно же робить или должно хуй его знает. В общем как я понял .h сделали тупо чтобы не путать с .c файлами походу так. Поправляйте смело меня если не так. Спасибо за внимание нахуй
Аноним 28/03/18 Срд 12:38:03 1164026
>>1164019
это все еще я, ну вот даже простой пример: подключаю stdio.h вызываю printf все норм, опять же захожу в сборище заголовочных файлов меняю расширение у файла stdio.h на stdio.c в коде тоже все меняю, повторно компилю и опять все норм робит ну и как так
Ответы: >>1164030
Аноним 28/03/18 Срд 12:49:34 1164030
>>1164026
а что тебя не устраивает?
Ответы: >>1164036
Аноним 28/03/18 Срд 12:58:33 1164036
>>1164030
ну тип так и должно быть? это нормально? то есть если я хочу то могу спокойно писать заголовочные файлы с расширением .c??
Ответы: >>1164060
Аноним 28/03/18 Срд 13:21:35 1164060
>>1164019
> в чем разница нахуй между файлами .c и .h
Для Си, как языка - ни в чем, можешь хоть .yoba называть все свои файлы. Другие утилиты, например, make, ожидают, что ты назовешь исходник foo.c, чтобы make foo (без Makefile) смог правильно сработать.

>>1164036
> писать заголовочные файлы с расширением .c
Можешь. Некоторые делают кладут static inline функции в отдельные файлы с расширением .inl. В крестах так и вообще разброд и шатания, там есть и .h, и .hpp, и .hxx, и .hh, и даже .h++ раньше было. Ты можешь делать все, что угодно, но старайся быть консистентным и очевидным по мере своих сил.
Ответы: >>1164064
Аноним 28/03/18 Срд 13:23:38 1164064
>>1164060
не знаю принято ли тут говорить спасибо, но спасибо.
Аноним 28/03/18 Срд 13:33:58 1164073
>>1164019
Чисто логическое разделение. Грубо говоря в хэдэрах всё прототипизируется, а в файлах кода реализуется. Можешь проект в лям строк хоть в 1 .c захерачить, но будет ли это удобно? (особенно когда дело коснется препроцессора).
Это ты ещё банальным вопросом задался, ведь может быть всякое:
.c .h .cc .hh .cpp .hpp .cxx *.hxx и т.д.
Аноним 28/03/18 Срд 16:28:29 1164140
>>1164019
Заголовки отдельно нужны, чтобы ты мог использовать чужие _скомпилированные_ библиотеки. И чтобы кто-то мог использовать твои.

Т.е. в заголовках - "интерфейс", всё, что тебе нужно, чтобы использовать библиотеку. Сами исходники при этом - не нужны.

Это как interface в джаве, примерно.

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

Это основной смысл, остальное - структурирование кода и т.п. - по желанию.
Аноним 29/03/18 Чтв 13:06:13 1164604
>>1156306 (OP)
Возник тупой вопрос. Следующие две команды идентичны или нет?
double (зв)x = (double(зв))malloc(10 x sizeof(double));
double (зв)x = malloc(10 x sizeof(double));
Если да, зачем тогда в таких случаях пишут приведение типов?
Если нет, не является ли вариант с приведением медленнее чем без него?
Ответы: >>1164658 >>1164941
Аноним 29/03/18 Чтв 14:54:25 1164658
>>1164604
В Си указатель на void автоматически и неявно кастится к указателю на другой тип (и обратно). В крестах такого нет (у них там type safety типа), поэтому нужен явный каст. Разницы по производительности нет. Каст возвращаемого маллоком значения - классический признак человека, который учил не Си, и не кресты, а некий "си с классами".
Аноним 29/03/18 Чтв 16:42:58 1164725
>>1164658
теоретически это может помочь при рефакторинге. но мы же знаем, что функции должны быть такого размера, чтобы всё было в ней понятно и видно сразу.
Аноним 29/03/18 Чтв 23:53:27 1164941
>>1164604
>Если да, зачем тогда в таких случаях пишут приведение типов?

Чтобы обеспечить переносимость сишного кода на кресты.
Ответы: >>1164990
Аноним 30/03/18 Птн 07:48:58 1164990
>>1164941>>1164658
Благодарю.
Хотя во втором случае возникает вопрос, зачем конпелировать сишный код плюсовым конпелятором.
Аноним 30/03/18 Птн 12:34:12 1165130
Чпок!
Ответы: >>1165468
Аноним 30/03/18 Птн 20:36:19 1165468
>>1165130
Добрый вечер!

Мимо вежливый лось
Аноним 31/03/18 Суб 06:37:05 1165581
https://youtu.be/443UNeGrFoM[РАСКРЫТЬ]

Бля, посмотрел видео. Смешанные чувства. С одной стороны он прав, хотя блин... Вроде и бредит немного.
Ответы: >>1165880
Аноним 31/03/18 Суб 16:32:31 1165880
>>1165581
2 часа смотреть как какой-то петух рассказывает про свой стиль программирования?
Аноним 01/04/18 Вск 17:50:53 1166492
Что мне вернется?


typedef struct govno
{
bool pahnet;
} govno;

govno *today = calloc(sizeof(govno));

if (today->pahnet == true)
{
return(1);
}
else if (today->pahnet == false)
{
return(2);
}
else
{
return(3);
}

Ответы: >>1166516 >>1166593
Аноним 01/04/18 Вск 18:07:28 1166508
превед двочь. объясните простым язык про конец файла в си, и про то как обрабатываются потоки символов. чайнику полнейшему но в подробностях если не затруднит
Аноним 01/04/18 Вск 18:15:59 1166516
>>1166492
Не скомпилируется.
Аноним 01/04/18 Вск 19:11:09 1166550
>>1166508
Системный вызов возвращает некий признак конца файла.
Ну вооот
Аноним 01/04/18 Вск 21:41:46 1166593
>>1166492
В теории представление _Bool может хранить хоть 'y'/'n', и разворачиваться в 0/1 только при использовании в выражениях, хотя на практике никто такой хуйней не страдает. Поэтому если исправить ошибки, вернется 2.

>>1166508
Задай более развернутый вопрос. Конец файла - это специальное значение, выходящее за пределы диапазона, применяющегося для символов. Его возвращают как индикатор того, что символов больше нет. Физически никакого конца файла уже лет 30 как не существует.
Аноним 01/04/18 Вск 22:39:52 1166602
>>1156306 (OP)
ребят простите за ламерский вопрос , но интересно куда возвращает значение return доупстим из мейна или та же функция exit куда они выводя значения и где их посмотреть
Ответы: >>1166607 >>1166616
Аноним 01/04/18 Вск 22:48:02 1166607
>>1166602
Там до и после мейна ещё код работает.
А где посмотреть... погугли программа код возврата
Аноним 01/04/18 Вск 23:25:09 1166616
>>1166602
> где их посмотреть
В винде (в сосноли):
app.exe
echo %ERRORLEVEL%
В линуксе (в сосноли):
./app
echo $?
(или можно приглашение настроить, чтобы код возврата предыдущей команды автоматически выводило). Алсо, можно получать код возврата программно (для этого он и придуман).

> куда возвращает значение return
В main() return EXPR полностью аналогично вызову exit(EXPR);
Аноним 02/04/18 Пнд 08:42:44 1166681
Господа, переделайте, пожалуйста, Си++ код в Си.
https://ideone.com/wLxTJb
Ответы: >>1166687
Аноним 02/04/18 Пнд 08:56:00 1166687
>>1166681
Отвратительный код. С тебя $10.
printf("%.2x\n", 0x0f ^ 0x61);
Ответы: >>1166695
Аноним 02/04/18 Пнд 09:06:08 1166695
>>1166687
Смешно.

Следующий. Только не клоун, пожалуйста.

С помощью маски надо одновременно изменить состояние одного \ нескольких битов в байте, не затрагивая не нужные. Порядок бит (как в самом байте, так и в выбираемых для изменения) - MSB...LSB.
Ответы: >>1166697
Аноним 02/04/18 Пнд 09:08:33 1166697
>>1166695
Очевидно, что когда маска зависит от числа, тебе не нужна маска, потому что результат - константа. А если тебе нужно менять биты в рандомном числе, тебе нужно ДЖВЕ маски - для and-not и для or. Такие дела.
Ответы: >>1166700
Аноним 02/04/18 Пнд 09:11:47 1166700
>>1166697
В Си++ коде именно так. Поэтому и прошу переписать.
Пусть даже за вознаграждение. Разумное. 300к нет.
Ответы: >>1166709
Аноним 02/04/18 Пнд 09:23:07 1166709
>>1166700
Ну бля. Делоешь маску mask, в которой в которой нолики стоят там, где будешь менять биты (в Си литералы все еще не умеют в binary, если что). Записываешь биты bits, где в нужных местах стоят биты, которые нужно установить. Применяешь.

// Будем менять биты 6, 5, 3, 1.
uint8_t mask = ~((1 << 6) | (1 << 5) | (1 << 3) | (1 << 1));
// Будем ставить биты 6 и 3 в 1, а 5 и 1 в 0.
uint8_t bits = (1 << 6) | (1 << 3);
// Какой-то байт.
uint8_t value = (uint8_t) (rand() & 0xff);
// Применяем.
value = (value & mask) | bits;

> Порядок бит (как в самом байте, так и в выбираемых для изменения) - MSB...LSB.
А в крестовом коде LSB->MSB, как у нормальных людей. Ну пиши там (8 - 1 - индекс_бита), если сильно надо.
Ответы: >>1166732 >>1166787
Аноним 02/04/18 Пнд 10:12:09 1166732
>>1166709
байтоёбы
Ответы: >>1166924
Аноним 02/04/18 Пнд 12:04:21 1166787
>>1166709
Спасибо попробую собрать. Хотя не уверен, что получится.
Дай фейкомыльце, а?

Может ещё будут предложения.
Аноним 02/04/18 Пнд 15:26:44 1166873
>>1166508
http://www.c-cpp.ru/content/eof

Что такое потоки символов?
Ответы: >>1166882
Аноним 02/04/18 Пнд 15:29:34 1166878
>>1166787
> Дай фейкомыльце, а?
suck_my_nerd_cock@mail.ru
> Может ещё будут предложения.
С пошлостями не обращаться.

зы: дятел, за каким хуем ты учишься? Пиздуй сраз в макхряк трудоустраиваться
Ответы: >>1166885
Аноним 02/04/18 Пнд 15:34:11 1166882
>>1166873
Ну смотри. Можно абстрагироваться над файлом и представить себе трубу из которой выливаются символы один за другим. Тебе похуй, откуда они там в трубе берутся - может быть, они из файла читаются, может их пользователь ввел, может их другая программа на лету генерирует, а может они через сеть прилетели. И вот ты читаешь символы, а потом тебе прилетает вместо символа хуй (EOF). Тут-то ты и понимаешь, что больше у этой трубы ловить нечего. Вот это потоки. Потоки символов, байтов или еще какой-нибудь хуйни (в Си - потоки символов).
Ответы: >>1166899
Аноним 02/04/18 Пнд 15:35:26 1166885
>>1166787
Это >>1166878 если что не я был. Спрашивай тут, если к Си относится, или в прикрепленном, если не относится.
Ответы: >>1166901
Аноним 02/04/18 Пнд 15:47:46 1166899
>>1166882
В первый раз слышу про потоки, честное слово. Сравнение канализацией попахивает. Тебе может быть пойти на сантехника отучиться?!

Если по теме, то тебе необходимо читать файл в бесконечном цикле, опционально добавив задержки на чтение (читай про семафоры) при eof == true, кеш организовать, чтобы не читать файл каждый раз сначала.

Посмотри код tail, ключ -f к этой утилите именно то, что тебе надо.
Аноним 02/04/18 Пнд 15:48:42 1166901
>>1166787
Этот >>1166885 быдло мимикрирующее из /б просочившееся сюда, не обращай внимания.
Аноним 02/04/18 Пнд 16:21:08 1166911
Расскажите про стандарты языка. Что это и как это. Что значит поддержка компилятором стандарта.
Ответы: >>1166914 >>1166920
Аноним 02/04/18 Пнд 16:24:44 1166914
>>1166911
Все тоже самое, что и в скриптовых языках типа пиздона или эрэнэра.
Аноним 02/04/18 Пнд 16:26:33 1166915
Создать язык программирования это значит создать компилятор для него получается так? То есть создать некую программу которая будет переводить некие слова в машинный код? Почему тогда раз машинный код для каждого процессора разный то программа написанная мною на моем пк успешно запускается на другом пк с другим поколением процессоров к примеру у меня амд а у приятеля интел
Аноним 02/04/18 Пнд 16:32:16 1166917
>>1166915
Зависит от ОС и кучи других факторов.
Ответы: >>1166918 >>1166919
Аноним 02/04/18 Пнд 16:32:52 1166918
>>1166917
Можно подробнее?
Ответы: >>1166922
Аноним 02/04/18 Пнд 16:33:35 1166919
>>1166917
начни со стандартов и то как они связаны с компиляторами
Ответы: >>1166923
Аноним 02/04/18 Пнд 16:35:15 1166920
>>1166911
> Расскажите про стандарты языка. Что это и как это. Что значит поддержка компилятором стандарта.
В Си на текущий момент три стандарта. Это такие документы, очень скучно и подробно описывающие язык. Поддержка стандарта означает, что поддерживаются все нововведения по части синтаксиса (компилятором), а в стандартной библиотеке (если она идет с компилятором) присутствуют все новые функции, наличие которых гарантирует стандарт.

>>1166915
> Почему тогда раз машинный код для каждого процессора разный
Есть архитектура процессоров и архитектура набора команд (instruction set architecture). Вторая меняется очень редко. Например, твой процессор вполне способен выполнять инструкции, которые применялись в середине 80-х. А вот в обратную сторону это, очевидно, не работает. Современные инструкции старый процессор не осилит. И сейчас ты можешь собрать код для процессора с поддержкой AVX и соснуть на каком-нибудь старом ноуте.

> у меня амд а у приятеля интел
Архитектура команд у AMD и Intel по большей части одинакова.
Аноним 02/04/18 Пнд 16:38:34 1166922
>>1166918
Подробно писать не буду, ибо заебусь печатать.

Есть некий код, компилятор переводит его в машинный код, чтобы у тебя что то на экране появилось - это уже функция ОС, ну там окошко, текст, картинка. (Я сейчас не гвоорю про прямой вывод на экран текста из ассемблера).

Короче, программа имеет структуру - заголовок, откомпмлированные инструкции к выполнению на ЦП и т.п.

Запуская приложение ЦП анализирует и поэтапно выполняет код(откомпилированные инструкции).

Лень откровенно новоря приводить примеры как Си код вюпревращается в ассемблер, который в виде инструкций поступает на конвеер ЦП и как там память кеш и прочие компоненты задействованы.
Аноним 02/04/18 Пнд 16:41:21 1166923
>>1166919
Берем, например ци89. Есть там абстрактная комнда fuck(), которая в наборе инструкций интел и амд ЦП будет соответствовать последовательсти jmp ax, cmp e6, e4... и т.п. У интела это будет инструкция нащываться А, а у АМД Б.
Аноним 02/04/18 Пнд 16:44:25 1166924
>>1166732
Побитовые операции есть даже в javascript, но куда тебе дегенерату знать про это.
Аноним 02/04/18 Пнд 17:08:02 1166933
>>1166915
В ньюфаг-тред.
Аноним 02/04/18 Пнд 18:48:21 1166984
Screenshot from[...].png (21Кб, 654x228)
Аноны, хелпуйте нубу.
Задача - вывести ласт слово задом наперёд.
Вывод: euelueblue
Кто пояснит?
Аноним 02/04/18 Пнд 18:55:46 1166990
>>1166984
У тебя принтф печатает с символа, который ты передал и до \0.
e
ue
lue
blue
Аноним 02/04/18 Пнд 18:57:44 1166992
>>1166984
Попробуй печатать символ, а не строку. printf(%c, s)
Ответы: >>1166994 >>1166997
Аноним 02/04/18 Пнд 18:58:50 1166994
>>1166992
Ответы: >>1166997
Аноним 02/04/18 Пнд 19:02:56 1166997
Screenshot from[...].png (21Кб, 650x230)
>>1166992
>>1166994
Спасибо, так работает.
Ответы: >>1167203 >>1167423
Аноним 03/04/18 Втр 00:20:31 1167203
>>1166997
Что за компилятор?
Ответы: >>1167206 >>1167386
Аноним 03/04/18 Втр 00:53:04 1167206
>>1167203
Lexicon
Ответы: >>1167224
Аноним 03/04/18 Втр 03:15:24 1167224
>>1167206
>Lexicon
Что-то не гуглится. Есть ссыль на установщик?
Ответы: >>1167295
Аноним 03/04/18 Втр 09:21:58 1167295
>>1167224
Lexicon? Конечно есть: https://transfer.sh/yplpi/Lexicon-8.92.zip
Аноним 03/04/18 Втр 12:49:56 1167386
>>1167203
gcc 5.4.0
Аноним 03/04/18 Втр 13:52:12 1167423
Ничего не понял, вот это >>1166997 говно скомпилируется даже на микроволновке. Какая разница, какой конпелятор?
Или гений выше перепутал компилятор с иде?
Ответы: >>1167441 >>1167461
Аноним 03/04/18 Втр 14:20:40 1167441
>>1167423
Насколько я понял - да, перепутал. Увидил интерфейс моего саблайма и спросил что за компилятор.
Аноним 03/04/18 Втр 14:44:04 1167461
14092046290540.jpg (14Кб, 316x341)
>>1167423
Да, перепутал. Всё, придётся выйти покурить в окно. Так дальше жить нельзя.

П.С. Мне вот интересно, тут все обиженки, которые мусолят курьёзные случаи в чатиках \ курилке с такими же чуханами, как и они сами?
Выглядит так, что вам кто-то насрал на голову, а смыть жижу вы можете только типа "язвительными и остроумными" на самом деле - нет ответами в подобных тредах?

Вроде ничего пиздец архи-сложного не спрашивал, лол.
Ответы: >>1167609
Аноним 03/04/18 Втр 18:53:12 1167609
>>1167461
тебя даже никто не трогал, взял ещё и обиделся. тебе лечиться надо.
Аноним 03/04/18 Втр 20:58:25 1167682
Пишу простой интерпретатор, и для грамотной очистки памяти походу придется заюзать референс каунтинг, но готовых бибилотек или реализаций я не нашел. Если писать самому, то я даже не знаю с чего начать, какая вообще основная идея использования и реализации этой хуйни? Кто может пояснить, желательно с кодом?
Ответы: >>1167728 >>1167741
Аноним 03/04/18 Втр 23:19:52 1167727
image.png (125Кб, 399x213)
>>1166984
> длина строки
> sizeof(s)
Ответы: >>1167741
Аноним 03/04/18 Втр 23:22:48 1167728
>>1167682
У структуры прописываешь поле "рефкаунт", пишешь методы "инкреф" и "декреф". Во втором прописываешь логику освобождения памяти.

Ответы: >>1167729 >>1167771
Аноним 03/04/18 Втр 23:23:10 1167729
>>1167728
> пишешь методы
Ну функции, в смысле
Аноним 04/04/18 Срд 00:31:50 1167741
>>1167727
И ты сейчас нам пояснишь, почему нужно считать в рантайме через strlen, а не в компайлтайме через sizeof.

>>1167682
Посмотри на COM (одним глазком только, не нужно в дебри лезть, какой-нибудь вводной статьи хватит).
Ответы: >>1167764
Аноним 04/04/18 Срд 02:53:19 1167764
>>1167741
Во-первых, этот костыль работает только для массива, выделенного на стеке, во-вторых, попробуй вынести этот код в функцию и посмотри, что будет.

Ответы: >>1167791 >>1167883
Аноним 04/04/18 Срд 03:26:02 1167771
>>1167728
Для подобного существует boehm gc
https://en.m.wikipedia.org/wiki/Boehm_garbage_collector
Аноним 04/04/18 Срд 06:20:25 1167791
>>1167764
Причина "во-первых" и "во-вторых" одна и та же, sizeof(x)/sizeof(*x) для динамически выделенного массива будет использовать только очень особенный пограммист.
Ответы: >>1167795
Аноним 04/04/18 Срд 06:32:45 1167795
>>1167791
>sizeof(x)/sizeof(*x) для динамически выделенного массива будет использовать только очень особенный пограммист.
Ты скозал?
Ну и что же используют господа, обучавшиеся в Хуеле?
Ответы: >>1167803
Аноним 04/04/18 Срд 06:58:44 1167803
>>1167795
Я не настаиваю, конечно, в следующем коде нет ничего противозаконного

int x = malloc(10sizeof(int));
printf("%d", sizeof(x) / sizeof(*x));

Но результат может немного расстроить.
Ответы: >>1167804 >>1167863
Аноним 04/04/18 Срд 06:59:44 1167804
>>1167803
int (зв)x = malloc(10 * sizeof(int));
Ответы: >>1169183
Аноним 04/04/18 Срд 09:56:55 1167863
>>1167803
А еще можно после твоего printf сделать x[100]=0xdead. По твоей логике [] зло, нужно написать какую-нибудь array_set(), которая проверяет границы, лишь бы какой-нибудь недоучка не обосрался. Тебе в другой язык с таким подходом.
Ответы: >>1167883
Аноним 04/04/18 Срд 11:26:30 1167883
>>1167863
Что ты несешь? Я лишь сказал, что придирки в этом >>1167764 посте надуманные, и разве лишь дебил неопытный попадется на подобную ошибку (на определение числа элементов в массиве, выделенном маллоком).
Про добро и зло ты сам домыслил.
Ответы: >>1167944
Аноним 04/04/18 Срд 13:21:24 1167944
>>1167883
Так и я о том же.
Аноним 05/04/18 Чтв 16:56:35 1168611
Друзья, мне нужно как-то записать и вывести кириллицу не используя wchar, что делать?
Ответы: >>1168612
Аноним 05/04/18 Чтв 17:02:56 1168612
>>1168611
> что делать
Бочку. ОС, компилятор, более полное описание задачи?
Ответы: >>1168616
Аноним 05/04/18 Чтв 17:06:59 1168616
>>1168612
на степика есть задача, где нужно написать программу, принимающую кириллицу, далее дефолтная работа со строкой и вывод. Решил wchar, сказали збс а теперь без wchar, сказали думать в направлении, что кириллица не помещается в char
Ответы: >>1168619
Аноним 05/04/18 Чтв 17:12:40 1168619
>>1168616
Не знаю, кто такая эта ваша степика, но если у тебя нормальный линукс, ты можешь использовать UTF-8 (на винде тоже можешь, но в винде UTF-8 в консоли можно сделать только в десяточке) - если кириллица не помещается в один char, то может поместиться в несколько char. Про подробности кодирования UTF-8 см. википедию. Но без сборки хотя бы одного символа в wchar_t/char16_t/char32_t ты со строкой нормально не поработаешь (ну, конечно, моооожно, но больно).
Аноним 05/04/18 Чтв 17:54:24 1168644
image.png (372Кб, 1066x600)
Ответы: >>1168944
Аноним 06/04/18 Птн 03:32:47 1168944
>>1168644
Но ведь Си действительно мёртв.
Сейчас тащат плюсы.
Все, кто исползует Си - петухи и опущенцы.
Аноним 06/04/18 Птн 08:09:47 1169001
123.png (31Кб, 400x625)
сап, есть прога. Нифига не понятен принцип работы (да, она не совсем правильна). Хелп! Обясните дурачку!
Ответы: >>1169005 >>1169060
Аноним 06/04/18 Птн 08:21:48 1169005
>>1169001
Что тебе не понятно? Обычный односвязный список.
Аноним 06/04/18 Птн 10:46:33 1169060
>>1169001
>for(; pizda;)
Мам, смотри, я хакер!
Ответы: >>1169105 >>1169136
Аноним 06/04/18 Птн 11:46:14 1169105
>>1169060
Правильные ребята пишут так: for (; ∗current; current = &((*current)->next));
Аноним 06/04/18 Птн 12:24:31 1169135
>>1169105
Бля, ахуенно жеж.
Аноним 06/04/18 Птн 12:26:20 1169136
>>1169060
>>1169105
Но зачем эта сахарная параша когда есть while/
Аноним 06/04/18 Птн 14:15:58 1169183
>>1167804
А потом ты поменял тип x, или не ты, что только увеличивает вероятность внесения ошибки
Ответы: >>1169202
Аноним 06/04/18 Птн 14:44:49 1169202
>>1169183
>А потом
Суп с котом.
Аноним 09/04/18 Пнд 18:49:50 1170933
>>1156306 (OP)
https://pastebin.com/Pdv3jmv9
> Error in `main': malloc(): memory corruption (fast): 0x00000000013470e0
Посоны, почему возникает ошибка? Видимо, из-за функции f2, она как-то распидарасивает мою память void*. А как тогда правильно?
Ответы: >>1170945 >>1170954
Аноним 09/04/18 Пнд 19:01:43 1170945
>>1170933
>memory corruption
планку памяти смени на новую
Ответы: >>1170951
Аноним 09/04/18 Пнд 19:17:46 1170951
>>1170945
Где ж я в тюрьме планку памяти достану? Есть ещё варианты?
Ответы: >>1170985
Аноним 09/04/18 Пнд 19:29:55 1170954
>>1170933
Ты считаешь адреса неправильно. Сделал бы структурку типа struct { double res, x; int y; } и выделял бы ее. А у тебя вот это ок:
double ∗x = (double∗)memory;
Дальше твой массив y залезает на конец массива x, потому что тебе нужен адрес memory + n ∗ sizeof(double) = memory + 8n, а у тебя сложение (адресная арифметика) для указателя на инт, поэтому ты считаешь memory + n ∗ sizeof(int) = memory + 4n.
int ∗y = (int∗)memory + size;
Дальше ты скипаешь 2n даблов: memory + sizeof(double) ∗ 2 ∗ n = memory + 16n (адресная арифметика для double), что нихуя не равно memory + (sizeof(double) + sizeof(int)) ∗ n = memory + (2 + 4)n = memory + 6n:
double ∗res = (double∗)memory + 2∗size;
Соответственно, в этом последнем блоке ты вылезаешь за пределы массива.

Можешь считать итеративно:
double ∗x = memory;
int ∗y = (int ∗)(x + size); // Адресная арифметика для double∗.
double ∗res = (double∗)(y + size); // Адресная арифметика для int∗.
Это будет работать, если выравнивание, требующееся для дабла равно выравниванию, требующемуся для int. Иначе стоит сложить сначала оба массива даблов, потом уже инты. Но вообще, такой подход говно, не делай так, если не уверен.
Ответы: >>1170955 >>1170963
Аноним 09/04/18 Пнд 19:32:36 1170955
>>1170954
> memory + (2 + 4)n = memory + 6n:
memory + (4 + 8)n = memory + 12n (опечатался).

Аноним 09/04/18 Пнд 19:49:01 1170963
>>1170954
> Но вообще, такой подход говно, не делай так, если не уверен.
А как тогда делать?
У меня есть некоторая довольно большая структура
typedef struct {бла-бла-бла} mystruct;
несколько функций типа
int f(unsigned size, бла-бла);
которые:
1. Должны вызываться несколько тысяч раз.
2. Содержат в себе кучу различных маллоков
type ∗x = malloc(size ∗ sizeof(тип));

Препод сказал, все говно (и он прав, ибо сишный код работает по скорости так же, как питоновский прототип), ирл в таких случаях делают менеджоры памяти.
Понятия не имею, что такое менеджер памяти. Потому я добавил в структуру поле void∗, куда засовывается память, которая использовалась бы вместо маллоков внутри функции.
А как следовало поступить тогда?
Небольшой пример в выше я написал просто чтобы разобраться, почему у меня все неправильно работает.
За итеративный способ спасибо, пока так и сделаю.
Ответы: >>1170964 >>1170968
Аноним 09/04/18 Пнд 19:51:15 1170964
>>1170963
> int f(mystruct structure, unsigned size, бла-бла);
Фикс.
Аноним 09/04/18 Пнд 19:55:59 1170968
>>1170963
> Содержат в себе кучу различных маллоков
Ну так уменьши количество маллоков, посчитай, сколько тебе памяти нужно и выделяй заранее, не внутри цикла, а перед ним. А менеджер памяти у тебя уже есть, ты из него маллок дергаешь, и обогнать его чем-то кастомным может быть сложно.
Ответы: >>1171003
Аноним 09/04/18 Пнд 20:33:07 1170985
>>1170951
тюрьма психотронная, надеюсь?
Аноним 09/04/18 Пнд 20:56:54 1171003
>>1170968
А я проверил, "итеративный вариант" дал ускорение в полтора раза. Пожалуй, оставлю.
Ответы: >>1171009
Аноним 09/04/18 Пнд 21:01:10 1171009
>>1171003
Ты точно уверен, что malloc(sizeof(mystruct) * size) медленнее? Я вот не верю в такое.
Ответы: >>1171018
Аноним 09/04/18 Пнд 21:12:51 1171017
Говнокод.png (9Кб, 500x292)
Безымянный.png (4Кб, 388x28)
Народ посмотрите пожалуйста на мой выссер и скажите почему этот кусок говна не хочет запускаться. Битый час сижу над этим дерьмом. P.S. Скорее всего руки у меня кривые.
https://ideone.com/iK76G3
Ответы: >>1171020 >>1171021
Аноним 09/04/18 Пнд 21:13:09 1171018
>>1171009
https://pastebin.com/qD9yFRMq
Результат:
f1: 28.039000
f2: 19.173000

Завтра проверю в gcc, может другие числа будут.
Ответы: >>1171027 >>1171034
Аноним 09/04/18 Пнд 21:15:13 1171020
>>1171017
Знак умножения пропущен.
e определена в константах.
Тебе в плюсотред.
Ответы: >>1171031
Аноним 09/04/18 Пнд 21:16:34 1171021
>>1171017
Добавлю к замечаниям предыдущего анона, что ^ - это оператор побитового исключающего или, а степень - это функция pow().
Ответы: >>1171024
Аноним 09/04/18 Пнд 21:18:03 1171024
>>1171021
А еще есть exp.
Аноним 09/04/18 Пнд 21:20:21 1171027
>>1171018
Откуда у тебя там вторые + size взялись при вычислении указателей? Зачем? Мы считаем относительно предыдущего указателя. y - это память, следующая за size элементами в x, а res - это память, следующая за size элементами в y.
Аноним 09/04/18 Пнд 21:28:33 1171031
>>1171020
Спасибо что отозвались Аноны, вагон чая и уважения вам. Я поменял но все равно не врубается. https://ideone.com/wgsAbX
Ответы: >>1171034
Аноним 09/04/18 Пнд 21:34:25 1171034
>>1171031
Английский язык говорить? Сообщение об ошибка читать? Где переменная a объявлять? Нигде не объявлять? Вот и не врубаться.

>>1171018
Алсо, тест-кейс у тебя был очень хуевый. Сумма там заменится на i * 2, а учитывая, что у f1() сайдэффектов нет (она ничего не возвращает, и вообще почти не влияет на мир за своими пределами), нормальный компилятор вообще может выкинуть все ее содержимое на ненадобностью.
Аноним 10/04/18 Втр 05:01:35 1171078
Пардоньте, а нет ли аналага fopen такого, что б ему не нультерминированную строку требовалось передавать, а буфер и его длинну? Или только напрямую с sysenter возиться?
Ответы: >>1171234
Аноним 10/04/18 Втр 05:54:42 1171088
>>1169105
Правильные ребята используют tail-рекурсию.
Ответы: >>1171105
Аноним 10/04/18 Втр 06:48:43 1171105
>>1171088
>Правильные ребята
в плане правильно ебутся в жопы.
Аноним 10/04/18 Втр 11:40:44 1171234
>>1171078
Системный вызов open() сам хочет нультерменированную строку. Напиши себе обертку, которая будет копировать имя в массив и по указанному офсету втыкать \0.
Ответы: >>1171256
Аноним 10/04/18 Втр 12:04:53 1171256
>>1171234
Так и придётся делать, спасибо.
Аноним 10/04/18 Втр 18:53:02 1171420
>>1156306 (OP)
Поясните за realloc, нужно free вызывать для старого указателя? т.е если new_ptr = realloc(old_ptr, new_size);
нужно потом делать free(old_ptr);?
Ответы: >>1171426
Аноним 10/04/18 Втр 19:00:22 1171426
>>1171420
Если realloc() сфэйлился, твой указатель остается твоим, и ты должен его освободить. Если realloc() прошел успешно, ты заботишься только о том указателе, который тебе вернули. Старый указатель уже не твой. Кстати, realloc() может вернуть тебе твой же старый указатель, если есть возможность просто добавить памяти в выделенный блок, поэтому было бы странно, если бы тебе нужно было его освобождать.
portaudio Аноним 11/04/18 Срд 19:11:18 1171919
Ребят, кто знаком с этой звуковой либой (или понимает, что мне нужно), расскажите, почему в output буфер можно писать любые типы, но советуют float'ы (это из-за модуляции волны?).
PortAudio supports audio input and output in a variety of sample formats: 8, 16, 24 and 32 bit integer formats and 32 bit floating point, irrespective of the formats supported by the native audio API.

Алсо, если я хочу написать простую говорилку текста или мелодию из марио, то что мне нужно знать? Надо взять библиотеку полегче или же книжку потяжелей?
Ответы: >>1172032
Аноним 11/04/18 Срд 23:04:04 1172032
>>1171919
Возьми OpenAL и не еби себе мозг.
Аноним 12/04/18 Чтв 15:28:25 1172438
В чужом коде наткнулся на объявления функций в таком виде:

int some_func(a, b) int *a; int b;
{
....
}

Зачем так делалось?
Ответы: >>1172441
Аноним 12/04/18 Чтв 15:32:22 1172441
>>1172438
Видимо код совсем древний, во время K&R (ло принятия ANSI стандарта) так писали.
Ответы: >>1172491
Аноним 12/04/18 Чтв 15:42:11 1172453
Пытался написать слияние массивов в том стиле, в котором написана qsort.
С double и int вроде норм работает, а вот структуры обмениваются полями. Где я накосячил?

https://pastebin.com/ZZEzmk0C
Ответы: >>1172552
Аноним 12/04/18 Чтв 16:08:20 1172491
>>1172441
Это код из проекта, который появился после 2000 года.
Аноним 12/04/18 Чтв 17:58:53 1172552
>>1172453
Да вроде все норм. Смущает только вычисление длины хвоста массива в последних двух memcpy, не понимаю твоей логики. Покажи минимальный компилирующийся пример, который не работает.
Ответы: >>1172575
Аноним 12/04/18 Чтв 18:33:55 1172575
>>1172552
if(ind1 + ind2 < size_result)
{
....if(ind1 < size1)
........memcpy(curr_pos, (char)(arr1) + ind1sizeof_element, (size_result - size2 - ind1)sizeof_element);
....if(ind2 < size2)
........memcpy(curr_pos, (char
)(arr2) + ind2sizeof_element, (size_result - size1 - ind2)sizeof_element);
}
return EXIT_SUCCESS;

После того, как прошли цикл, может случиться лишь один из 3 вариантов:
1. ind1 + ind2 == size_result. Тогда места в результирующем массиве не осталось, надо выходить.
2. ind1 + ind2 < size_result, но один из массивов (пусть первый) кончился. Тогда ind1 = size1, в результирующем массиве осталось size_result - ind1 - ind2 = size_result - size1 - ind2 ячеек, которые нужно скопировать из второго массива, начиная с ind2-того элемента.

Я и сам проверил на паре примеров, вроде все норм. Видимо, я с указателями проебался.
Ответы: >>1172576
Аноним 12/04/18 Чтв 18:43:45 1172576
>>1172575
> в результирующем массиве осталось
Ну я просто не понял, что именно задает юзер в size_result. Допустим, у нас массивы int a[5] = { 0, 1, 2, 3, 4 } и int b[1] = { 0 }, а size_result 10 элементов (если size_result всегда равен сумме длин массивов, то зачем он вообще?), тогда мы копируем: size_result(10) - size2(1) - ind1(1) = 8 элементов. И у нас случается ОЙ.
Ответы: >>1172618
Аноним 12/04/18 Чтв 20:00:25 1172618
>>1172576
В данной функции (она не вещь в себе, а часть некоторой программы для комбинаторной оптимизации) первых два массива в сумме точно больше результирующего.
В первом массиве лежат инициализирующие элементы, во втором -- новые, полученные из инициализирующих. Потом мы выбираем из обоих массивов лучшие элементы и полученный массив делаем новым инициализирующим. Те элементы, что не вошли в новый массив, являются мусором.
Ответы: >>1172620
Аноним 12/04/18 Чтв 20:01:36 1172620
>>1172618
Хотя можно было бы добавить что-то типа if(size1 + size2 < size_result) {return POSHOL_NAHOOY;}
Аноним 13/04/18 Птн 12:38:09 1172927
>>1156306 (OP)
Анон, как устроенна работа GPU, у которых есть своя собственная память? Вот я, например, всегда работал с платами с видеокартой, у которой нет встроенной памяти, и здесь всё просто - графика из юзерспейса элементарно копируется в RAM, пинается GPU, который потом по DMA забирает данные, обрабатывает их и пишет результат во фреймбуфер опять же в RAM.
Ответы: >>1173029
Аноним 13/04/18 Птн 14:59:52 1173029
>>1172927
> юзерспейса элементарно копируется в RAM
Вот ето поворот.
А где был юзерспейс?

Ответы: >>1173124
Аноним 13/04/18 Птн 17:27:06 1173124
>>1173029
В свопе.
Аноним 13/04/18 Птн 19:21:06 1173221
Посоны, существует ли какой-нибудь сайт, куда можно выложить код, чтобы его похуесосили, пояснили за элементарные ошибки не те ошибки, которые делают код нерабочим, их я сам могу найти. Ошибки уровня "так делают только мудаки", стиль и прочее?

Гитхаб не то. Туда я выложу, и он будет висеть джва года без просмотров.
Аноним 13/04/18 Птн 19:31:06 1173226
>>1173221
>существует ли какой-нибудь сайт
https://govnokod.ru/
Аноним 13/04/18 Птн 20:10:56 1173240
>>1173221
всю жизнь хочешь провести в зависимости от мнения окружающих?
Аноним 13/04/18 Птн 20:36:29 1173262
>>1173221
https://codereview.stackexchange.com/
Ответы: >>1173275
Аноним 13/04/18 Птн 20:44:15 1173275
>>1173262
Благодарю, то что надо.
Аноним 14/04/18 Суб 07:28:27 1173437
Встречается такой стиль объявления функций:

int
function(char *s)
{
}

Объясните, какие преимущества даёт размещение возвращаемого типа в отдельной строке?
При этом в заголовочных файлах эти же в одной строке.
Ответы: >>1173603 >>1173712
Аноним 14/04/18 Суб 12:54:16 1173603
>>1173437
Конпелятору похуй. Дело вкуса.
Аноним 14/04/18 Суб 13:13:24 1173613
Как в сублайме включить вывод ошибок для Си? Работаю на линухе, если это имеет значение.
Ответы: >>1173712
Аноним 14/04/18 Суб 14:04:10 1173661
Антоны, что использовать для перехвата нажатия клавиши в Си?
Ответы: >>1173712
Аноним 14/04/18 Суб 15:53:36 1173712
>>1173437
Если тип возвращаемого значения длинный, или конвенция вызова указывается, то искать глазами имя функции проще:
const struct myyoba_data_store * MYLIB_CALLTYPE
function(void)
{
}

>>1173613
Билд-система для gcc и/или для Makefile уже есть в комплекте, нажми Ctrl+B. При даблклике на сообщение об ошибке оно переходит к нужной строке. Если хочешь ошибки инлайном, скажи "show_errors_inline": true в настройках. Если у тебя кастомный билд, сделай .sublime-build свой, там всего лишь регэксп для сообщений сочинить.

>>1173661
В Си - ничего. Какая ОС? Клавиша в графическом приложении или в консоли?
Ответы: >>1173739
Аноним 14/04/18 Суб 16:41:51 1173739
>>1173712
>В Си - ничего. Какая ОС? Клавиша в графическом приложении или в консоли?
В консоли. ОС - Linux Gentoo.
Ответы: >>1173749
Аноним 14/04/18 Суб 16:53:27 1173749
>>1173739
Опиши нормально задачу. У кого ты клавиши перехватывать собрался, зачем? Ты там reptyr какой-нибудь пишешь, или что?
Ответы: >>1174056
Аноним 15/04/18 Вск 06:57:48 1174056
>>1173749
Пишу рогалик в терминале.
Ответы: >>1174146
Аноним 15/04/18 Вск 10:35:14 1174146
>>1174056
А ты действительно изучил хотя бы основы сишечки?
fgets, gets, scanf...
Ответы: >>1182052
Аноним 15/04/18 Вск 11:50:42 1174187
C11, хотя неважно. Есть:
#define PROGRAM program
Почему вместо того, чтобы работать так:
const char msg[]=#PRORGRAM ":Unable to do smth\n"
оно (gcc) выдаёт "stray # in somewhere..."
Оно работает только так:
#define STR(a) #a
const char msg[]=STR(PROGRAM) ":Unable to do smth\n"
И тогда в сообщении будет имя программы, как положено.
Что-то в связи с последовательностью работы препроцессора, порядком раскрытия макросов чтоли, но мне непонятно, что именно ему мешает по-человечески со мной...

Аноним 15/04/18 Вск 11:52:56 1174189
>>1174187
Так, только не надо вот говорить, что это потому, что я #PRORGRAM написал.
Нее
Аноним 15/04/18 Вск 11:55:33 1174195
>>1174187
>#define PROGRAM program
Попробуй утакуот
#define PROGRAM "program"
Ответы: >>1174197 >>1174201
Аноним 15/04/18 Вск 11:56:41 1174197
>>1174195
Пробовал, нихрена.
Да и бессмысленно это.
Аноним 15/04/18 Вск 11:57:50 1174201
>>1174195
А, всмысле, потом PROGRAM уже без '#' подставлять?
Ответы: >>1174208
Аноним 15/04/18 Вск 12:03:28 1174208
>>1174201
До. У тебя же строка
Аноним 15/04/18 Вск 14:24:21 1174300
>>1174187
> "stray # in somewhere..."
# - это макрооператор, оно часть препроцессора, а не языка, работает только в макросах.

> #define STR(a) #a
Тоже неправильно, оно всего лишь обернет аргумент в кавычки, не попытавшись его раскрыть:
#define FOO bar
STR(FOO) // Тут получится "FOO", а не "bar".

Для раскрытия макросов нужен еще один уровень:
#define STR_(a) #a // Обернет в кавычки.
#define STR(a) STR_(a) // Выполнит макроподстановку для a.

А про #define PROGRAM "program" уже написали выше, строковые литералы отлично конкатенируются безо всяких операторов.
Ответы: >>1174304
Аноним 15/04/18 Вск 14:26:18 1174304
>>1174300
> #define FOO bar
STR(FOO) // Тут получится "FOO", а не "bar".

А почему у меня всегда bar?
Ответы: >>1174310
Аноним 15/04/18 Вск 14:35:46 1174310
>>1174304
https://ideone.com/KLwTN3 (внизу)
Ответы: >>1174555 >>1174621
Аноним 15/04/18 Вск 19:44:38 1174555
>>1174310
Я упоролся, соре.
Всё там, как и ожидалось.
Аноним 15/04/18 Вск 20:43:28 1174621
>>1174310
Эт что за магия!? оО
Аноним 16/04/18 Пнд 00:56:29 1174700
сап аноны, поясните за передачу tar архива по tcp с помощью сокетов.
Ответы: >>1174825 >>1174995
Аноним 16/04/18 Пнд 04:36:23 1174727
А 9-битовый тип данных можно организовать?
А то 8 бит мало, а 16 много, чтобы возводить флаги. Контролируемых ситуаций 9.
Ответы: >>1174728
Аноним 16/04/18 Пнд 04:37:08 1174728
>>1174727
Хотя каковый в этом смысл, там же всё равно выравниваться в итоге будет по крайней мере по 8 битам, да?
Ответы: >>1174729
Аноним 16/04/18 Пнд 04:37:52 1174729
>>1174728
Да.
Аноним 16/04/18 Пнд 08:48:18 1174825
>>1174700
Открываешь сокет, передаешь. Не забываешь, что send может передать меньше, чем ты ему сказал, поэтому внимательно обрабатываешь код возврата.
Аноним 16/04/18 Пнд 11:22:33 1174901
Kratkoe-rukovod[...].jpg (12Кб, 300x241)
Хелп
Нужно написать Windows драйвер (мне вроде KMDF подходит), который будет считывать значение TSC: Time stamp counter, счетчик тактов (на самом деле не TSC, а MSR мне нужно) регистра процессора и записывать новое значение в этот регистр.

Проблема в том, что я вообще не понимаю как в этом блядском Windows всё работает и не понимаю где взять источник информации.
C Линуксом всё просто и аналогичный драйвер (в линуксе это был модуль ядра) я уже написал, потому что по Линуксу тонна материала в интернете.

Посоветуйте инфы (книги, ссылки, статьи, можно все на англ, но лучше на русском), чтобы разорбаться в том, как писать драйвера (KMDF) для Windows.

В Windows Internals судя по оглавлению не раздела про написание драйверов. А на сайте Microsoft написано мало и не полно как-то, хотя может я и жопой читал
Аноним 16/04/18 Пнд 11:46:24 1174909
>>1174901
Есть книга про драйверопесание под венду, гугли, лентяй
Аноним 16/04/18 Пнд 14:39:11 1174995
>>1174700
man netcat
Аноним 16/04/18 Пнд 14:52:56 1175003
>>1174901
Windows Must Die
Ответы: >>1175008
Аноним 16/04/18 Пнд 14:55:08 1175008
771px-Windowses.jpg (64Кб, 771x599)
>>1175003
>Windows Must Die
Аноним 16/04/18 Пнд 16:52:31 1175041
>>1174901
Качаешь DDK (можно, и даже возможно лучше - несвежий какой-нибудь). Читаешь документацию из комплекта (для такой простой хуйни достаточно введение прочитать). Правишь любой простой пример из комплекта. Компилируешь. Алсо, у MS сейчас все свежие примеры на гитхабе лежат.
Аноним 17/04/18 Втр 10:44:37 1175326
друзья, помогите с правильным ответом на вопрос: вот например у нас есть указатель на первый элемент массива a и указатель b на nй элемент массива, (b-a+1) - индекс элемента массива, так вот вопрос, нахера мы единицу прибавляем? нужен именно правильный ответ. Заранее спасибо
Ответы: >>1175337 >>1175349
Аноним 17/04/18 Втр 11:45:44 1175337
>>1175326
Ну, смотри: спасибо, что посмотрел.
Ответы: >>1175343
Аноним 17/04/18 Втр 11:54:15 1175343
>>1175337
объясни, не понял
Ответы: >>1175347
Аноним 17/04/18 Втр 12:09:42 1175347
>>1175343
Потому что
> указатель на первый
а не на нулевой.
Ответы: >>1175420
Аноним 17/04/18 Втр 12:11:49 1175349
>>1175326
Правильный ответ: единицу прибавлять не нужно. Если у тебя указатели равны, то их разница 0, и индекс массива тоже 0, ничего прибавлять не нужно. Если у тебя 1-based массивы, то это другой язык, и тебе в другой тред.

Ответы: >>1175420
Аноним 17/04/18 Втр 13:33:52 1175420
>>1175347
>>1175349
извиняюсь, конечно, указатель на нулевой элемент, я так и ответил, но сказали, что не правильно
Ответы: >>1175424
Аноним 17/04/18 Втр 13:35:59 1175424
>>1175420
Шли их нахуй. Смело, решительно. Может ты задание не так понял? Может, тебе количество элементов посчитать с первого по второй указатель? Тогда будет как раз +1). Иначе шли нахуй.
Аноним 18/04/18 Срд 13:34:27 1176042
Вроде тот тред. По заданию нужно сделать двустороннюю полудуплексную передачу данных в одном канале между родственными процессами, используя семафоры для синхронизации. Собственно, у меня вопрос - один канал и двусторонняя передача совместимы? Мы же один из дескрипторов обязаны закрыть.
Ответы: >>1176102 >>1176106
Аноним 18/04/18 Срд 14:48:56 1176102
>>1176042
хорошее задание, у тебя неплохой препод в вузике
делай его самостаятельно, будет полезно
Ответы: >>1176136
Аноним 18/04/18 Срд 14:50:53 1176106
>>1176042
конечно, в этом и суть полудуплекса
режим рации

Ответы: >>1176136
Аноним 18/04/18 Срд 15:23:31 1176136
>>1176102
>>1176106
Так, падажжите. Нам говорили, что при работе с каналом мы обязаны закрыть для себя вход или выход, смотря читаем или пишем. Обратно открыть мы не можем. Так что я как-то не понимаю, как это сделать.
Ответы: >>1176172
Аноним 18/04/18 Срд 16:13:54 1176170
Screen Shot 201[...].png (28Кб, 628x236)
>>1156306 (OP)
Поясните за hash функции, как их пишут? Методом тыка? Или есть теория?
Ответы: >>1176178
Аноним 18/04/18 Срд 16:14:49 1176172
>>1176136
Давай для начала определимся, что такое канал. По-английскиПо-человечески оно как называется?
Ответы: >>1176174
Аноним 18/04/18 Срд 16:20:07 1176174
>>1176172
То, которое pipe(fd)
Ответы: >>1176184
Аноним 18/04/18 Срд 16:27:36 1176178
>>1176170
Ты хотя бы википедию почитал прежде чем такой глупый вопрос задавать. Хэш рование, криптография и всякое такое. Там де про алгоритмы узнаешь.
Ответы: >>1176184
Аноним 18/04/18 Срд 16:41:47 1176184
>>1176178
Хэш на пике не имеет никакого отношения к криптографии. Дизайнят руками, смотрят на распределение.

>>1176174
Пайп действительно однонаправленный, но если у тебя parent/child, то тебе нужно просто писать в правильный конец. Закрывать дескрипторы нужно не потому, что иначе не работает, а для того, чтобы read() мог отследить EOF на пайпе (если у тебя открыт write-дескриптор на пайп, read() не вернет 0, даже если на той стороне write-дескриптор закроют).
Ответы: >>1176192 >>1176193
Аноним 18/04/18 Срд 16:51:11 1176192
>>1176184
И как тогда мне, спрашивается, "Самостоятельно, используя для синхронизации процессов семафоры, организовать двустороннюю
поочередную (полудуплексную) связь процесса-родителя и процесса-ребенка через канал"? В задании-то канал один. Сделаю через два пайпа, хз.
Ответы: >>1176193 >>1176225
Аноним 18/04/18 Срд 16:52:37 1176193
>>1176184
>>1176192
Алсо, есть идея послать EOF и тем самым схитрить, но быстрый поиск не помог.
Аноним 18/04/18 Срд 17:27:23 1176225
>>1176192
У тебя два процесса, один пайп. У каждого процесса есть два хэндла - на чтение и на запись. Родитель такой семафором помахал, записал, а потомок читает. Потом потомок помашет, запишет, а родитель прочитает. Получается полудуплекс, ну. Оба могут писать в канал, но в конкретный момент времени - только один. Рации всмомни: - У нас тут какая-то хуйня, приём. - И у нас тоже, приём. - Да ебись оно все конем, конец связи. - вот это тебе и нужно реализовать.
Ответы: >>1176232
Аноним 18/04/18 Срд 17:30:40 1176232
>>1176225
Так вон выше говорят, мол, нельзя, read зависнет. В общем-то о таком и думал, но все упиралось в то, что во всех примерах одна сторона пайпа в родителе/потомке таки закрывалась.
Ответы: >>1176236
Аноним 18/04/18 Срд 17:37:32 1176236
>>1176232
Это я писал. read() зависнет, если ты будешь в цикле читать. Не читай в цикле - смотри через ioctl(..., FIONREAD...), сколько есть и читай. Прояви фантазию, в общем - там вариантов дохуя.
Ответы: >>1176243
Аноним 18/04/18 Срд 17:47:03 1176243
>>1176236
Мы такой хуйни не проходили. Ладно, буду побайтово читать, ожидая встретить нуль-терминатор. Попробую, по крайней мере.
Аноним 19/04/18 Чтв 12:03:18 1176675
Двач. Вот прочитал я некоторое количество книг из шапки, с переменным успехом решаю задачки на всяких Codefights, Codewars и тд, но до сих пор не могу понять, куда реально можно приложить Си. Посоветуй какие нибудь книжечки с примерами, где поясняются реальные программы.
Аноним 19/04/18 Чтв 12:30:09 1176703
>>1176675
ОС, компиляторы и прочие движки БД.
Аноним 19/04/18 Чтв 12:47:24 1176716
>>1176675
Advanced Programming in UNIX environment
Programming Applications for Microsoft Windows
Читай документацию по нужной ОС, читай чужие исходники.

> куда реально можно приложить Си
Куда угодно. Если тебе нечего написать, зачем ты вообще учил язык?
Аноним 19/04/18 Чтв 13:02:47 1176725
>>1176675
Железо программировать. Хотя это немного узкая область, не каждому интересно это
Аноним 19/04/18 Чтв 15:38:04 1176826
>>1176675
Модуль для питона напиши.

Аноним 19/04/18 Чтв 17:47:09 1176888
Анон, решаю тут K&R из шапки и застрял на задании 1-18: https://pastebin.com/A7cJtdG1 (там задание тоже написано). Вроде как код написал, в голове всё сходится, но бля, оутпут просто пиздец. Символы, которые я пропускаю, а именно множественные табы и пробелы, заменяются на какую-то хуйню полную. Типа знаки вопроса или что-то на уровне, хотя по сути, я их просто бля пропускаю и всё, забываю на всегда. Познавшие аналы си, подскажите, что не так?
Ответы: >>1176926 >>1176932
Аноним 19/04/18 Чтв 18:20:01 1176926
>>1176888
Точно хочешь узнать, что не так в твоей реализации (сейчас не могу), или тебе просто задачу решить. Может, перепишешь? Алгоритм простой: ты читаешь всю строку, сколько ее ни есть, но если прочитанный символ - не таб и не пробел, ты запоминаешь его индекс в переменную. Перед выходом просто пишешь по индекс+1 символ '\0'. Четыре строки на тело getline. Если возвращенная getline строка пустая (по нулевой позиции \0), ты ее пропускаешь.
Аноним 19/04/18 Чтв 18:24:04 1176932
>>1176888
Хотя, если что, одна из твоих проблем в том, что i ты инкрементишь каждую итерацию, а в массив по i пишешь не всегда. Судя по высказыванию "оутпут просто пиздец", у тебя в незаписанных элементах массива куски предыдущих строк и прочий мусор.
Ответы: >>1176937
Аноним 19/04/18 Чтв 18:33:42 1176937
>>1176932
Лол.
Спасибо. Действительно в этом и было дело
Аноним 20/04/18 Птн 14:02:36 1177300
https://pastebin.com/5FCsNe3T
Котаны, почему в файл попадает мусор вместо настоящего содержания конца текста?
Аноним 20/04/18 Птн 14:45:25 1177325
Где я объебался и где мой полудуплекс-то?
https://pastebin.com/ABTiR204
Ответы: >>1177362
Аноним 20/04/18 Птн 14:53:48 1177327
f.png (83Кб, 1051x657)
>>1177300
не попадает
но это на другой платформе и с учетом правки параметров вызова calloc
Ответы: >>1177332
Аноним 20/04/18 Птн 15:04:28 1177332
>>1177327
>с учетом правки параметров вызова calloc
Ошибка появилась из-за смены malloc/calloc.

Спасибо, попробую дома на линупше с гцц запустить.
Аноним 20/04/18 Птн 16:25:12 1177362
>>1177325
Ты бы для наглядности msg высылал, а не всегда [0].
Вывод ни о чём.
Ответы: >>1177363
Аноним 20/04/18 Птн 16:26:21 1177363
>>1177362
Я хотел высылать msg, но у меня происходит segfault. Что странно.
Ответы: >>1177377 >>1177382
Аноним 20/04/18 Птн 17:04:17 1177377
>>1177363
Ну, семафор 0 довольно прозрачный. Но вот с первым дела, конечно...
Допустим, родитель первый захватил. Значение семафора 1 равно 1: данных в канале нет, hd=0. Потом сделал семафор 1 нулевым. Освободил нулевой семафор...
Пошёл дочерний. Семафор 1 нулевой => данные есть. hd=1 => Дописали единицу к семафору 1. А это признак отсутствия данных для родителя, да? Родитель ничего не читает, а лишь уменьшает семафор на 1, делает его нулевым для нас, а мы снова ему срём и увеличиваем, а он ничего не читает и для нашего чтения уменьшает
Можно поменять в после родителя и дочку.
Я правильно понял?

Ответы: >>1177381 >>1177387
Аноним 20/04/18 Птн 17:12:25 1177381
>>1177377
Да, в семафоре 1 единица - признак отсутствия данных. Родитель смотрит на него, если в семафоре не ноль - не пытается читать, а сам пишет и ставит ноль. Если же данные были, то он пишет и семафор не трогает. Если данные были, но все свое уже выслано - увеличивает семафор давая понять, что ничего не высылал.
Ответы: >>1177386
Аноним 20/04/18 Птн 17:13:48 1177382
>>1177363
Я хз, что если инициализировать нулём semval в main(), а потом просто читать с sem_op=-1, а писать с sem_op=1.
Так же прозрачнее будет, ИМО.
Вообще, с этой hd как-то некрасиво.
Аноним 20/04/18 Птн 17:15:53 1177386
>>1177381
Так у тебя после второго цикла родителя/потомка получается, что выставляется значение семафора "читать нельзя", а при этом пишутся данные.
Зачем?
Ответы: >>1177387
Аноним 20/04/18 Птн 17:18:27 1177387
>>1177377
>>1177386
Так он не добавляет 1 к семафору же. S < 5 (выслано меньше пяти сообщений), а if(hd) засунуто в else к первому условию.
Ответы: >>1177494
Аноним 20/04/18 Птн 19:23:54 1177450
>>1177300
Потому что нужно выделять на байт больше и дописывать \0 в конец. А вот calloc() там в хуй не уперся, все равно fread() все затрет.
Ответы: >>1177520
Аноним 20/04/18 Птн 20:37:03 1177494
>>1177387
А может быть так, что родитель ни разу не даёт потомку ресурс, а потом в конце if(hd) и ставит семафор 1 в единицу, а потомок потом получает ресурсы, но уже не читает?
Я понимаю, что ты несколько раз прокрутил, но всё же...
Ответы: >>1177644
Аноним 20/04/18 Птн 21:28:14 1177520
>>1177450
Это первое, что я нагуглил и проверил (выделил calloc'ом size+1 элемент), не сработало.

Вообще, что делают нормальные люди, если требуется распарсить несколько тысяч файлов на С, имеющих довольно разнообразную структуру (файл содержит список переменных, которые могут идти в любом порядке, и строки-комментарии, начинающиеся с символа "#")? Писать парсер с нуля довольно утомительно.
Ответы: >>1177531
Аноним 20/04/18 Птн 21:32:10 1177531
>>1177520
> не сработало
-Wall скажи, и тебе компилятор объяснит, кто ты.

> что делают нормальные люди, если требуется распарсить
Берут flex или его отродья. Хотя такое и вручную несложно написать.
Аноним 21/04/18 Суб 08:09:22 1177644
>>1177494
В общем, я понел. Пока потомок форкается - предок успевает уже все прокрутить, сам с собою поговорить, удалить семафоры и завершиться. Похоже, что способ снхронизации надо переделать.
Аноним 21/04/18 Суб 08:40:26 1177651
Screenshot3.png (14Кб, 626x503)
>>1156306 (OP)
У вас ссылка не рабочая.
Ответы: >>1177879
Аноним 21/04/18 Суб 10:18:38 1177698
В общем, спасибо всем за помощь, таки синхронизировал. Пришлось сделать три семафора, и жопой чую, что можно было проще. Если кто подскажет, как это упростить - буду благодарен.
https://pastebin.com/grPm2q6A
Аноним 21/04/18 Суб 13:21:52 1177769
>>1177698
Гораздо проще это с помощью select делать.

Аноним 21/04/18 Суб 13:46:26 1177797
>>1177698
Вообще, у тебя основная сложность из-за того, что ты долбишься с тем, что у тебя +-1+1-1+-+-1 везде. Абсолютные бы значения, а не смещения.
semctl умеет в SETVAL и GETVAL, ты можешь
помирить родителя и потомка на том, что если один записал, то значение P, если другой записал, то значение C, в противном случае ноль.
А от 0 до SETVMX можно организовать битовые масочки на "родитель может читать",
"родитель может писать", "потомок может читать", "потомок может писать".
Но это всё очень абстрактно, сам так не делал.
Аноним 21/04/18 Суб 15:23:47 1177846
>>1177698
Еее, многопоточность.
Ответы: >>1177857
Аноним 21/04/18 Суб 16:07:48 1177857
>>1177846
Многопроцессность , что в Линухе довольно схоже
Аноним # OP  21/04/18 Суб 17:16:30 1177879
>>1177651
Спасибо.
Аноним 21/04/18 Суб 22:36:24 1178078
аноны помогите нуфагу разобраться в коде пжалста, (https://pastebin.com/t27m9qKh)

что за конструкция по шагам:
1)BYTE b = (BYTE)&k;
2)if(++j==16&&i<398){
Ответы: >>1178102
Аноним 21/04/18 Суб 23:32:56 1178102
>>1178078
> BYTE b = (BYTE)&k;
Берется указатель на переменную, которая лежит в области данных.

> if(++j==16&&i<398){
Распечатывается хексдамп начиная с переменной выше. Зачем в условии вторая часть, я хуй знаю, а первая часть нужна, чтобы втыкать конец строки и (неправильно) печатать адрес после каждых 16 байтов.
Аноним 23/04/18 Пнд 20:18:20 1178487
>>1177300
>https://pastebin.com/5FCsNe3T
int main()
{
char filename = "C:/Users/m08kaa3/Desktop/projects/Sheduling/simulation/10/gen_10.spc";
FILE
config = fopen(filename, "r");
fseek(config, 0, SEEK_END);
long size = ftell(config);
fseek(config, 0, SEEK_SET);
char * conf_text = malloc(size);
memset(conf_text, '\0', size);
fread(conf_text, sizeof(char), size, config);
printf("%s\n", conf_text);

//Если это не выведет лишних символов значит в файле в конце есть мусор. Если мусор пропал то удали эту проверку и уповай на memset(), мусор бывает когда память неинициализирована, даже если она статическая.
fseek(config, 0, SEEK_SET);
fgets(conf_text, 1024, config);
puts(conf_text)


fclose(config);
free(conf_text);
}
Ответы: >>1178524
Аноним 23/04/18 Пнд 20:31:06 1178500
Посоветуйте техник парсинга файлов.
На-до-е-ло.
> просрал символ
> просрал разделитель
> EOF появился неожиданно
> недозаполнил и мне норм
> исправил пункты 1-4, но функция парсинга использует 100500 флагов состояния и занимает треть программы
Аноним 23/04/18 Пнд 20:33:19 1178505
>>1178500
Имею в виду литературу, где это есть, статейки занятные, в которых предлагают перейти на perl
Аноним 23/04/18 Пнд 21:07:01 1178524
>>1178487
Обсуждали выше. Размер файла 10, выделили 10 байт памяти, записали 10 байт, но это не сделало эти 10 байт строкой, которую можно вывести через printf, потому что \0 никто не дописал. Выводим это говно, получаем все что угодно - от мусора до сегфолта. На самом деле, можно printf("%.*s\n", size, conf_text);

>>1178500
Уже советовали flex.
Ответы: >>1178952
Аноним 23/04/18 Пнд 21:41:26 1178551
>>1178500
>Посоветуйте техник парсинга файлов.
recursive descendant
Аноним 23/04/18 Пнд 22:57:21 1178568
>>1178500
>парсинга файлов
коких файлов? со смайликами или бинарными залупами?
Ответы: >>1178621
Аноним 24/04/18 Втр 04:29:53 1178621
>>1178568
Строки ASCII-символов.
Ответы: >>1178789
Аноним 24/04/18 Втр 11:24:36 1178789
>>1178621
Разделяй их на пробелах.
Аноним 24/04/18 Втр 15:51:05 1178952
>>1178524
Кажется вы там замороченой хуйни насоветовали. Можно же вывести printf("%s\0", buf);
Ответы: >>1179127 >>1179146
Аноним 24/04/18 Втр 20:15:11 1179127
>>1178952
Строка -- это массив char@, заканчивающийся нулем.
printf("%s\0", buf) говорит: выведи мне строчку buf, потом добавь "\0".
Принтф начинает писать buf. Пишет, пишет, пишет, далее варианты:
1. Залезает в запрещенную область.
2. Упирается в случайно найденном в мусоре 0.
В первом случае шлет нахуй, во втором кроме сроки выводит всякое говно.
Ответы: >>1179132
Аноним 24/04/18 Втр 20:22:06 1179132
>>1179127
Уговорил чёрт языкатый.
sprintf(buf1, "/%%ds\0", size);
printf(buf1, buf);
Ответы: >>1179133 >>1179146
Аноним 24/04/18 Втр 20:22:41 1179133
>>1179132
фиксить не буду, нутыпонел.
Аноним 24/04/18 Втр 20:50:14 1179146
>>1178952
>>1179132
Лолшто?

На самом деле достаточно fwrite(..., stdout), но мы говорили о строках.
Аноним 25/04/18 Срд 10:46:38 1179357
ЧЯДНТ?
Отслеживается 9 true/false состояний для, соответственно, 9 значений ячейки. Приходится юзать uint16_t.
#define BIT_MASK(val) (1<<(val-1))
...
// Добавить val к маске
ban_vals|=BIT_MASK(curval);
if(!(ban_vals&BIT_MASK(curval))
write(0, "NIPANIMAT", strlen(<-von_to_govno);
Как после OR'а у меня НЕ-И выдаёт тру?
Было ...000000000
Я заполнил 2,3,5:
...000010110
Потом чекаю отсутствие, допустим, 2-го, т.е.
if(!(...000010110 & ...000000010)) - должен дать false, почему даёт true?

Аноним 25/04/18 Срд 15:49:49 1179535
>>1179357
Я чот не понял, как ты 9 бит используешь в одном байте?
Ответы: >>1179539
Аноним 25/04/18 Срд 15:55:39 1179539
>>1179535
> uint16_t
Действительно
Я та мтроеточие ставил, что 7 оставшихся не писать.
Забейте, чуда не случилось, я обосрался в другом месте.
Ответы: >>1179543
Аноним 25/04/18 Срд 15:55:44 1179540
>>1179357
Запусти дебаг и отследи все, можешь промежуточных переменных добавить.
И не еби мозги.
Аноним 25/04/18 Срд 15:59:13 1179543
>>1179539
Да ты по всем фронтам обосрался. Тебе нужно работать с отдельными байтами по 8 бит, использовать можно тип short. Так то по теме проверки бит на чёткость уже кучи материала, но блядь, это же не строка чтоб сразу сравнивать все 9 из 128 бит.
Ответы: >>1179544 >>1179545
Аноним 25/04/18 Срд 16:01:36 1179544
>>1179543
Падажи, uint16_t это 16-битный.
Ответы: >>1179550
Аноним 25/04/18 Срд 16:02:46 1179545
>>1179543
И short на наших современных x86_64 чаще всего int16_t, не? А то и больше.
Ответы: >>1179551
Аноним 25/04/18 Срд 16:07:00 1179547
>>1179357
Все должно работать. Разве что твоя нумерация битов с единицы сбивает с толку, но она у тебя консистентная, поэтому не приводит к проблемам.
Аноним 25/04/18 Срд 16:10:01 1179550
>>1179544
Пардон, попутал.
Аноним 25/04/18 Срд 16:11:33 1179551
>>1179545
Мне кажется что int16_t это нечто другое. Впрочем не вижу смысла использовать именно его. Почему бы не копнуть в сторону bit field?
Ответы: >>1179552
Аноним 25/04/18 Срд 16:16:33 1179552
>>1179551
> Впрочем не вижу смысла использовать именно его.
Например, есть ограничения по памяти. А так бы я тоже предложил unsigned int или хотя бы что-то типа uint_fast16_t.
> Почему бы не копнуть в сторону bit field
Внутри одной программы вполне норм, хотя и сводится к асболютно тому же коду, что и проверка побитовыми операциями. Плюс установка двух-трех флагов за раз вручную может оказаться дешевле битфилдов. Но битфилды непереносимы, т.е., если у >>1179357 сетевые пакеты, то ему все равно придется доставать флаги из битфилдов и паковать в инты для передачи по сети.
Ответы: >>1179554
Аноним 25/04/18 Срд 16:19:30 1179554
>>1179552
Ненужно. Битфилды сформированные из инта будут интом и там и там, разница проявится если разная архитектура и внезапно инт не 32 бита а меньше или больше.
Ответы: >>1179555
Аноним 25/04/18 Срд 16:20:21 1179555
>>1179554
> Битфилды сформированные из инта будут интом
Вот только порядок и выравнивание будут отличаться от компилятора к компилятору.
Ответы: >>1179556
Аноним 25/04/18 Срд 16:22:06 1179556
>>1179555
Нахуя это учитывать?
Ответы: >>1179562
Аноним 25/04/18 Срд 16:28:18 1179562
>>1179556
Ну что ж ты тупишь? Ты написал свой Телеграм, Вася скомпилировал его вижуал студией под x86, а Петя - gcc под Байкал. У Васи первый флаг располагается в младших битах, а у Пети в старших, и вы не можете даже поговорить об этом, потому что из-за этих различий вы по сути пользуетесь разным протоколом.
Ответы: >>1179563
Аноним 25/04/18 Срд 16:29:58 1179563
>>1179562
Так это же нормально иметь под байкал отдельную версию ПО или не? Насколько я знаю архитектура почти гарантия совместимости и правильного межпроцессорного взаимподействия.
Ответы: >>1179564
Аноним 25/04/18 Срд 16:32:13 1179564
>>1179563
> отдельную версию ПО
Ну да, давай велосипеды по двадцать раз переписывать, вместо того чтобы просто сделать flags & SOME_BIT.
Ответы: >>1179566
Аноним 25/04/18 Срд 16:35:08 1179566
>>1179564
Нет, давай лезть на более низкий уровень имея те же операции в более высокоуровневом представлении.
Ответы: >>1179570
Аноним 25/04/18 Срд 16:42:14 1179570
>>1179566
> давай лезть на более низкий уровень
Давай. Мы пишем на языке, который именно для этого сделан.
Ответы: >>1179572
Аноним 25/04/18 Срд 16:45:02 1179572
>>1179570
Ебать ты пряник. Он сделан чтоб ассемблер упростить, а не наоборот.
Аноним 25/04/18 Срд 16:46:24 1179575
Что вы тут срётесь, в C главное переносимость и унификация записи. Весь C пропитан унификацией, как бы вы ни принюхивались, ничего другого здесь нет.
Ответы: >>1179579 >>1179586
Аноним 25/04/18 Срд 16:47:35 1179579
>>1179575
Моца цопе!
Аноним 25/04/18 Срд 16:53:35 1179586
>>1179575
> переносимость
Лол. Вырастешь большой - поймешь, что Си - один из самых плохо переносимых языков. В то время как код на каком-нибудь Python заработает на новой машинке без модификаций, в Си тебе придется обмазать его толстым слоем ифдефов, и он все равно где-нибудь упадет.

> Весь C пропитан унификацией
C пропитан неопределенным поведением, ты перепутал. Тту даже принюхиваться не нужно.
Ответы: >>1179588 >>1179593
Аноним 25/04/18 Срд 16:55:06 1179588
>>1179586
тут-туру
Ответы: >>1179592
Аноним 25/04/18 Срд 16:56:42 1179589
Аноны, не по теме конечно, но есть у меня код просто нереально простого чатобота на js, куда бы его разместить? Могу на си портком сделать.
Аноним 25/04/18 Срд 16:57:55 1179592
>>1179588
Именно. Запускаешь такой свой хелловорлд на DSP с CHAR_BIT=16, и видишь, как твои бананы медленно превращаются в желе.
Ответы: >>1179596
Аноним 25/04/18 Срд 16:59:15 1179593
>>1179586
>каком-нибудь Python заработает на новой машинке без модификаций
Сляжет от версии Питуна, истину глаголю.
Ответы: >>1179595
Аноним 25/04/18 Срд 17:01:18 1179595
>>1179593
Есть лишь один истинный питон, и он третий. Поставишь оба.
Аноним 25/04/18 Срд 17:04:38 1179596
>>1179592
А ты я смотрю умный. Скажи, вот я хотел вебкамеру подключить например к своему хловоролду, но не вкурю, что куда прописывать?
Это целый будапешт. Я видел как чувак трёхмерные движки пилит за пол часа, а сам как бы и простейшего не умею, гугл представляет собой лютый пиздец из мешанины hwnd, которые мало того что хуй знает как использовать, так ещё и не найти описания более подробного чем - "это int32, содержит номер окна", это же пиздец. Нет ли бибилиотеки реализующей всю это пвсеводнизкоуровневую хуету искаропки, чтоб вызвал функцию takeFrame(WRBCAM_0, buf, 32, 32); и получаешь заветный кадр в виде массива байт, или это утопия?
Аноним 25/04/18 Срд 17:22:27 1179611
>>1179596
>Я видел как чувак трёхмерные движки пилит за пол часа
Можно ссылку?
Ответы: >>1179613
Аноним 25/04/18 Срд 17:23:09 1179612
>>1179596
OpenCV, Qt и прочее
Ответы: >>1179615
Аноним 25/04/18 Срд 17:23:15 1179613
>>1179611
Это не на ютубе дебич, а настоящий человек.
Аноним 25/04/18 Срд 17:23:24 1179614
>>1179596
> Нет ли бибилиотеки реализующей всю это пвсеводнизкоуровневую хуету искаропки
Вообще, сейчас модно брать OpenCV и не думать. А так, в винде с камерами вообще плохо, нужен COM, и дальше есть всякие-разные варианты ебли со всякими DirectShow или WIA. Но есть старый, "неподдерживаемый", но тем не менее рабочий и простой метод: https://msdn.microsoft.com/en-us/library/dd757677%28v=vs.85%29.aspx Там буквально несколько строк:
создаешь окно capCreateCaptureWindow, шлешь ему WM_CAP_DRIVER_CONNECT, WM_CAP_FILE_SAVEDIB, WM_CAP_DRIVER_DISCONNECT и потом ебешь полученную .bmp как тебе угодно. Можно обойтись без .bmp, там можно установить колбеки на фрейм и т. д.

> "это int32, содержит номер окна"
Но это действительно номер окна, и это не обязательно int32, это struct HWND *, и тебя не должно ебать, что там внутри. Это вполне нормальный сишный интерфейс, когда либа работает с указателем на incomplete-структуру, и сама она может обращаться к ее полям, а юзер видит только непрозрачный указатель (хэндл).
Ответы: >>1179623
Аноним 25/04/18 Срд 17:23:48 1179615
>>1179612
Даже жопнцв пока прикрутишь..
Ответы: >>1179619
Аноним 25/04/18 Срд 17:26:24 1179619
>>1179615
ленивая жопа, бери йобареколер, который тебе фреймы будет кидать в папку и считывай от туда своим хелоувердом не забывая удалять
Ответы: >>1179622 >>1179623
Аноним 25/04/18 Срд 17:27:25 1179622
>>1179619
>йобареколер
рекодер
Аноним 25/04/18 Срд 17:29:27 1179623
>>1179614
>>1179619
Ты не понял моего бугурта. Вот есть структура - про неё много чего написали, но упомянуть что она мне нахуй не нужна, забыли.
А я блядь ебусь и 3 дня читаю гугл как эту структуру заполнять, где брать, куда объявить и т.д., чтобы узнать от онона, что эта хуйня может просто висеть где то там и напрягаться по её поводу моветон.
Аноним 25/04/18 Срд 17:31:38 1179624
>>1179623
Вот надо тебе окно - получай ебалу с гибкими настройками вместо #include vsyaHuinya.h createwindow("заголовок",x,y,w,h);
И у винды это ещё по божески, GTK это вообще пиздец.
Ответы: >>1179626
Аноним 25/04/18 Срд 17:32:56 1179626
>>1179624
Чувство такое что проектировалось это умными, но наглухо отбитыми придурками и не для людей.
Ответы: >>1179632
Аноним 25/04/18 Срд 17:34:08 1179629
>>1179623
кокая структура? может это она тебе не нужна. но винапи говно, это да. вне контекста задачи, твой бугурт нищитовый.
Аноним 25/04/18 Срд 17:34:28 1179630
>>1179623
> А я блядь ебусь и 3 дня читаю гугл
Зачем читать гугл, когда можно читать документацию? Цитата из MSDN:
> Window Handle
> After creating a window, the creation function returns a window handle that uniquely identifies the window.
> A window handle has the HWND data type; an application must use this type when declaring a variable that
> holds a window handle. An application uses this handle in other functions to direct their actions to the window.
Просто RTFM и все.

Ответы: >>1179634
Аноним 25/04/18 Срд 17:36:14 1179632
>>1179626
проблема гтк в том, что они хуярят в ооп стиле на си. шли бы путем тикла.
Ответы: >>1179636
Аноним 25/04/18 Срд 17:36:38 1179634
>>1179630
Не вижу ни слова про то что можно неиспользовать эту ебалу. Читал я msdn, затем метался в гугл из за таких же строк, что мол так и так используй это и это, а где взять - а хуй его знает, начинай с первой страницы msdn, вдруг встретишь.
Ответы: >>1179645
Аноним 25/04/18 Срд 17:37:48 1179636
>>1179632
Есть у меня одно тёплое воспоминание о GTK, это cairo. Вот уж API проще не встречал, всем бы на него равняться.
Аноним 25/04/18 Срд 17:45:24 1179645
>>1179634
есть джва тома книжек про погромирование под вындовс 95 на винапи, читай, они актуальны, там все разжовано. настоящие погромисты на столько круты, что ответов на их вопросы в интернете нет.
Аноним 25/04/18 Срд 17:45:45 1179646
>>1179596
https://pastebin.com/kp4EaUgc вот тебе минимальный пример. Он говно по многим причинам, но из этого уже можно что-то слепить и/или перейти на нормальный метод когда-нибудь позднее. Компиляция: gcc file.c -luser32 -lavicap32, в студии аналогично (user32.lib, avicap32.lib).
Ответы: >>1179650
Аноним 25/04/18 Срд 17:47:21 1179647
Вот отличный пример. Берём эту инструкцию
https://msdn.microsoft.com/en-us/library/dd757677%28v=vs.85%29.aspx
Открываем первую страницу
https://msdn.microsoft.com/en-us/library/dd797847(v=vs.85).aspx

И сука таки ни единого слова про подключаемые заголовочные файлы, ни слова в примере вызова функции про то что из себя представляют fOK, hWndC, WM_CAP_DRIVER_CONNECT, где лежат и чего значат.

Теперь второй пример.
cairographics.org/manual/
Открываем документацию
https://www.cairographics.org/documentation/
Первая же страница начинается с лаконичного примера, в котором всё понятно без hWndCdolboёbоv
https://www.cairographics.org/FAQ/#getting_started
Ответы: >>1179649 >>1179651
Аноним 25/04/18 Срд 17:51:28 1179649
>>1179647
>И сука таки ни единого слова про подключаемые заголовочные файлы
https://msdn.microsoft.com/en-us/library/dd756879(v=vs.85).aspx

наркоман, уходи.
Ответы: >>1179655
Аноним 25/04/18 Срд 17:52:54 1179650
>>1179646
Вот пример минимальный, в котором хотяб понятно где int.

; Example of making 32-bit PE program as raw code and data

format PE GUI
entry start

section '.text' code readable executable

start:

push 0
push _caption
push _message
push 0
call [MessageBoxA]

push 0
call [ExitProcess]

section '.data' data readable writeable

_caption db 'Win32 assembly program',0
_message db 'Hello World!',0

section '.idata' import data readable writeable

dd 0,0,0,RVA kernel_name,RVA kernel_table
dd 0,0,0,RVA user_name,RVA user_table
dd 0,0,0,0,0

kernel_table:
ExitProcess dd RVA _ExitProcess
dd 0
user_table:
MessageBoxA dd RVA _MessageBoxA
dd 0

kernel_name db 'KERNEL32.DLL',0
user_name db 'USER32.DLL',0

_ExitProcess dw 0
db 'ExitProcess',0
_MessageBoxA dw 0
db 'MessageBoxA',0

section '.reloc' fixups data readable discardable ; needed for Win32s
Аноним 25/04/18 Срд 17:54:49 1179651
>>1179647
> И сука таки ни единого слова про подключаемые заголовочные файлы
В MSDN обычно есть about/using/reference. В about тебе рассказывают, что это такое, как оно работает, нахуй оно нужно, и что вообще существует, в using гайд с примерами, а в reference как раз все описания. Обычно оно все очень сильно перелинковано, но как я уже говорил, технология старая, еще из 95 винды, поэтому ссылок мало. Вот тебе референс про connect:
https://msdn.microsoft.com/en-us/library/dd743891%28v=vs.85%29.aspx
Ответы: >>1179653
Аноним 25/04/18 Срд 17:58:21 1179653
>>1179651
>https://msdn.microsoft.com/en-us/library/dd743891%28v=vs.85%29.aspx
Спасибо кончено. Но я наверное просто не создан для всей этой залупы. Мой уровень это purebasic, не более, всё что сложнее просто перегружает мозг.
Ответы: >>1179655
Аноним 25/04/18 Срд 18:01:40 1179655
>>1179653
Моя ссылка недостаточно правильная. Вот тут >>1179649 про макрос, он проще для понимания.
Аноним 27/04/18 Птн 20:04:04 1180787
Эх щас бы в 2К19 винапи ковырять...
Ответы: >>1180827 >>1180843
Аноним 27/04/18 Птн 20:21:23 1180827
>>1180787
Чому ни? Загугли nirsoft, я когда вижу эти охуенные утилиты весом пару десятков килобайт, но с UI и мощным функционалом, аж трясет от восхищения за того программиста, кто это все дело пилит.
Аноним 27/04/18 Птн 20:36:51 1180843
>>1180787
Эх, щас бы в 2K19 дотнетоговно напрямую с ядром работало.
Аноним 28/04/18 Суб 15:56:35 1181147
А в чем разница между char * = "huj" и char[] = "huj";
Аноним 28/04/18 Суб 15:57:27 1181149
>>1181147
Второе работает?
Ответы: >>1181154
Аноним 28/04/18 Суб 16:01:27 1181154
image.png (222Кб, 1920x1080)
>>1181149
Аноним 28/04/18 Суб 16:24:43 1181175
>>1181147
https://wandbox.org/permlink/Jsv48iUs3doqZInT
Аноним 28/04/18 Суб 16:38:34 1181189
>>1181147
char*: создает указатель, который указывает на литерал, лежащий в секции данных. Ты можешь изменять сам указатель, но не можешь писать по указателю - строковые литералы ридонли.
char[] создает массив достаточного размера, чтобы скопировать в него литерал (и копирует его туда). Так как это массив, то ты, конечно же, можешь изменять содержащуюся там строку.
Ответы: >>1181363 >>1181369
Аноним 28/04/18 Суб 16:53:45 1181196
Чем си может быть лучше плюсов в 2к17?
Ответы: >>1181198 >>1181205
Аноним 28/04/18 Суб 16:54:38 1181198
>>1181196
Си можно выучить на приемлемом уровне менее чем за 10 лет. При этом ты будешь знать, что происходит в коде, а не предполагать.
Ответы: >>1181200
Аноним 28/04/18 Суб 16:56:31 1181200
>>1181198
А где его сейчас используют? (Кроме GNOME(Слава XFCE)
Ответы: >>1181201
Аноним 28/04/18 Суб 16:58:07 1181201
>>1181200
ОС, либы, embedded, прикладной софт тоже иногда.
Аноним 28/04/18 Суб 17:07:20 1181205
>>1181196
Жрет меньше ресурсов. Это критично для встраиваемых систем.
Ответы: >>1181215
Аноним 28/04/18 Суб 17:15:14 1181215
>>1181205
Плохой аргумент. На крестах все еще можно писать в си-стиле.
Ответы: >>1181226
Аноним 28/04/18 Суб 17:31:34 1181226
>>1181215
Ты когда-нибудь программировал микроконтроллеры, где килобайты рам можно по пальцам пересчитать?
Ответы: >>1181234
Аноним 28/04/18 Суб 17:50:26 1181234
>>1181226
Конечно. Ты понимаешь, что g++ и gcc выдадут тебе идентичный код, если ты не будешь использовать в крестах многие крестовые фичи? При этом ты можешь, продолжать пользоваться теми фичами, которые на код напрямую не влияют, а жизнь проще делают.
Ответы: >>1181238
Аноним 28/04/18 Суб 17:59:42 1181238
>>1181234
Ну хз, у нас все на си ваяют. Возможно потому, что проще потом лицензировать (авионика), а не из-за возможностей языка.
Ответы: >>1181239
Аноним 28/04/18 Суб 18:02:26 1181239
>>1181238
Так я об этом как раз и сказал выше - стандарт в разы меньше, вариантов хитровыебанного поведения меньше, осилить проще и проверить проще.
Ответы: >>1181365
Аноним 28/04/18 Суб 23:50:44 1181363
>>1181189
Стоит дополнить, что в первом случае можно изменять сам указатель, а во втором имя массива является константой.
Ответы: >>1181366
Аноним 29/04/18 Вск 00:34:20 1181365
>>1181239
>стандарт в разы меньше
Как будто ты его хоть раз открывал
Аноним 29/04/18 Вск 00:35:55 1181366
>>1181363
>имя массива является константой
Что ты хотел сказать этим набором слов?
Имя целочисленной переменной тоже является константой. Или ты можешь показать код, который переименовывает целочисленную переменную?
Ответы: >>1181603
Аноним 29/04/18 Вск 00:44:31 1181369
>>1181189
> строковые литералы ридонли
Не нашёл такого в 6.4.5 String literals
Где это написано?
Ответы: >>1181603
Аноним 29/04/18 Вск 08:41:28 1181428
Посоветуйте справочник для winapi.
Ответы: >>1181429 >>1181603
Аноним 29/04/18 Вск 08:42:06 1181429
>>1181428
Советуем справочник для winapi.
Ответы: >>1181430 >>1181431
Аноним 29/04/18 Вск 08:43:09 1181430
>>1181429
Он мне не нравится.
Аноним 29/04/18 Вск 08:44:59 1181431
>>1181429
Cпасибо!
Аноним 29/04/18 Вск 09:31:32 1181443
Как врубить поддержку кириллицы в спермянской консоле? Использую GCC.
Аноним 29/04/18 Вск 13:12:55 1181603
>>1181366
Он имел в виду, что можно ptr++, но нельзя array++, т.е., массив можно рассматривать как константный указатель на его первый элемент.

>>1181369
> Где это написано?
Именно там и написано. Второе предложение логически вытекает из первого, и хотя в большинстве компиляторов в целях совместимости с говнокодом есть возможность "отключить" этот абзац, проще считать строковые литералы константами:
> It is unspecified whether these arrays are distinct provided their elements have the
> appropriate values. If the program attempts to modify such an array, the behavior is
> undefined.

>>1181428
MSDN, можно старенький и оффлайновый мануал из Platform SDK для XP/2003 - им удобнее пользоваться, но там нет некоторых новых фич.

>>1181443
Сохраняй исходник в UTF-8, собирай с -fexec-charset=866, потом когда-нибудь научишься делать правильно (возможно, в CRT и консоли винды к этому времени как раз появится полноценный UTF-8). Можешь собирать без -fexec-charset, но запускать в помершелле, он умеет в UTF-8 после chcp 65001. Можешь поставить себе ConEmu, он тоже в UTF-8 может.
Ответы: >>1181874
Аноним 29/04/18 Вск 13:13:50 1181604
>>1181443
В нотепаде++ пишешь исходник в CP866
Ответы: >>1181605
Аноним 29/04/18 Вск 13:15:09 1181605
>>1181604
Бу! Сгинь!
Ответы: >>1181766
Аноним 29/04/18 Вск 13:19:25 1181608
[CODE]#include <stdio.h>

int main(void) {
char b[] = "БB";
printf("%x\n", b[0]);

return 0;
}[/CODE]
Почему распечатывает ffffffd0? Почему бы не 000000d0?
Ответы: >>1181610 >>1181612
Аноним 29/04/18 Вск 13:27:02 1181609
>>1181443
chcp 1251 - кодировка Windows
chcp 65001 - кодировка UTF-8
Иногда требуется выбрать для консоли другой шрифт.
Ответы: >>1181610
Аноним 29/04/18 Вск 13:29:31 1181610
>>1181608
Потому что char у тебя signed, а char в выражениях, а так же в аргументах variadic-функций подвергается integer promotions: (signed char) 'Б' превращается в (signed int) 'Б', старший бит стоит, значит оно отрицательное, происходит sign-extension, т.е., знаковый бит дублируется влево на всю ширину переменной. Хочешь получить d0 - делай (unsigned char) b[0] (promotion никуда не денется, но будет zero-extension, т.к., unsigned char) или или b[0] & 0xff (promotion опять же никуда не денется, но будет сделано еще для оператора &, получится (0xffffffd0 & 0xff), в результатае посчитается красивый (int) (0xd0), который уже промоутить не нужно, он и так int).

>>1181609
> chcp 65001 - кодировка UTF-8
И тут все виндусы кроме свежих билдов десяточки скажут "ой" при попытке вывести кириллицу.
Ответы: >>1181626
Аноним 29/04/18 Вск 13:37:26 1181612
>>1181608
Потому что char - это знаковый тип, где русские буквы это отрицательные числа.
Используй unsigned char b[] = "БB";
Или так: printf("%x\n", b[0] & 0x00FF);
Аноним 29/04/18 Вск 13:54:43 1181626
>>1181610
>И тут все виндусы кроме свежих билдов десяточки скажут "ой" при попытке вывести кириллицу.
Проверил на Windows 7 с шрифтом Lucida Console:
#include <stdio.h>
char utf8text[] = {0xD0, 0x90, 0xD0, 0x91, 0xD0, 0x92};
int main(void) {
printf("%s\n", utf8text);
return 0;
}
С chcp 65001 выводит "АБВ".
Ответы: >>1181738
Аноним 29/04/18 Вск 13:55:11 1181629
>>1181443
Кури про wchar и wprintf, нехуй ебаться с кодировками (методы советуемые на форумах работают от раза к разу) правда setlocale все равно надо использовать зато без ебли с настройкой консоли. Либо, если лень писать L перед каждой строкой, то в венде можно пользоваться нестандартной библиотекой tchar.h ну это уже сам кури.
Ответы: >>1181637
Аноним 29/04/18 Вск 14:02:26 1181637
>>1181629
>L перед каждой строкой
Не советую, в одной проге из-за этого долго пришлось править несовместимость (GCC в Linux использовал 4-байтовые символы Unicode, Visual C++ в винде - 2-байтовые). Нужно применять UTF-8 везде.
Аноним 29/04/18 Вск 14:25:11 1181651
>>1181443
>врубить поддержку кириллицы в спермянской консоле
но зачем?
Аноним 29/04/18 Вск 17:01:16 1181738
hello.png (0Кб, 168x68)
>>1181626
А у меня выводит:
> АБВ
> В
А вместо "Привет, мир!" выводится, например, пикрелейтед. И это тоже 7 со шрифтом Lucida Console. А стабильно оно только с десяточки работает.
Ответы: >>1181812
Аноним 29/04/18 Вск 17:50:44 1181766
>>1181605
Зато работает
Ответы: >>1181799
Аноним 29/04/18 Вск 19:19:15 1181799
>>1181766
-fexec-charset работает совершенно таким же образом, только не вынуждает хранить исходники в древней кодировке, создавая проблемы с IDE и системами контроля версий.
Аноним 29/04/18 Вск 19:44:43 1181812
>>1181738
Первый раз такое вижу. Обычно либо выводит русские буквы, либо квадратики.
И с chcp 1251 такое же?
У тебя какая-то сборка от васяна.
Ответы: >>1181818
Аноним 29/04/18 Вск 19:55:57 1181818
>>1181812
C chcp 1251 ок или крякозябры, в зависимости от кодировки выводимых байтиков. Винда - чистая тестовая виртуалка. Более того, с chcp 65001 и WriteFile, к которому сводится твой printf, и WriteConsoleA иногда (а на XP - всегда) фэйлятся и не выводят вообще ничего, поэтому приходится идти длинным (зато надежным) путем. Делается кастомный yoba_printf, который с помощью MultiByteToWideChar преобразует UTF-8 в UTF-16, который уже выводит с помощью WriteConsoleW, и вот с UTF-16 проблем никаких нет, вне зависимости от кодировки, выставленной chcp.
Ответы: >>1181824
Аноним 29/04/18 Вск 20:07:57 1181824
>>1181818
>Винда - чистая тестовая виртуалка.
А, тогда ясно. Нужно ставить Microsoft Visual C++ redistributable package.
На древней msvcrt.dll могут быть любые аномалии. Она родом с XP, где UTF-8 нормально не поддерживался.
В десятке видимо обновили.
Ответы: >>1181831 >>1181834
Аноним 29/04/18 Вск 20:19:48 1181831
>>1181824
А CRT-то каким местом? Тут же нет разбора строки - %s просто копирует символы в stdout пока не встретит \0, а stdout сводится к _write, а _write к WriteFile. Вот если бы я toupper делал или strtok какой-нибудь, или хотя бы %.2s, тогда да, CRT могла бы что-нибудь испортить.

Но ты меня заинтересовал, попробую отладить когда-нибудь и посмотреть, почему такое поведение. Ты чем собирал? Студией?
Аноним 29/04/18 Вск 20:21:09 1181834
>>1181824
И да, msvcrt - дефолтный рантайм Visual C++ 98, оно же VS6.0. Ее, конечно, обновляли, но родом она еще из маздая.
Аноним 29/04/18 Вск 22:35:28 1181874
>>1181603
> Он имел в виду, что можно ptr++, но нельзя array++, т.е., массив можно рассматривать как константный указатель на его первый элемент.

:facepalm:

>> Где это написано?
>Именно там и написано.
Да, чёт проглядел.
Аноним 30/04/18 Пнд 12:11:37 1182052
>>1174146
Почти.
Аноним 30/04/18 Пнд 12:28:51 1182057
Дайте идею для проекта небольшого на си.
Ответы: >>1182058
Аноним 30/04/18 Пнд 12:31:05 1182058
>>1182057
Рыбья головёха?
Аноним 30/04/18 Пнд 12:35:20 1182059
>>1156306 (OP)
Есть кто с мгу? Слейте лабы по с/с++ с меня как обычно
Ответы: >>1182067
Аноним 30/04/18 Пнд 12:47:10 1182067
>>1182059
Рыбья голова)
Аноним 30/04/18 Пнд 13:17:45 1182079
Посоны, а что, шланг до сих пор не обзавёлся своим crt? Почто он гццшные crtbegin.o и libgcc требует?
Ответы: >>1182175
Аноним 30/04/18 Пнд 16:20:05 1182173
Антоны. Я сделал прогу на winapi, которая должна была менять курсор на рожу моего бати, чтобы его выбесить. Но курсор вовсе пропал и не появляется даже после перезагрузки. Что не так, пиздец.
Ответы: >>1182174 >>1182175
Аноним 30/04/18 Пнд 16:26:01 1182174
>>1182173
Ты приёмный.
Ответы: >>1182271
Аноним 30/04/18 Пнд 16:26:52 1182175
>>1182079
Не обзавелся, не вижу в этом ничего плохого.

>>1182173
Так сходи в панель управления и выставь стандартный, чего ты от нас-то хочешь?
Ответы: >>1182268
Аноним 30/04/18 Пнд 18:16:43 1182268
>>1182175
>управления
Не работает даже так.
Аноним 30/04/18 Пнд 18:19:47 1182271
>>1182174
Поржал всем офисом)
Аноним 30/04/18 Пнд 18:48:39 1182291
Есть еще те кто использует #pragma pack?
Ответы: >>1182323
Аноним 30/04/18 Пнд 19:00:13 1182305
Антоны, если я объявлю в структуре подряд несколько переменных, то они будут распологаться подряд, а если я объявлю их просто внутри функции main(), то их может раскидать по памяти?
Ответы: >>1182323
Аноним 30/04/18 Пнд 19:22:53 1182323
>>1182291
Да. Упакованные структуры иначе не опишешь.

>>1182305
Да, переменные компилятор может раскидать (в пределах кадра стека, ествественно, если они автоматические), сдублировать, положить в регистры или вовсе удалить.
Аноним 30/04/18 Пнд 19:31:28 1182329
Зачем нужны битовые поля?
Ответы: >>1182332
Аноним 30/04/18 Пнд 19:33:43 1182332
>>1182329
Некоторые люди не могут в побитовые операции, битовые поля проще, удобнее и иногда даже быстрее.
Аноним 30/04/18 Пнд 20:21:57 1182347
Мне нравится Windows API.
Аноним 30/04/18 Пнд 20:24:24 1182348
Мне нравится JavaScript.
Аноним 30/04/18 Пнд 20:28:06 1182349
Я ем говно.
Аноним 01/05/18 Втр 18:24:40 1182768
Сап, двач.

Пишу программу занимающуюся посимвольной обработкой строк. ОС Linux, компилятор GCC, кодировка UTF-8.

Если в строке есть многобайтовые символы, то перед обработкой перевожу строку в wchar_t. Столкнулся с проблемой при обратном переводе в char: не могу найти функцию из стандартных библиотек, которая принимает строку типа wchar_t и возвращает количество байт, которое нужно выделить для записи этой же строки в char. Статическая длина строки отпадает сразу, так как длина входной строки может быть совершенно любого размера.

Есть такая функция в стандартной библиотеке и как называется? А то может я и ищу то, чего нет.
Аноним 01/05/18 Втр 18:59:33 1182779
>>1182768
вроде нет, поскольку я велосипедил подобное сам, но там легко и реализаций миллиард
https://github.com/JeffBezanson/cutef8/blob/master/utf8.c
Ответы: >>1182785
Аноним 01/05/18 Втр 19:05:04 1182785
>>1182779
Знаю, что легко, но хотел найти какой-то общий стандарт, чтобы не пилить велосипеды. Если нет, то напишу сам.
Аноним 01/05/18 Втр 19:23:10 1182792
>>1182768
А чем переводишь? wctomb говорит, сколько символов нужно - просто просуммируй результаты. Но велосипед будет быстрее.
Ответы: >>1182803
Аноним 01/05/18 Втр 19:28:28 1182795
>>1182768
Алсо, я бы на твоем месте не выделывался. Длиннее 4 байтов один code-point не занимает. Если у тебя суррогатные пары уже лежат в одном 32-битном wchar_t, тогда два раза по 4 байта на символ максимум. Выделяй сразу столько, точно влезет, и не нужно будет заниматься бесполезными подсчетами.
Ответы: >>1182803
Аноним 01/05/18 Втр 19:45:00 1182803
>>1182792
wctomb, вроде бы, каждый символ отдельно передавать нужно. Я пробовал wcstombs, но он мне постоянно -1 на выход даёт, если в строке есть кириллический символ. Почему так, я разобраться не смог.

>>1182795
Тоже вариант. Если нет стандартной функции, то либо так сделаю, либо велосипед накидаю.
Ответы: >>1182840
Аноним 01/05/18 Втр 20:33:28 1182840
>>1182768
>>1182803
Решил проблему.

Работу wcstombs я проверял в отдельном файле и забыл вызвать setlocale, поэтому он выкидывал -1 мне. При setlocale (LC_ALL, "") вызов функции wcstombs (NULL, str, 0) возвращает нужное количество байтов для строки в utf-8.
Аноним 02/05/18 Срд 10:23:15 1183093
выручай ссач, пишу я такой прогу на си, ну и вызываю функцию sqrt() с аргументом. Начинаю конпелить, а конпелер ругается мол undefined reference to `sqrt'. Дело в том что при передаче в качестве аргумента обычного числа все нормально конпелится и возвращает квадратный корень, то что нужно. однако если в кчестве аргумента передается имя переменной или элемент массива конпелер выводит undefined reference to `sqrt'. выручайте я дно. Кстати ос ubuntu
Аноним 02/05/18 Срд 10:24:55 1183095
>>1183093
Наркомания
Проверь наличие <math.h>
Ответы: >>1183101
Аноним 02/05/18 Срд 10:26:09 1183096
>>1183093
Алсо, тебе эту ошибку, случаем, не линкёр выводит?
Сделай -lmath
Ответы: >>1183108
Аноним 02/05/18 Срд 10:31:28 1183101
>>1183095
math.h имеется
Аноним 02/05/18 Срд 10:36:14 1183105
>>1183093
-lm
довун
Аноним 02/05/18 Срд 10:36:54 1183106
Screenshot from[...].png (101Кб, 1280x1024)
#include<stdio.h>
#include<math.h>
main(){
float b=4;
float a=sqrt(b);
printf("%.1f",a);
}
Ответы: >>1183107
Аноним 02/05/18 Срд 10:37:24 1183107
>>1183106
gcc -lm
довун
Ответы: >>1183110
Аноним 02/05/18 Срд 10:38:07 1183108
>>1183096
> -lmath
-lm
довун
Аноним 02/05/18 Срд 10:39:19 1183110
12312.png (96Кб, 1280x1024)
>>1183107
и шо бэлэтб
Аноним 02/05/18 Срд 10:39:44 1183111
>>1183110
Обосрался
Аноним 02/05/18 Срд 10:39:45 1183112
>>1183110
Ди в ньюфаг-тред
довун
Ответы: >>1183114
Аноним 02/05/18 Срд 10:40:20 1183113
>>1183110
gcc -lm c.c
Аноним 02/05/18 Срд 10:40:21 1183114
>>1183112
заебал скажи че сделать чтоб робило
Аноним 02/05/18 Срд 10:42:01 1183116
333333.png (102Кб, 1280x1024)
все равно
Ответы: >>1183117
Аноним 02/05/18 Срд 10:42:39 1183117
>>1183116
gcc c.c -lm
Ответы: >>1183118
Аноним 02/05/18 Срд 10:43:37 1183118
>>1183117
бля отдуши чувак. объясни плиз нахуя это нужно было прост в винде такого я не добавлял
Ответы: >>1183152 >>1183299
Аноним 02/05/18 Срд 12:45:42 1183152
>>1183118
В винде вся математика в CRT, в той же либе, что и printf и т. д., и она прилинковывается автоматически, по умолчанию. В линуксах отдельно, у них принято делать жизнь максимально неудобной.
Ответы: >>1183156
Аноним 02/05/18 Срд 12:53:01 1183156
>>1183152
> В винде вся математика в CRT, в той же либе, что и printf и т. д.

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

> В линуксах отдельно, у них принято делать жизнь максимально неудобной.

Линкуешь только то что нужно. Принцип разделяй и властвуй на шицо, но спермачи кукарекают что-то про неудобство.
Аноним 02/05/18 Срд 12:57:04 1183159
>>1183156
50мб хэлоуворд, кек.
Аноним 02/05/18 Срд 12:59:22 1183161
>>1183156>>1183159
У тебя по умолчанию динамическая линковка. Можешь все библиотеки мира подключить, это мало повлияет на размер получившегося файла.
Ответы: >>1183172
Аноним 02/05/18 Срд 13:01:27 1183164
>>1183159
В сперме хелловорлд 50 метров? Лол. Ибо у меня в дебиане меньше 4Кб. Целый кластер потратил для теста, ёк макарёк.
Аноним 02/05/18 Срд 13:14:19 1183172
>>1183161
>все библиотеки мира подключить
И соснуть с переносимостью. Статическая линковка рулит.
Ответы: >>1183174
Аноним 02/05/18 Срд 13:15:24 1183174
>>1183172
Ну и вали в свою эпоху a.out
Ответы: >>1183175
Аноним 02/05/18 Срд 13:16:34 1183175
>>1183174
Валю, я даже Qt статически линкую
Аноним 02/05/18 Срд 15:13:21 1183219
>>1183159
Хелловорлд в винде 8к, если динамическая линковка. Или меньше 200к, если статическая.

>>1183156
> Принцип разделяй и властвуй
Зачем разделять, если это стандартная библиотека Си? Давай вообще от либ откажемся, будем линковать printf.o и malloc.o каждый отдельно.
> Линукешь только то что нужно.
На самом деле для выбора "что нужно" придуманы линкеры.
Ответы: >>1183235 >>1183265
Аноним 02/05/18 Срд 15:54:58 1183235
>>1183219
> от либ откажемся, будем линковать printf.o и malloc.o каждый отдельно.

Уууууу чо удумал, это ты насаждай в мастдае дистрибьюцию в предкомпилированных файлах. Нам исходники голые подавай, а мы уж как нибудь сами скажем компилятору с чем собрать программу. Усёк, гаврюшенька?
Ответы: >>1183380
Аноним 02/05/18 Срд 16:55:32 1183265
>>1183219
>Или меньше 200к, если статическая.
Рантайм не забудь скачать и установить
Ответы: >>1183738
Аноним 02/05/18 Срд 18:04:47 1183299
>>1183118
>объясни плиз нахуя это нужно было прост в винде такого я не добавлял
"так сложилось исторически"
Аноним 02/05/18 Срд 19:33:52 1183344
Может ли Rust заменить Сишку? Избавляет от кучи проблем с памятью, соответственно багов и дыр в безопасности меньше
Аноним 02/05/18 Срд 19:36:57 1183346
>>1181147
Разница чисто визуальная.
Ответы: >>1183530
Аноним 02/05/18 Срд 20:25:23 1183380
>>1183235
Нашёл чем гордиться. Шо то хуйня, шо это хуйня. Надо иметь статические бибилиотеки на каждую функцию и линковать автоматически, ато развели ебалу.
"кококо хочу подключаю хочу неподключаю" - Ты же и так знаешь что подключить придётся, по тому что ты функцию используешь в коде, а не по тому что у тебя гибкая система настроек и свобода действий.
Аноним 03/05/18 Чтв 05:52:59 1183530
>>1183346
В ньюфаг-тред шагом марш!
Аноним 03/05/18 Чтв 05:56:25 1183531
можно вместо
gcc c.c -lm
пейсать
gcc -O2 c.c
Тогда sqrt вместо вызова функции будет реализован инструкциями копро-цессора, на месте.
-O1, -Os и -O3 тоже подойдут.
Ответы: >>1183532
Аноним 03/05/18 Чтв 05:57:01 1183532
>>1183531
Но это не гарантировано. Так что лучше -lm
Аноним 03/05/18 Чтв 09:27:49 1183603
Почему вы до сих пор не перекатились в энтерпрайз на какой-нибудь джаве? Неужели вам так нравится железо, что готовы получать в 2 раза меньше, при чём прикладывая больше усилий? Я бы так не смог
Ответы: >>1184172
Аноним 03/05/18 Чтв 13:36:49 1183738
>>1183265
Да я лучше в дворники пойду, чем в интерпрайзы на джавах.
Аноним 04/05/18 Птн 10:45:09 1184167
>>1183110
Убунтодебил, уходи.
Аноним 04/05/18 Птн 10:57:26 1184172
>>1183603
Я стал php-developer.
Аноним 05/05/18 Суб 17:36:41 1184720
Анончи, напомните как называется версия майкрософтовского конпелятора без ИДЕ?
Ответы: >>1184727
Аноним 05/05/18 Суб 17:45:34 1184727
>>1184720
Visual Studio Build Tools, ставится через инсталлер обычной Visual Studio.
Ответы: >>1184755
Аноним 05/05/18 Суб 18:07:43 1184755
>>1184727
Вангую, студия мне говна всякого наставит, а я чистое хочу, как 2015 тулс.
Ответы: >>1184857
Аноним 05/05/18 Суб 18:25:08 1184778
910365.jpg (1105Кб, 1920x1080)
Господи я отпишусь в этом треде. Си - Бог всех языков. Лично я учил Си по Великой книге K&R. Задает вам навык программирования на всю вашу жизнь. Воистину, язык Богов.
Аноним 05/05/18 Суб 18:49:01 1184793
>>1184778
Си — ненужное говно без задач.
Ответы: >>1184796
Аноним 05/05/18 Суб 18:52:05 1184796
>>1184793
Борщеязычки говно без задач, а на сишке весь мир держится.
Аноним 05/05/18 Суб 18:52:17 1184797
>>1184778
Двачую этого дZенствующего.
Аноним 05/05/18 Суб 20:54:17 1184857
>>1184755
Окей, ставишь билдтулзы с говном на виртуалку, забираешь оттуда PSDK и компиляторы. Профит.
Аноним 06/05/18 Вск 08:36:19 1184987
array.png (47Кб, 1502x831)
Помогите разобраться с массивом указателей.
Почему данный код работает корректно, выдавая пользователю на экран нужные сообщения?
int num;
scanf("%d", &num);
char* errors[] = {"first", "second", "third"};
printf ("%s", errors[num]);
В приведенном выше куске кода, если я инициализирую num как 0, 1 и 2, то получаю сообщения "first", "second" и "third", соответственно. Почему? Как я понимаю, чтобы сообщения выдавались, необходимо в printf'е делать разыменование errors[num], то есть добавить звездочку.
Сейчас попробую объяснить, как я понимаю массив указателей:
В данном случае мы имеем массив указателей errors. В массиве errors хранятся 3 указателя на тип char, которые указывают на массивы из слов. Ниже представлен простенький рисунок. 14, 15 и 16 в ячейках errrors - это, грубо говоря, сами указатели. Соответственно, в приведенном коде выше, когда мы, допустим, printf'аем errors[0], должно выводится 14 (правда, формат в printf'е стоит "%s", но не так важно), однако, как уже сказал, на экран выводится first. Почему? Мб, я как-то неправильно понимаю?
Ответы: >>1185053 >>1185101
Аноним 06/05/18 Вск 10:27:55 1185053
>>1184987
Давай разберемся, что такое errors.
Errors - это массив указателей на char.
Принтф получает на вход УКАЗАТЕЛЬ НА char, и обрабатывает егоименно так (у тебя там %s же, это важно!). Поставь там %i какой-нибудь и получится число.
Ответы: >>1185121
Аноним 06/05/18 Вск 10:51:25 1185071
>>1184778
Ну есть в сишке указатели-хуятели и дальше чё? Как ебля с указателями и освобождением памяти прокачает мой скилл в программировании в общем?
Ну вот я джавист, прочитал недавно K&R и Прату чисто в академических целях. Никак я свой навык не улучшил. Углубился в старину, посмотрел как писали раньше проги и всё.
Ты просто студент без реального опыта работы, который потратил какое-то время на сишку, в отличие от своих друзей, которые дрочили питон какой-нибудь, и возомнил себя ебать гуру.
Решают структуры данных, алгоритмы, архитектура. Твоя сишка нахуй не нужна для навыков. Сишка в современном мире - крайне узкоспециализированный язык. Изучать её нужно либо для конкретной работы, либо полистать пару книжек для экскурса в историю. Всё, больше Си тебе ничего не даёт. Это просто изкоспециализированный инструмент.
Ответы: >>1185073
Аноним 06/05/18 Вск 11:00:03 1185073
>>1185071
>я джавист
Дальше не читал. Иди дальше абстрактные фабрики абстрактных билдеров пиши, чмоха.
Ответы: >>1185077
Аноним 06/05/18 Вск 11:04:19 1185077
>>1185073
Как же байтослесари триггерятся на джаву)))) Я всё понимаю, потратить на обучение в 3 раза больше времени, и получать в 2-3 раза меньше - конечно это обидно. Остаётся только писать на двачах, что Си - это ебать орудие Богов.
Аноним 06/05/18 Вск 11:53:09 1185101
>>1184987
> чему? Как я понимаю, чтобы сообщения выдавались, необходимо в printf'е делать разыменование errors[num].
Упускаешь, что [ ] сам делает разыменовывание. Смотри: ∗errors - это адрес (указатель на) массива first, правильно? И далее ∗(∗errors) или ∗∗errors - это разыменованный массив first, т.е., символ 'f', но это к делу не относится. А errors[num] это сахарок, полный аналог которого ∗(errors + num), где арифметика - адресная, т.е., errors + 1 = адрес errors + размер одного указателя, а errors + n = адрес errors + размер указателя ∗ n. И потом ∗(...) этот адрес разыменовывает, и ты получаешь адрес строки.

> cоответственно, в приведенном коде выше, когда мы, допустим, printf'аем errors[0], должно выводится 14
> правда, формат в printf'е стоит "%s", но не так важно
Сделай %p и получишь свои 14, потому что %p просто берет аргумент arg и формирует текстовое представление указателя: можешь считать, что оно аналогично printf("%x", (unsigned long) arg).

А %s берет свой аргумент arg, считает его указателем, и разыменовывает его: делает ∗(arg), ∗(arg + 1), ∗(arg + m), пока не найдет символ \0. Ну и выводит полученные символы, конечно. Поэтому ты видишь текст, а не число.
Ответы: >>1185121 >>1185132
Аноним 06/05/18 Вск 12:18:07 1185121
>>1185053
>>1185101
А, да, все верно. Перечитал ваши сообщения и понял, какой странный и глупый вопрос я задал, учитывая то, что понимаю, как это работает. Вот к чему недосып приводит. Хотя сам я почему-то минут 40 сидел над рисунком и все никак не мог понять
Аноним 06/05/18 Вск 12:24:31 1185132
>>1185101
>А %s берет свой аргумент arg, считает его указателем, и разыменовывает его...
Вот, теперь точно понял, что именно меня вводило в заблуждение. Я раньше не знал (или не задумывался), что %s разыменовывает указатель. Теперь все точно ясно. Вопрос закрыт. Чуть головой не поехал
Аноним 06/05/18 Вск 12:53:27 1185167
>>1156306 (OP)
https://pastebin.com/tMRF7673
ребят посмотрите код плиз , у меня вопрос , можно ли передать в функцию указатели , так что бы по такому выражению она выделила память ,просто если вставить этот кусок (array = (double@@)malloc(sizeof(double@)@ROW);)в функцию, он отработает , но выдаст ошибку сигментации
Ответы: >>1185174
Аноним 06/05/18 Вск 13:12:15 1185174
>>1185167
Не совсем понятно, чего ты хочешь. У тебя в текущем виде программа должна более-менее работать. Хочешь переместить выделение памяти в input_date? Тебе придется тогда как-то вернуть массив. Например, передавать double ∗∗∗array_ptr и после маллока делать ∗array_ptr = array. Или просто возвращать из функции double∗∗, делая return array, а аргумент убрать просто.
Ответы: >>1185197
Аноним 06/05/18 Вск 13:54:24 1185197
>>1185174
аааа, понял спасибо , а программа и так хорошо работает
Аноним 06/05/18 Вск 19:36:10 1185424
У меня есть указатель void ∗ptr на массив из структур smth.
У меня есть sizeof(smth).
Как надёжно попасть на i-ый элемент массива?
Я же не могу просто сделать так:
smth_tmp=∗((char ∗) ptr+sizeof(smth))
верно?
Ответы: >>1185426 >>1185428
Аноним 06/05/18 Вск 19:37:33 1185426
>>1185424
> smth_tmp=∗((char ∗) ptr+i*sizeof(smth))
Аноним 06/05/18 Вск 19:41:41 1185428
>>1185424
> Я же не могу просто сделать
Можешь, только левая звездочка там лишняя. Ты либо:
smth foo = ∗(smth ∗) ((char ∗) ptr + ...);
либо
smth ∗bar = (smth ∗) ((char ∗) ptr + ...);
Но лучше скастить к указателю на smth и прибавить i:
smth foo = ((smth ∗) ptr);
smth ∗bar = (smth ∗) ptr + i;
Ответы: >>1185429 >>1185433
Аноним 06/05/18 Вск 19:43:30 1185429
>>1185428
Я структуре присваивал, а не указателю, я просто типа не написал. Оттого и левая звздочка, спасибо.
Аноним 06/05/18 Вск 19:47:42 1185433
>>1185428
Алсо, в моём случае функция не будет знать типа, т.е. ей передадут только size_t от sizeof(given_type). Так что способ один для меня применим, в отличие от второго.
Аноним 07/05/18 Пнд 16:04:05 1185769
Как передать во функцию аргументом, безымянный массив?
void foo(...,float c[3]){...} ==>
foo(...,{1.0f,1.0f,1.0f}); - вроде раньше так делал, а сейчас забыл.
Ответы: >>1185782
Аноним 07/05/18 Пнд 16:40:00 1185782
>>1185769
Тип забыл. К чему литерал-то кастить? Вот так:
foo(..., (float[3]) { 1.0,f 1.0f, 1.0f });
Ответы: >>1185788
Аноним 07/05/18 Пнд 16:53:26 1185788
>>1185782
О точно! Благослови тебя Сибог
Аноним 08/05/18 Втр 16:33:47 1186348
Можете посоветовать годный компилятор для 16 битного real memory mode?
Ответы: >>1186365
Аноним 08/05/18 Втр 17:11:44 1186365
>>1186348
Любой. Они все говно. Я предпочитаю борланд, можно ватком, но ватком - это целый свой мирок со своими закидонами.
Ответы: >>1186367
Аноним 08/05/18 Втр 17:13:19 1186367
>>1186365
Ну мне хотя бы чтобы работало. В gcc с флагом на 16 бит будет не то?
Ответы: >>1186381
Аноним 08/05/18 Втр 17:23:00 1186381
gcc-m16.png (27Кб, 527x560)
>>1186367
Я вообще не знал, что оно умеет в 16-битный код. Будет не совсем то - с 32-битными регистрами, вон даже какой-то MMX проскочил с -O3. Но запуститься - запустится, наверное. А что за задача у тебя? Тебе точно нужен современный компилятор для ее решения?
Ответы: >>1186384
Аноним 08/05/18 Втр 17:24:34 1186384
>>1186381
>А что за задача у тебя?
Пишу загрузчик. Мне любой компилятор, главное, чтобы работало.
Ответы: >>1186388
Аноним 08/05/18 Втр 17:26:37 1186388
>>1186384
Пиши на асме: читай вторичный загрузчик, переключайся в 32-битный защищенный или нереальный режим и не страдай хуйней. Алсо, прошу прощения за скриншот, там дизасм 32-битный, а код 16-битный.
Ответы: >>1186389
Аноним 08/05/18 Втр 17:28:22 1186389
>>1186388
>Пиши на асме
Я от него ахуеваю. Не понимаю даже чем сегменты от стэка отличаются.
Ответы: >>1186395
Аноним 08/05/18 Втр 17:30:42 1186395
>>1186389
На Си ты охуевать будешь гораздо больше. А без знаний о стеке и сегментах как вообще загрузчик писать? Тебе ж этот самый стек настраивать, не говоря уже о дескрипторах сегментов защищенного режима.
Ответы: >>1186398
Аноним 08/05/18 Втр 17:32:29 1186398
>>1186395
>На Си ты охуевать будешь гораздо больше
Ну с указателями проще...
Ответы: >>1186430
Аноним 08/05/18 Втр 17:54:06 1186430
>>1186398
В ассемблере у тебя больше контроля. А тут ты будешь ебаться с теми же сегментами, отличать far pointer от near pointer, и заодно ебаться с вызовами BIOS через жопу.

> Не понимаю даже чем сегменты
far pointer - это пара 16-битный сегмент, 16-битный офсет (записывается как сегмент:офсет), в реальном режиме все настроено так, что плоский указатель считается как (сегмент ∗ 16) + офсет. В защищенном чуть по-другому, но для защищенного ты выставишь базу всех сегментов в 0, и будешь вообще игнорировать наличие сегментов.

> стек
uintptr_t stack[4096];
uintptr_t ∗stackptr = stack + 4096; // stackptr - это пара ss:(e)sp.

// Это делает проц.
void push(uintptr_t value) { ∗--stackptr = value; }
uintptr_t pop(void) { return *stackptr++; }

Больше там ничего нет, в этом твоем стеке.
Аноним 09/05/18 Срд 07:02:19 1186674
Вот хочу я передать в функцию функцию.

float
integ(float a, float b, float eps, float (f)()) {
float sum = 0.0;
while (a < b) {
sum += f(a)
eps;
a += eps;
}
return sum;
}

И передаю.


float
square(float a) {
return aa;
}

res = integ(4.0, 7.0, 0.1, square);


Этот код, конечно же, не работает, в res записалось чёрт-те что.
Чтобы он правильно работал, надо указать float (
f)(float).
А если я хочу передавать функцию с неизвестным заранее числом аргументов?
Аноним 09/05/18 Срд 07:03:24 1186675
Вот хочу я передать в функцию функцию.

float
integ(float a, float b, float eps, float (∗f)()) {
float sum = 0.0;
while (a < b) {
sum += f(a) ∗ eps;
a += eps;
}
return sum;
}

И передаю.


float
square(float a) {
return a∗a;
}

res = integ(4.0, 7.0, 0.1, square);


Этот код, конечно же, не работает, в res записалось чёрт-те что.
Чтобы он правильно работал, надо указать float (∗f)(float).
А если я хочу передавать функцию с неизвестным заранее числом аргументов?
Ответы: >>1186893 >>1187232
Аноним 09/05/18 Срд 08:23:00 1186696
Надо переписать одну прогу с использования graphics.h и 16 бит под современные ОС. Пока думаю над использованием WinAPI для рисования, перехвата стрелок/Fn и прочего. Какие подводные? Алсо, еще надо одну программу с Паскаля так же переписать, но там проблем ожидается поменьше.
Ответы: >>1186893
Аноним 09/05/18 Срд 12:15:06 1186893
>>1186675
> Этот код, конечно же, не работает, в res записалось чёрт-те что.
Сравни с float square(double a), прочитай про default argument promotions. Алсо, своими пустыми скобками ты отключил контроль типов при вызове функции, готовься к сложно отлавливаемым багам.

> А если я хочу передавать функцию с неизвестным заранее числом аргументов?
Это крайне хуевая идея. Хотя бы потому что integ это количество аргументов знает (иначе не сможет вызвать f), f количество аргументов знает, а значит тебе никто не мешает правильно задекларировать свою f и не выделываться.

Если ты хочешь странного (а вы тут все хотите странного), посмотри в сторону функций с переменным количество аргументов, как printf, например. Сделай механизм детекта количества и типа аргументов в рантайме: stdarg.h, va_list, va_arg - вот это все.

>>1186696
> Какие подводные?
Если собираешься переписать только graphics - поебешься с циклом обработки событий, наверняка придется городить еще дополнительные doevents() в самых неожиданных местах. В целом, это достаточно быстро все портируется. Если собрался переписывать саму прогу, то подводных никаких, но это дольше.
Ответы: >>1187386
Аноним 09/05/18 Срд 12:59:57 1186920
>>1156306 (OP)
Работа есть? Смогу прогать мк на военном предприятии? А может быть даже смогу работать дома?
Ответы: >>1186961 >>1187147
Аноним 09/05/18 Срд 13:58:27 1186961
>>1186920
Работа есть, крупные города или не эта страна. Про удаленку и не мечтай. К околовоенным не суйся, у них на строчку кода десять страниц пояснений и согласований.
Аноним 09/05/18 Срд 17:51:30 1187147
>>1186920

Работы вообщем-то дохуя и больше. Все серъёзные фреймворки так или иначе имеют высокопроизводительные части, работающие на C. В эпоху опенсорса все лежит на гитхабе. Увлекайся, разбирайся, форкь, улучшай и тебя рано или поздно позовут работать в буржундию или на удалёночку.
Аноним 09/05/18 Срд 19:06:30 1187210
Насколько всирают всякие кодогенераторы для кортексов чисто сишным прогам?
Ответы: >>1187212
Аноним 09/05/18 Срд 19:07:30 1187212
>>1187210
Генераторы чего и из чего?
Ответы: >>1187227
Аноним 09/05/18 Срд 19:15:56 1187226
>>1156306 (OP)
Друзья, вощем не могу придумать алгоритм решения задачи:
есть дерево с файлами и .txt, на вход функции дается корень, каждый .txt содержит символическую(ие) ссылку(и) на другие файлы того же дерева, или тупик, или приз.
Нужно найти путь к призу.
Сразу понятно, что нужно рекурсивно пройти дерево файлов, а вот как обрабатывать *.txt?
мб кто-нибудь встречался с подобной задачей?
Аноним 09/05/18 Срд 19:16:09 1187227
>>1187212
CubeMX тип
Ответы: >>1187230
Аноним 09/05/18 Срд 19:23:28 1187230
>>1187227
Так оно инициализацию генерит, вот тебе не похуй, какой там код.
Аноним 09/05/18 Срд 19:24:07 1187232
>>1186675
указатель на функция гугли. Берешь инициализируешь как переменную указатель int (*fun)(int , int);
при этом у тебе описана функция с такими же аргументами
int function(int a, int b){
return a+b;
}
теперь просто передаешь указателю функцию :
fun=function;
теперь можешь как аргумент пихать указатель.
> А если я хочу передавать функцию с неизвестным заранее числом аргументов?

если несколько аргументов то <stdarg.h> поможет
Ответы: >>1187235
Аноним 09/05/18 Срд 19:26:12 1187235
>>1187232
А мусорные переменные-то зачем создавать? Он вон напрямую передает, как человек, а ты какую-то бесполезную ебанину советуешь.
Ответы: >>1187236
Аноним 09/05/18 Срд 19:27:39 1187236
>>1187235
не заметил я просто, саня хуй саси
Аноним 09/05/18 Срд 22:45:33 1187386
>>1186893
А если указывать указатель на указатель на функцию?
Число аргументов всё так же требуется?
Ответы: >>1187393
Аноним 09/05/18 Срд 23:03:24 1187393
>>1187386
Описание аргументов требуется не потому, что нехороший Си запрещает указатели на функции с неизвестными аргументами. Просто при вызове функции эти аргументы нужно как-то передавать, а для этого нужно знать их типы, а каким-то другим путем (через астрал?) узнать в рантайме, что вот эта конкретная вызываемая тобой функция хотела первым параметром char вместо int - невозможно. Поэтому Си в таком случае делает лучшее, что он может: определены default argument promotions (например, вместо char будет положен int, а вместо float - double), передаваемые аргументы неявно кастятся к своему дефолтному типу. То же самое делается для необязательных аргументов variadic-функций типа printf - там информация о типах тоже недоступна. Если вызываемая тобой функция именно этого всего и хотела, то все заработает. Если хотела float, а прилетел double - ну ты видел, чем это заканчивается.

> А если указывать указатель на указатель на функцию?
А какая разница? Проблема не в адресе, а именно в том, как компилятор будет эту функцию вызывать. А так ты мог бы хоть указатель на void передавать, тебе никто не мешает. На самом деле так нельзя: по историческим и архитектурным причинам возможны ситуации, когда указатель на данные и указатель на функцию могут быть численно равны, но указывать на разные вещи. Поэтому кастить между указателями на функцию и указателями на void - это UB, хотя на практике на всех современных распространенных платформах все ок.
Ответы: >>1187423 >>1187456
Аноним 10/05/18 Чтв 01:18:58 1187423
>>1187393
Очень подробный ответ, спасибо.
В общем, такими изворотами лучше заниматься в более приспособленных для этого языках.
> Просто при вызове функции эти аргументы нужно как-то передавать, а для этого нужно знать их типы, а каким-то другим путем (через астрал?) узнать в рантайме, что вот эта конкретная вызываемая тобой функция хотела первым параметром char вместо int - невозможно
А как в некоторых других языках дело обстоит, не знаешь? Как-то же они умеют и могут в это. Но засчёт чего?
>по историческим и архитектурным причинам возможны ситуации,
А можешь рассказать поподробней?

Аноним 10/05/18 Чтв 01:42:02 1187424
>>1187423
> А можешь рассказать поподробней?
Ну ты даже на x86 можешь написать ОС, которая выставить ненулевую базу сегменту CS или DS так, чтобы физический адрес CS:some_virtual_addr не был (или наоборот был) равен DS:some_virtual_addr. Или вон там кто-то выше про 16-битную сишечку спрашивал - в small-модели памяти near-адреса кода и данных могут совпадать, но фактически код и данные лежат в разных сегментах. Алсо, в некоторых особо упоротых DSP указатели на код хранятся, читаются и присваиваются как physical_addr >> 2.

> В общем, такими изворотами лучше заниматься в более приспособленных для этого языках.
Я так и не понял, чего ты хочешь добиться. Ты же функцию вызываешь? Значит, ты знаешь, сколько и каких параметров будет. Почему нельзя их в указателе на функцию указать?
Аноним 10/05/18 Чтв 02:42:03 1187429
>>1187423
>Как-то же они умеют и могут в это.
Там не явно предается информация о количестве параметров. В Си есть VA_ARG, е еще лучше съеби и не еби господам мозг.
Аноним 10/05/18 Чтв 04:56:29 1187456
>>1187393
>На самом деле так нельзя: по историческим и архитектурным причинам возможны ситуации, когда указатель на данные и указатель на функцию могут быть численно равны, но указывать на разные вещи. Поэтому кастить между указателями на функцию и указателями на void - это UB, хотя на практике на всех современных распространенных платформах все ок.

Ну то есть вся абстрактопараша, все питушыные платформы с JIT-компиляцией и GC существуют чисто случайно, потому что авторы компиляторов сишки и плюсов добрые? Охуеть же.
Ответы: >>1187480 >>1187490
Аноним 10/05/18 Чтв 05:51:52 1187472
>>1164658
>который учил не Си, и не кресты, а некий "си с классами".
Сцук, это про меня. Просто практиковаться было интересно на winAPI, литературе часто были примеры с кодом вроде LPTCCONTROLDATA context = LPTCCONTROLDATA)malloc((size_t)sizeof(TCCONTROLDATA)); - что-то вроде, а может и нет, стал уже забывать С с классами - 12 лет не кодил, но зашел в ваш тред понастальгировать после богомерзкого JS-треда с их программированием фреймворков.

А ещё тогда полюбил их __try __except
Аноним 10/05/18 Чтв 06:14:17 1187480
>>1187456
>Ну то есть вся абстрактопараша, все питушыные платформы с JIT-компиляцией и GC существуют чисто случайно, потому что авторы компиляторов сишки и плюсов добрые?

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

По-нормальному запись байтами выполняемого кода в память и последующий вызов оного как функции можно делать онли через вынос этого добра в ассемблер.
Ответы: >>1187520
Аноним 10/05/18 Чтв 06:56:35 1187490
>>1187456

Именно.

Вот такая параша на самом деле UB в сяшке:

https://gist.github.com/nickdesaulniers/5299272

И на этом UB, считай, построен весь мир. Все мир, карл, может быть в одночасье doomed, и они еще называют сяшку системным языком, хотя ты на сяшке ни одну операционную систему без UB или ассемблера не напишешь.
Ответы: >>1187543
Аноним 10/05/18 Чтв 07:09:18 1187495
>>1187423
>А как в некоторых других языках дело обстоит, не знаешь? Как-то же они умеют и могут в это. Но засчёт чего?

За счет ненативности и рантайма. Рантайм может хранить код как он хочет, компилировать его на лету, хранить различные метаданные, связанные с типами и прочее. Достигается это за счет того что код ненативный и выполняется либо интерпретатором, либо компилируется JIT-компилятором по необходимости со всеми требуемыми проверками во время выполнения.

Алсо, тред пора перекатывать.
Аноним 10/05/18 Чтв 08:36:14 1187520
>>1187480
Слишком категорично. Но да, JIT предполагает знание о системе и выход за пределы стандарта Си.
ПЕРЕКАТ Аноним # OP  10/05/18 Чтв 08:40:05 1187523
>>1187521 (OP)
>>1187521 (OP)
>>1187521 (OP)
>>1187521 (OP)
>>1187521 (OP)
Аноним 10/05/18 Чтв 09:19:35 1187543
>>1187490
А ничего что в этой параше int()() вызывается как int()(int, int)?
Ответы: >>1187838
Аноним 10/05/18 Чтв 16:28:42 1187838
>>1187543
Ничего. Пустые скобки в Си (но не в крестах) означают, что информация о типах и количестве недоступна. Мы там выше обсуждали.
Ответы: >>1187935
Аноним 10/05/18 Чтв 18:15:54 1187935
>>1187838
Ничего себе метапрограммирование в крестах. А если у меня эта функция перегружена числом параметров, компилятор разберется и вызовет то что нужно?
Аноним 12/05/18 Суб 17:26:22 1188833
Глупый вопрос, но все же спрошу. Допустим, имеется глобальная переменная p = 6;
Пишу условие if ((p++) == 7) { ... }
В таком случае p будет инкрементировано только в рамках условия if, т.е. p увеличится на 1 и сравнится с цифрой 7, а в глобальном значении останется 6, так? Или же будет инкрементировано на единицу, и уже глобально будет иметь значение 7 во всей программе после проверки условия?
Ответы: >>1188837
Аноним 12/05/18 Суб 17:42:10 1188837
>>1188833
> в глобальном значении останется 6, так
Не так. Нет никаких рамок условия, есть выражение, и оно вычисляется. Постинкремент меняет переменную, и ему абсолютно похуй, где он сам в это время находится.

> p увеличится на 1 и сравнится с цифрой 7
Неа. Сначала сравнится, а потом увеличится. Поэтому если p изначально был равен 6, то тело if не выполнится. Но инкремент, разумеется, произойдет в любом случае, поэтому после вычисления выражения в скобках p станет равным 7.

Алсо, у нас новый тредик уже >>1187521 (OP).


Топ тредов
Избранное
Подписывайся на официальный канал Двача в Телеграме и узнавай обо всех новостях и мемах первым! https://tlg.wtf/dvachannel[X]