Этого треда уже нет.
Это копия, сохраненная 22 сентября 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
78 Кб, 792x1023
C Programming Language #23 # OP #1019934 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Годное пособие для гуманитариев: 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 умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

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

Stephen Prata "C Primer Plus, 6th Edition" (2014)
Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.

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 помогает читать сложные сишные декларации.

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

- №20: https://arhivach.org/thread/254158/
- №21: https://arhivach.org/thread/260316/
- №22: https://arhivach.org/thread/262491/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #1019944
Первохуй.
#3 #1020056
>>1019702

> Зачем нужны указатели на указатели и даже о, ужас, указатели на указатели на указатели и дальше по глубине?


Тройные используются редко, обычно на этом этапе уже появляются дополнительные данные, и возникают мысли о структурках. А двойные очень часто нужны. Допустим, есть у нас текстовый буфер, и мы его парсим. Можно передавать стейт (в структурке), но это часто избыточно, поэтому функции дают указатель на текущую позицию в буфере. Но как узнать, сколько данных обработала функция? Можно вернуть новый указатель. Но если нужно вернуть что-то еще, то разумно передавать указатель на указатель на текущую позицию, и обновлять его содержимое перед возвратом из функции. Или, например, при манипуляциях связанным списком может понадобиться вставить узел в самое начало - можно возвращать новое начало списка, а можно передавать указатель на переменную, которая хранит начало списка и модифицировать его.
#4 #1020357
А тип памяти register это пережиток прошлого, так же как и кнопочка Turbo на системниках?
#5 #1020421
Как программировать на Си без использования оперативной памяти?
#6 #1020424
>>1020421
куришь дескрипторы и работу с файлами. Своп юзаешь вместо оперативы, но код так или иначе будет храниться в оперативке: загружаться и выгружаться в неё. Хотя при должном скиле, можно вообще свести использование оперативы к минимуму.
#7 #1020514
>>1020424
Я больше о регистрах и процессорном кеше.
#8 #1020535
>>1020357
С register получается такая же автоматическая переменная, как и другие. Это не "тип памяти", это просто хинт компилятору плюс ограничения на использование. Но на этот хинт большинство компиляторов не обращают никакого внимания.

>>1020421
Никак. Единственное, что стоит сделать, выполняясь из кэша - инициализировать DRAM. И делают это обычно на ассемблере.
#9 #1020646
>>1019934 (OP)
Ананасы, как думаете, что лучше делать с зомби процессами в POSIX?
Мне нужно запустить процесс, подождать пока он завершится, получить код выхода. Ждать долго нельзя, есть максимальный таймаут. Если таймаут прошел (очень редкий, но возможный случай), нужно ругнуться. И дальше 2 варианта: 1) забить на процесс, и он будет себе болтаться как зомби когда все-таки завершится 2) принудительно SIGKILL-нуть и тут же вызвать waitpid (надежно, но больно если процесс таки собирался выполнить своё дело).
В общем вопрос: приемлемо ли оставлять зомби или нужно обязательно их избегать?
#10 #1020648
>>1020535

>Но на этот хинт большинство компиляторов не обращают никакого внимания.


Очень даже обращают если свободные регистры закончились.
#11 #1020693
>>1020648

> Очень даже обращают если свободные регистры закончились.


Ты, видимо, не понял. Современные оптимизирующие компиляторы срать хотели на register (как и на inline, который тоже хинт), они сами решают, как им будет оптимальнее распределить регистры или инлайнить функции. Если переменной пользуются редко, никто ее в регистр не положит, несмотря на register. Справедливости ради, в embedded все не совсем так, и там есть компиляторы, которые если уж не подчиняются, то хотя бы прислушиваются.
#12 #1020753
Собираюсь использовать Clion + mingw-w64 на винде, какие подводные?
#13 #1020754
>>1019934 (OP)
Собираюсь использовать Clion + mingw-w64 на винде, какие подводные?
#14 #1020756
>>1020754
Зачем ебать вола?
#15 #1020757
>>1020693
не пользовал register, но инлайнил активно с arm-none-eabi-gcc, ну так там прост ключиков полно для управления процессом, в т.ч. "инлайнить все что с атрибутом inline" (по умолчанию отключено)
#16 #1020760
>>1020756
А что тут такого?
#17 #1020763
>>1020760
Да ничего, просто у тебя наверняка не соберется какой-нибудь ncurses и ты часами будешь сидеть и чинить это говно.

Не проще накатить линукс виртуалкой или дуалбутом?
#18 #1020765
>>1020763

>не соберется какой-нибудь ncurses


Почему не соберется?
#19 #1020766
>>1020763
Проще сразу пересесть или хотябы чрутом.
#20 #1020767
>>1020765
Потому-что на венде гцц это порт.
#21 #1020774
>>1020767

>на венде гцц это порт


Поэтому ncurses не соберется?
#22 #1020779
>>1020774
Ну порт он бывает баганным (коим и является). Есть некоторая вероятность, что не соберётся приложение.
#23 #1020791
>>1020779
Ну а MSVC не поддерживает C99 и C11, а также не полностью поддерживает C++98 (sic!), про это анон писал в прошлом крестотреде.
#24 #1020797
>>1020791
Проиграл. А что на этот счёт говорят некрософт?
#25 #1020809
>>1020779
давно mingw щупал? там сейчас все охуенно, по крайней мере я из-под линукса весьма большие и разнообразные ехе-шники собираю, никаких проблеи
#26 #1020811
>>1020809
ну хз. Обычно порты убогие.
#27 #1020815
>>1020797
Пишут, что стараются реализовывать стандарт как можно быстрее.
Но стандарты С99 и С11 реализовывать не стали вообще.
С++11 они смогли полностью реализовать спустя 5 лет после выхода этого стандарта, С++14 реализован еще не полностью, С++17, видимо, ждет участь С++11.
#28 #1020817
>>1020811

>Обычно порты убогие.


Там хотя бы заявлена реализация стандарта и она действительно есть.
Можно, конечно, пользоваться msvc в котором не осилили до сих пор С++98, зато не порт, да.
#29 #1020881
>>1019934 (OP)
cап, кто нибудь сейчас пишет вирусы на си?
#30 #1020892
>>1020791
ни разу не видел c11 ни в продакшне, ни в опенсурсе
sage #31 #1020893
>>1020881
нет, их пишут на джаваскрипте и бейсике
#32 #1020897
>>1020893
на жс вроде страницы веб делают?
sage #33 #1020921
>>1020791

> не полностью поддерживает C++98 (sic!), про это анон писал в прошлом крестотреде.


Ха-ха-ха-ха. Я вижу, пример с некорректной работой two-phase name lookup в шаблонах тут хорошо запомнили. (Я его с cppquiz взял, если что.)

Подкину вам ещё одну несовместимость. Как известно, есть такой (ненужный) тип, как wchar_t (typedef в C и самостоятельный тип в C++). Стандарт говорит, что одним wchar_t должны кодироваться все возможные символы из расширенного набора символов, поддерживаемых платформой. Не будем сейчас начинать буквоедствовать о том, что такое символ. Я прекрасно знаю обо всех этих графемных кластерах. Стандарт, скорее всего, имеет в виду code points. Как известно, в Windows wchar_t имеет размер в 2 байта. Но используется для кодирования UTF-16, в которой, как известно, code point может состоять как из одного code unit (двух байт), так и из двух code unit (четырёх байт) (суррогатные пары, или как там это называется). В MSVC заявлена поддержка расширенного набора символов UTF-16, но вот беда, в один wchar_t символ из этого набора может и не влезть!

Короче, если даже проблему с two-phase name lookup исправят (недавно появились со стороны MS какие-то вялые движения в сторону более строгой совместимости со стандартом), то несовместимость wchar_t не исправят НИКОГДА!!!!!! НИКОГДА, БЛЯДЬ!!!!!! СЛЫШИТЕ? ПОТОМУ ЧТО ЭТО СРАЗУ ОТПРАВИТ НАХУЙ НА ПОМОЙКУ ВСЕ КВАДРИЛЛИОНЫ СТРОК КОДА ПОД СПЕРМУ, В КОТОРОМ ЭТОТ WCHAR_T ИСПОЛЬЗУЕТСЯ ВОВСЮ.

Так что, если какая-то спермоблядь вдруг закукарекает из-под шконки что-то про "лучшесть" MSVC, то всегда будет пункт стандарта, в который спермоблядь можно будет ткнуть носом и спросить: а с совместимостью со стандартом у вашего MSVC как?
#34 #1020965
>>1020779

> Ну порт он бывает баганным (коим и является).


Если ncurses не соберется - виноват ncurses. Еще ни разу не слышал про серьезные баги гцц под виндой. Ну разве что веселье с _wWinMain есть и отсутствие -fsanitize (последнее печалит).

>>1020791

> Ну а MSVC не поддерживает C99 и C11


Все, что тебе может потребоваться для сборки сурса на C11 в Visual Studio есть.

>>1020921

> Как известно, в Windows wchar_t имеет размер в 2 байта


А на линуксе? Сходи посмотри и нам напиши. Я не помню, что точно говорит стандарт про wchar_t (не пользуюсь по очевидным причинам), но вот в char вполне хранится UTF-8, и стандарт об этом знает (u8 string literals), и да, в UTF-8 кодируются все символы юникода, просто не всегда в один.
#35 #1020967
>>1020965
Сходил посмотрел. В стандарте в 6.4.4.4 черным по белом написано implementation defined, т.е., компилятор имеет полное право использовать суррогатные пары и хранить их в нескольких wchar_t.
sage #36 #1020974
>>1020965

>А на линуксе? Сходи посмотри и нам напиши.


Эка тебя порвало.

> Я не помню, что точно говорит стандарт про wchar_t


А я тебе сейчас напомню, блядь
http://eel.is/c++draft/basic.fundamental#5
Type wchar_­t is a distinct type whose values can represent distinct codes for all members of the largest extended character set specified among the supported locales.
Ясным по белому написано, что ALL members (а не some members) и не какой-то extended character set, а LARGEST. Среди всех поддерживаемых локалей. Сперма поддерживает, например, локали 12000 и 12001 — UTF-32 LE и BE соответственно. wchar_t не может представить все различные коды, имеющиеся в UTF-32.

> в char вполне хранится UTF-8, и стандарт об этом знает


Да, стандарт явно пишет, что char должен вмещать UTF-8 code unit, т.е. иметь как минимум 8 бит. Он не требует вмещать весь юникод в один char.

> u8 string literals


Про строки не написано, написано про 1 wchar_t.

>>1020965

> В стандарте в 6.4.4.4 черным по белом написано implementation defined


Да, размер у wchar_t implementation defined. Достаточный, для выполнения условия выше. Implementation defined-размер не отменяет его.

> компилятор имеет полное право использовать суррогатные пары и хранить их в нескольких wchar_t


По стандарту — нет.
#37 #1020987
>>1020974

> can represent distinct codes for all members of the largest extended character set


Ок, убедил почти: осталось доказать что отдельные части суррогатной пары не являются character с точки зрения стандарта (это будет непросто). И осталось принести пруфы, что не винда, а именно Visual Studio поддерживает указанные тобой локали. Причем именно их, а не UCS-16.

Алсо, никто не мешает майкрософту увеличить размер wchar_t (хотя бы и с ключиком, или наоборот оставив -fshort-wchar для совместимости, как в GCC). Они этого не сделают, потому что у них апи в UTF-16, а лишние преобразования внутри библиотечных функций замедлят код абслолютно безо всякого профита. Правильно написанный код не сломается. Алсо, с выходом C11 все нормальные люди пересаживаются на char32_t, ибо wchar_t - это официально хуй знает что, не обязательно юникод. Еще более нормальные люди в рот ебали wchar_t, потому что UTF-8 вполне достаточно в большинстве случаев. Но это так, к слову.
sage #38 #1020991
>>1020987

>осталось доказать что отдельные части суррогатной пары не являются character с точки зрения стандарта


> это будет непросто


Это будет не просто, а ОЧЕНЬ просто
http://www.unicode.org/faq/basic_q.html#11
Loose surrogates have no meaning.

> И осталось принести пруфы, что не винда, а именно Visual Studio поддерживает указанные тобой локали. Причем именно их, а не UCS-16.


Это уже схоластика в попытке спасти трескающийся шаблон. Так можно договориться до того, что компилятор собирает приложения под студию, а не под Windows.
С помощью вызова std::locale или ещё как можно запросить локаль с кодировкой UTF-8 или -16 или -32? Если можно, то execution environment поддерживает эти локали. Компилятор может не поддерживать сорцы ни в чём, кроме кодировки, кодирующей базовый набор символов. Он может не поддерживать кодирование всех возможных значений wchar_t или u8-строк литералами. Это нигде и никак не запрещает в рантайме выставлять локали с другим набором символов и читать/писать юникод или ещё что.

> Алсо, с выходом C11 все нормальные люди пересаживаются на char32_t, ибо wchar_t - это официально хуй знает что, не обязательно юникод. Еще более нормальные люди в рот ебали wchar_t, потому что UTF-8 вполне достаточно в большинстве случаев. Но это так, к слову.


С этим я полностью согласен. Я же написал, что "есть такой (ненужный) тип, как wchar_t".
Но если ты его не будешь использовать, это не отменит факта несовместимости MSVC со стандартом в этом пункте.
sage #39 #1020994
Чёт я задумался. Стоит ли продолжать метать бисер?
sage #40 #1021000
>>1020991

> в попытке спасти трескающийся шаблон


Ну я же согласился, что в целом ты прав.

> Loose surrogates have no meaning


Юникодовый консорциум много чего говорит. Они вон говорили, что 65к символов достаточно всем, собственно этим и создав обсуждаемую нами проблему, а завтра у них эмодзи с зелеными гомосексуальными неграми-трансвеститами не влезут, и они опять что-нибудь придумают. Но мы-то не про Unicode, мы про сишные стандарты. И вот там определение character настолько расплывчатое, насколько это возможно.

> можно запросить локаль с кодировкой UTF-8 или -16 или -32? Если можно, то execution environment поддерживает эти локали.


Можно сделать memcopy(&foo, &foo, sizeof(foo)), и это скомпилируется и даже будет работать скорее всего. Но будет ли правильным так делать? Идентификаторы локали - implementation defined, и очевидно, что если в документации явно не написано, значит все на твоей совести.

> так можно договориться до того, что компилятор собирает приложения под студию


В данном случае компилятор собирает приложения под процессорную архитектуру, а Windows начинается где-то в линкере. Проблема размера wchar_t на стороне компилятора - это всего лишь проблема размера и содержимого литералов с префиксом L. Не более. Никто не заставляет линковаться с MSVC-шной стандартной либой, которая ожидает 16-битный wchar_t. Никто ничего не говорит про Windows вообще: можно линковать объектники в ELF или, прости господи, Mach-O, хотя, конечно, никто таким извращением заниматься не будет. Я давным давно, еще в шестой студии писал под MenuetOS, мне было норм.

>>1020994

> Стоит ли продолжать метать бисер


Ну мы уже высказали все доводы, убедили меня полистать стандарт насчет extended character sets, достаточно засрали тред, убедились, что студия нинужна, и что Microsoft изменит размер wchar_t не раньше, чем появится вариант стандартной библиотеки с UTF-8 в качестве execution character set (обещают последние пару лет).
sage #41 #1021002
>>1021000

>Но мы-то не про Unicode, мы про сишные стандарты. И вот там определение character настолько расплывчатое, насколько это возможно.


Т.е. ты хочешь от меня чтоб я показал в стандарте C или C++ определения того, что является Character в любой существующей в мире кодировке? А ничего что, на минуточку, это стандарт C[++], а у кодировок свои стандарты? Лол.
Стандарт говорит о том, что должны быть представимы символы из кодировки локали. Что есть символы — определяется, естественно, кодировкой, а не стандартом C[++].

>>1021000

>В данном случае компилятор собирает приложения под процессорную архитектуру, а Windows начинается где-то в линкере.


Читай про hosted/freestanding environment. http://eel.is/c++draft/intro.compliance#7
Стандартная библиотека (в особенности) и даже наличие ОС (про которую стандарт говорит may и ничего специального от неё не требует, кроме поддержки стандарта, но в общем если она есть — она есть) ожидаются в наличии в hosted-окружении. Наличие фич стандартной библиотеки и их поведение регулируется стандартом. Так что твой абсолютистский минимализм

> а Windows начинается где-то в линкере


ничем не подкреплён. (кроме юношеского максимализма).

> Проблема размера wchar_t на стороне компилятора - это всего лишь


Я выше привёл требование к wchar_t. К чему эти переливания из пустого в порожнее? "Если бы ELF, да кабы Mach-O."
Если wchar_t удовлетворяет стандарту в данном hosted-окружении, то он удовлетворяет. Если нет — нет.

> убедились, что студия нинужна


Я такого не говорил. Вообще я не собираюсь кого-то убеждать или разубеждать. Я тут просто привёл ещё один примерчик несоответствия стандарту. Вряд ли кому-то это помешает пользоваться студией.
#42 #1021075
>>1019934 (OP)
Поясните по хардкору, почему символ указателя "*" лепят то к спецификатору типа, то к названию переменной или функции? Это дебильные художества за которые надо в руки насрать, или это классика, это знать надо разные вещи?
#43 #1021080
>>1021075

>Это дебильные художества


This.
sage #44 #1021086
>>1020965

> Если ncurses не соберется - виноват ncurses


Солипсизм уровня windows
#45 #1021094
>>1020921

>НИКОГДА!!!!!! НИКОГДА, БЛЯДЬ!!!!!! СЛЫШИТЕ? ПОТОМУ ЧТО ЭТО СРАЗУ ОТПРАВИТ НАХУЙ НА ПОМОЙКУ ВСЕ КВАДРИЛЛИОНЫ СТРОК КОДА ПОД СПЕРМУ, В КОТОРОМ ЭТОТ WCHAR_T ИСПОЛЬЗУЕТСЯ ВОВСЮ


>Этот самоподрыв пидорахи

#46 #1021249
>>1021075

> или это классика, это знать надо разные вещи?


Haдо лепить их исключительно к имени переменной, потому что оно так работает.
#47 #1021250
>>1020991
Хуесосы, кроме ASCII ничего не нужно.
#48 #1021289
>>1021094

>хрю-хрю-хрю


Что, простите?
#49 #1021303
Сначала вкатиться в си, а потом в кресты, или наоборот?
#50 #1021350
>>1021303
Сначала в си, а потом во что угодно, но не в ц++
Аноним #51 #1021353
>>1021350
Почему? Во многих вакансиях требуют знание как С, так и С++.
#52 #1021387
>>1021353
если для работы, то можно.
#53 #1021446
Блин, смотрю на книги и не понимаю с чего начать:
Параллельное программирование с использованием OpenMP;
Advanced Programming in the UNIX Environment
Advanced Bash Scripting Guide, но это же тоже надо для UNIX'а
Не понимаю, с чего начать. APUE даст знания по целевой ОС, OpenMP даст знания по многопокпоку, на который дрочу.
В самой книге по OpenMP про UNIX'ы ничего нет, там какие-то мокрые письки в качестве компиляторов рассматриваются, благо руководства по GCC и OpenMP можно найти в интернете.
С чего бы ты начал, анон? С понимания ОС или конкретного стандарта языка?
#54 #1021462
#55 #1021465
>>1021462
Но почему?
#56 #1021627
>>1021446

>


>В самой книге по OpenMP про UNIX'ы н


Смотри со своими многопотоками не обосрись. Большинство задач быстрее выполнятся в одном потоке. Многопоток это огромный оверхед на создание потоков, имеет смысл только если без этого программа заметно быстрее.
#57 #1021628
>>1021627
В любых программах для научных вычислений актуально, любителям синглтхреада пора руки ломать, имхо
#58 #1021633
>>1021627
Хотя, может, ты и прав.
Просто почитать APUE, там посмотреть про межпроцессные взаимодействия и pthreads заодно.
#59 #1021644
>>1021628
Если что-то вроде физики, рендеринга, нейроночек то разумеется это многопоточные вычисления по своей природе.
Но можно говна наделать когда пытаешься сделать простые вещи паралельными, потому что по природе они последовательны.
#60 #1021698
>>1021086
#include <conio.h>
@
НИСОБИРАЕТСЯ ПОД ЛИНУКСОМ
@
ВИНОВАТ КОМПИЛЯТОР

>>1021627

> Многопоток это огромный оверхед на создание потоков


Именно поэтому при нормальных многопоточных вычислениях потоки чаще всего создаются однажды, кладутся в пул и выполняют задачи, ну ты пони. Или если много IO, то создаются однажды и выполняют каждый свою задачу (или не выполняют, ожидая этого самого IO).
#61 #1021729
>>1021698

>#include <conio.h>


>@


>НИСОБИРАЕТСЯ ПОД ЛИНУКСОМ


>@


>ВИНОВАТ КОМПИЛЯТОР



естественно. компилятор visual studio может собрать conio.h, а vim не может.
#62 #1021776
Правильно ли я понимаю, что на Си мне лучше писать что-то низкоуровневое (работа с периферией, памятью, быстрая числодробилка), а основной код лучше реализовывать через вызовы Си библиотек в более высокоуровневых языках?
#63 #1021778

>1021075


>Haдо лепить их исключительно к имени переменной, потому что оно так работает.



Если только это не приведение типов
#64 #1021785
>>1021776
Первое - да. Второе - не лучшая идея. В высокоуровневых языках уже есть аналоги всех функций.
#65 #1021794
>>1019934 (OP)
Анонасы помогите новичку, есть куча-же книг по программированию и видео курсы. Подскажите, где рассказывается как юзать не стандартные библиотеки API в программах? Например всякие arpa/inet.h winsock.h sys/socket.h sasl.h
#66 #1021800
#67 #1021812
>>1021794

>winsock.h


>видео курсы


>c


Пошел нахуй
#68 #1021817
winsock победный носок
#69 #1022064
Хуль указателей нет в том же джаваскрипте?
#70 #1022065
>>1022064
Потому-что ц для низкоуровневых програм, а жс для анимаций кнопок.
#71 #1022082
>>1022064
Они есть.
#72 #1022083
>>1022064
В жс есть ссылки, то есть те же указатели, только всегда гарантированно валидные (или не валидные, и тогда это серьезный баг в движке JS, за который можно срубить бабла).
#73 #1022188
Обнаружил, что в С99 были массивы переменной длины, которые в С11 зачем-то убрали?
Как на них можно взглянуть?
#74 #1022189
И да, почему в литературе почти нигде не упоминается про стандарт С95? Хоть он и был расширением к основному в то время стандарту - С89/С90, почему он не заслуживает упоминания?
#75 #1022205
>>1022188

> взглянуть


-std=c99 ?
А убрали, потому что говно, грозящее переполнением стека и сегфолтами на ровном месте, ну и потому что не приняли в крестах.

>>1022189
Так дополнение же. Никаких киллер-фич по сравнению с C99/11 нет, синтаксис вообще не затронут, только мелкие уточнения и wchar.
sage #76 #1022254
>>1022205

>Так дополнение же.


C++03, несмотря на то, что он тоже дополнение к C++98, упоминается довольно часто.
#77 #1024062
бамп
#78 #1024175
Как прочитать прату (1000 страниц) и не сойти с ума?
#79 #1024184
>>1022254
03 плюсы это вообще один большой багфикс, а не дополнение даже. Просто этот багфикс в отличие от диграфов и ещё какой-то непонятной хунты оказался кому-то нужен и зашёл.
#80 #1024185
>>1024175
По частям. Хотя если раньше ты никаких книг в руках не держал, то проблему никак кроме как анальной болью не решить.
Если не нюфаг — смотри только то что нужно. Если таки нюфаг — возьми книжку потоньше, благо C небольшой.
#81 #1024210
>>1024185

>По частям.


Вроде как читаешь по частям, а все равно что-нибудь упускаешь.

>возьми книжку потоньше


Какую?
#82 #1024236
>>1024175

> Как прочитать прату (1000 страниц) и не сойти с ума?


Разбить на месяц, а лучше два. Вдумчиво читать каждый день понемногу. Стараться понять суть, логику происходящего, а не тратить время на заучивание правил и кейвордов. Обязательно писать хелловорлды на каждую новую для тебя вещь. Собственно, так со всеми книгами, если тебе нужно разобраться, а не ознакомиться.
#83 #1024307
>>1019934 (OP)
Вопрос треду, на сколько живой С в современных реалиях , учу этот ЯП и дико доставляет , но сейчас появляется куча "модных" ЯП не вытеснят ли они С?
#84 #1024313
>>1024307

>появляется куча "модных" ЯП


Каких? Приведи примеры.

>не вытеснят ли они С?


Си в основном и полностью живет в программировании микроконтроллеров и в системном программировании. Учитывая, что почти весь код написан на Си, то он еще будет жить очень долго, но в специальных местах, как и любой другой язык.
#85 #1024314
>>1024236
Просто когда я читаю, то понимаю, что все это уже знаю (был небольшой опыт на С# и C++) и чтение становится очень нудным.
#86 #1024323
>>1024314

>понимаю, что все это уже знаю


Не делай так больше.
#87 #1024333
>>1024323
Ну вроде как я читаю, но мне это все знакомо.
Просто нудно читать все это пока не дойдешь до последних глав, где будет новый и интересный материал
#88 #1024375
>>1024313
всякие Go Scala
#89 #1024378
>>1024375
На го и scala пишут вебсервисы, причем если го еще компилируемый, то скала работает на джава машине.
А на си программируют драйвера и микроконтроллеры.
#90 #1024389
>>1024378

>на си программируют драйвера и


Спасибо анон , то есть если вкатываться в глубь С и математику , то без работы не останешься?
#91 #1024392
>>1024389

> то без работы не останешься?



Весь Linux и ядро Windows на Си. А ты подумОй.
+ embbed почти целиком на Си.

Да даже обычные программы часто на Си пишут.
#92 #1024393
>>1024392

> ядро Windows


Proofs?
#93 #1024396
>>1024389

>без работы не останешься


Я тебя разочарую.
Если живешь в россии, то как раз таки есть высокий риск остаться без работы, потому что вакансий на С/С++ мало и они в основном в оборонной промышленности.
Если хочешь работу, то иди в жс/пеашпи тред и вкатывайся. Сайты нужны всем и в большом количестве, а микроконтроллеры/драйверы - нет.
#94 #1024398
>>1024392
Только если ты живешь за рубежом.
#95 #1024401
>>1024392

>обычные программы часто на Си пишут


Обычные программы сейчас пишут в ентерпрайзе, где очень популярны джава и сишарп
#96 #1024432
>>1024393

Хуювс. А начем по твоему ядро Windows могли написать? на ГОВНЕ С++? лол.

Вот тебе самый простой пруф - посмотри на функции Winapi и как они реализованы. Чистый Си код.

P.s

Насчет С++

http://eax.me/c-vs-cpp/

согласен не со всеми аргументами но с большинством
#97 #1024475
>>1024396
сайты не интересуют и всем нутром их ненавижу, буду учить и постараюсь стать крутым программистом С
#98 #1024525
>>1019934 (OP)
Чо такое стандартная библиотека си, точнее как она реализована? Можно ли ебашить на си под чистое железо без ничего? Оно в асм чтоле компилируется и всё?
#99 #1024526
>>1024525

> как она реализована


Как хедер.

> Оно в асм чтоле компилируется и всё


С ключом -S у жцц в асм
#100 #1024529
>>1024526

>Как хедер.


Нет. Определения функций в скомпилированных библиотеках, а объявления в хедерах.
#101 #1024552
>>1024307
Даже если все перекатятся на "модные" языки, сишечка все равно - этакий английский от айти. Нужно хотя бы уметь ее читать. Вторым таким языком понемногу становится питон.

>>1024392

> embbed почти целиком на Си


Если под архитектуру есть гцц, то нередко на "Си с классами".

>>1024525

> Можно ли ебашить на си под чистое железо без ничего?


Можно, но обычно некоторое количество асма все равно нужно (грубо говоря, лоадер, чтобы минимальный набор железа инициализировать, загрузить код с какого-нибудь флеша, инициализировать проц, прерывания, стек и т. д.).
#102 #1024757
>>1024552

>этакий английский


английский это скорее плюсы, когда нормальный франко язык был деградирован уебанами
#103 #1025010
Как можно реализовать подобие шаблонов в крестах?
#104 #1025034
>>1025010

> Как можно реализовать подобие шаблонов в крестах?


Только макросами.
#105 #1025036
>>1025034
Где про это можно почитать?
#106 #1025130
>>1025036
Делаешь что-нибудь вроде #define TYPE int, инклудишь какой-нибудь foo.с, в котором вместо нужного типа TYPE, после инклуда делаешь #undef TYPE int. Потом можно использовать _Generic для автоматического выбора нужной функции в зависимости от типа. Но лучше так не делай. Если жизненно необходимы шаблоны - используй кресты.
sage #107 #1025131
>>1025130

> #undef TYPE int


Просто #undef TYPE конечно же.
#108 #1025216
Какую IDE прикрутить к mingw?
#109 #1025344
Когда уже полностью портируют llvm-гомосятину на винду?
Заебался использовать сlang вместе с уебищным mingw или msvc.
#110 #1025348
>>1024398
Активных контрибуторов всяких линупс-кернелов и всего похожего заграницей с руками отрывают, на самом деле. Так что вполне себе даже вариант для съеба.
#111 #1025349
>>1025344

>Когда уже полностью портируют llvm на гомовинду?


ftfy
#112 #1025355
>>1024389

> если вкатываться в глубь С и математику , то без работы не останешься?


В РФ работы мало и она оплачивается хуже, чем какая-нибудь Java.
мимо 7 лет системного программирования
#113 #1025368
>>1025355
Вау , расскажи чем занимался что входило в твои обязанности ?
#114 #1025376
Пишу PE-загрузчик. Как в этом уебищном языке хранить адреса: как void* или DWORD, чтобы избежать преобразований типов которых на асме не возникло бы?
#115 #1025382
>>1025216
Notepad++ + NppExec
#116 #1025389
>>1025382

>NppExec


Там дебаггера нет
#117 #1025414
>>1025355
да, да
коротко и ясно
только тебя не будут слушать, прямо сейчас дурачки штудируют сишечку и прочую системщину
#118 #1025415
>>1025348
nop
(хоть один пример приведи)
#119 #1025573
>>1020646

>принудительно SIGKILL-нуть и тут же вызвать waitpid


SIGTERM + waitpid.
SIGTERM должен корректно обработаться в дочернем процессе.
Ну либо IPC прикручивай и следи за стейтом.
#120 #1025576
>>1024389

>Спасибо анон , то есть если вкатываться в глубь С и математику , то без работы не останешься?


Если middle/senior, то не останешься. Оплачивается тоже ничего, мне 200к в ДС предлагали, например, за матан и C, только не мой профиль там.
Вот нормальное место найти, чтобы до соответствующего левела дорасти - это может быть проблемой.
#121 #1025938
Расскажите, как программируют на Си под голое железо?
Вот допустим я хочу вывести хеловорлд на си, но у меня нет ничего, кроме UEFI/BIOS. Что делают в этом случае?
#122 #1025941
>>1025938
Накатывают Linux.
#123 #1026009
>>1025938
Ну ты берешь и реализуешь стандартную библиотеку. Например, printf с помощью int 0x10 или прямой записью в видеопамять. Или реализуешь какую-нибудь прослойку, на которой реализуешь printf. И так для каждой использованной функции.
#124 #1026053
>>1026009

>printf с помощью int 0x10


Это на старых биосах, а на EFI?

>прямая запись в видеопамять


Это надо драйвера писать? Или что надо сделать, чтобы в видеопамять писать и выводить на экран?
#125 #1026163
>>1026053

> EFI


Предоставляет соответствующие сервисы. Погугли EFI hello world.

> Это надо драйвера писать?


Нет, просто писать в нужное место видеопамяти. http://wiki.osdev.org/Printing_To_Screen
#126 #1026242
Парни, а почему иногда MSVS пропускает gets_s()? Очень рандомно, и очень бесит. Имеется в виду, что во время выполнения тупо проскакивает эту функцию. В MinGW этой проблемы не наблюдается.
#127 #1026245
>>1026242
Может у тебя остается символ новой строки в буфере? Типа scanf("%d", &n); fgets(buffer, sizeof(buffer), stdin), и ты такой вводишь число, нажимаешь Enter, и gets у тебя получает только символ новой строки. Проверь, что возвращает, и что кладет в буфер.

> _s


Не используй это говно.
#128 #1026246
>>1026245
Через fflush же очищается буфер? Я его для stdin перед вызовом ставлю, результат тот-же.
#129 #1026254
>>1026246
fflush(stdin) - undefined behavior. Осознай и живи с этим.
#130 #1026278
>>1026254
Ну и нахуй так жить?
#131 #1026535
Есть один даун (я), и я прошу помощи.
Кровь из носу нужно использовать функцию MD6. Нагуглив единственную реализацию, я собрал оригинальную прогу - все пашет. Попытался использовать этот код и заголовки - соснул, пишет undefined reference. Так вот, как бы его заюзать-то?
https://groups.csail.mit.edu/cis/md6/downloads.html
#132 #1026541
>>1026535
Отредактировать функцию main в файле md6sum.c так, как тебе нужно?
#133 #1026542
>>1026541
Несмотря на всю очевидность, я до этого не догадался. Ну ебана. Хотя я не сказал бы, что это будет удобно использовать, но, видимо, придется.
#134 #1026545
>>1026535

> Попытался использовать этот код и заголовки - соснул, пишет undefined reference



Ну очевидно же, что не всё подклчил.
#135 #1026546
>>1026545
Ну, все заголовки, в количестве двух штук я цепанул.
#136 #1026548
>>1026546
А .c файлы в соответствующую директорию перенес?
#137 #1026550
>>1026548
В какую? Все в одной, должно работать. В проект (Code::Blocks) тоже добавил.
#138 #1026553
>>1026550
залей куда-нибудь своё творение, посмотрю
#139 #1026558
#140 #1026564
>>1026553
Уже не надо. Вроде как распердолил это дело. Осталось написать нормальную обертку, и будет готово.
#141 #1027346
>>1026564
Заебись. Возникла необходимость собрать это в Студии. А она ругается на повторяюшееся определение, хотя там такого нет и MinGW это съел спокойно. Заебись.
#142 #1027475
>>1027346
Ты блять начнешь уже постить сообщения об ошибках целиком, или ты думаешь, что тут все телепаты?
#143 #1027478
>>1027475
Чем поможет-то, лол?
#144 #1027480
>>1027478
ебать ты даун
#145 #1027481
>>1027480
Это я уже знаю.
#146 #1027485
>>1027478
Дай угадаю, ты определил функцию с именем compression_hook, хотя должен был присвоить указателю compression_hook адрес функции, названной как-нибудь по-другому?
#147 #1027488
>>1027485
Маленькая поправочка - не я, а некий профессор из США. Но что-то такого я там не замечаю. И MinGW это переварил без проблем.
Ну и вот собственно все, что по этому в исходниках и заголовках находится
#148 #1027491
>>1027485
Хотя погоди. У тебя же кресты, а кресты тебе не сишечка, там логика другая. Думал, расширение сменил, и норм будет? Короче, сходи в md6.h, напиши там extern перед compression_hook, и еще само объявление скопируй (без extern) куда-нибудь в начало md6_compress.c, вот тогда соберется.
Если не будет extern, у тебя будет по переменной на каждый файл, куда инклудится .h, если не воткнешь определение без extern в одном из .cpp, тебя спросят, а гиде собственно переменная. В Си же для деклараций глобальных неинициализированных переменных extern подразумевается автоматически, а если инициализация так и не найдется, линкер создаст переменную вместо тебя.
#149 #1027492
>>1027491
Был бы я Брежневым - расцеловал бы. Спасибо огромное.
14 Кб, 631x438
#150 #1027502
Анон, помоги мне, я уже всю голову сломал с этой хренью.
Ну что с этим не так.
#151 #1027505
>>1027502
На выходе должны быть рандомные восьмибитные числа. А у меня стабильно вылазит гордая единица. Уже второй день не могу с этим разобраться.
#152 #1027514
>>1027502
Что-то я нихуя не понимаю, особенно про делай после ретурна.
Но если подумать, то tmp = 10000000 , а потом 7 раз сдвигается в единицу.
Т.е. чтобы было отлично от 1 нужно чтобы if(DO) сработало ещё хотя бы один раз, чтобы оно не значило.
#153 #1027527
>>1027514
DO просто сыпет восьмибитные числа.
На выходе "Data" иногда появляется "1".
Значит что-то проходит (0b00000001 или 0b10000000).
Какого чёрта оно отрубает остальные 7 бит? Вот это я не понимаю.
#154 #1027529
>>1027502

> if (DO) temp |= 0x80;


Если в DO (видимо, выходной порт shift-регистра) не ноль, ты ставишь старший бит числа (или не ставишь: если на выходе регистра ноль, у тебя старший бит тоже будет 0). Потом сдвигаешь число вправо и сдвигаешь регистр вправо. Таким образом, повторив цикл 8 раз, ты пишешь в temp бит за битом содержимое регистра. Почему у тебя получается что-то неожиданное - искать тебе. Смотри схему, смотри, откуда в регистре содержимое.

> delay после return


Не сработает, не нужен. Разве что выравнивание кода какое.
#155 #1027533
>>1027529
"return" внутрь скобок возвращает?
#156 #1027537
>>1027527
Поставь лог внутри if, и узнай когда он срабатывает.
Меня это

> DO просто сыпет восьмибитные числа.


как-то напрягает. Ведь условие IF(DO) это тоже самое если if(DO !=0 ) Если там не только 0 или 1, то он может слишком часто срабатывать или хз ещё чего.
#157 #1027588
На чистой сишке в студии 2017 можно уже писать? Хочу обмазаться винапи и чистым си и заебенить какое нить приложение. Как пример беру эту апликуху https://github.com/hfiref0x/WinObjEx64 стоит ли на неё ориентироваться?
#158 #1027594
>>1027588

> На чистой сишке в студии 2017 можно уже писать?


Всегда можно было. C11 по большей части есть.

> стоит ли на неё ориентироваться


Что ты под этим подразумеваешь? Программа норм. Хочешь написать такую же? Незачем. Их и так минимум две, эта лучше.
#159 #1027597
>>1027594

>Всегда можно было. C11 по большей части есть.


А почему тогда не вижу что бы было можно делать сишные проекты? Вижу только визуальные плюсы.

>Что ты под этим подразумеваешь?


Организация логики и кода. Тк сложно представить программу на си и винапи без ооп. Но знаю, что пишут.
#160 #1027601
>>1027597

> А почему тогда не вижу


Потому что Microsoft официально забила на Си в юзермоде (хотя ядро у них по-прежнему по большей части на Си). Создавай крестовый проект, сохраняй файлы как .c, и они будут компилироваться именно как Си. Алсо, раньше были ключики /TC и /Tc<filename> (должны были остаться), которые говорят компилятору работать с Си вне зависимости от расширения.
#161 #1027606
>>1027601
Благодарю тебя антош, буду осваивать мир байтоёбства и низкоуровнего погромирования.
#162 #1027616
>>1027606

>низкоуровнего погромирования


>c


lol
#163 #1027741
Хочу пощупать таблицы экспорта и импорта в PE-файлах. Какой инструмент имеет удобную навигацию по смещениям для этого?
#164 #1027847
>>1027741
Ну вообще достаточно IDA. В каких-нибудь PETools/LordPE есть редакторы и вьюверы разного рода, ну или можешь какой-нибудь CFF Explorer взять.
#165 #1027868
>>1027502
>>1027514
>>1027529
>>1027537
Короче разобрался. Проблемы было две:
Сдвиговый регистр не 8 бит, а целых 32! И часть входных данных отсекалась.
И ещё с таймингами проблемы, пришлось замедлить MCU и delay`в добавить.

Осталось доработать напильником.
15 Кб, 608x833
#166 #1028321
Анон, а как бы это сократить?
#167 #1028360
>>1028321
Вынести цикл в отдельную функцию, temp передавать по значению, индекс цикла - по ссылке.
#168 #1028361
>>1028360
Хотя temp тоже по ссылке инб4 в си нет ссылок
#169 #1028410
Анон, спасай.
Для Visual Studio 2017 нужен плагин подсветки SASS.
Web Compiler подсвечивает SCSS, а вот за sass очень обидно.
В гугле нашел только протухший SassyStudio.
19 Кб, 480x360
#170 #1028412
>>1028410

> SASS


> SCSS

#171 #1028569
>>1028412
>>1028410

>SCSS — "диалект" языка SASS. А что такое SASS? SASS это язык похожий на HAML (весьма лаконичный шаблонизатор), но предназначенный для упрощения создания CSS-кода.



вот первый раз про эту хуйню услышал, да еще в ситрхеде. смузихлебы уже реально не могут в ксс в нотпаде и придумывают всякую поеботу?
sage #172 #1028578
>>1028569
Ну CSS без переменных очень неудобен, это да. Хотя тред по сишечке - совсем не место об этом говорить.
#173 #1028595
>>1028578

>Ну CSS без переменных очень неудобен


и зачем там переменные если операторов нет?
#174 #1028598
>>1028595
а, глянул, вот такая шляпа

$font-stack: Helvetica, sans-serif;
$primary-color: #333;

body {
font: 100% $font-stack;
color: $primary-color;}


ну хз, по мне очередная хипстерская технология, которя нинужна поскольку все там можно разрулить грамотным наследованием
#175 #1028601
>>1028595
Просто веб-макаки тупые, и не могут расположить блоки в правильном порядке. Мне всегда calc() хватало.
#176 #1028626
Не получается заебенить экзешник в 1кб как тут учат http://eax.me/winapi-dev-environment/
На первой проге с изменёнными настройками проекта 1кб, у меня 2кб. На второй проге с меседж боксом у автора 2кб, а у меня 3кб. Откуда берётся этот сраный килобайт? Юзаю visual studio 2017 community edition на семёрке.
>>1027588 кун
11 Кб, 532x433
#177 #1028635
Ну какого чёрта оно не хочет считать..
#178 #1028660
>>1027594

> Всегда можно было. C11 по большей части есть.


Че там, к 2030 году завезут void указатели?
#180 #1028723
>>1028635

>temp << 1


Что я блеять вижу? А точно, кто-то не знает языка

> temp <<= 1;

#181 #1028733
>>1028723
Да, спасибо, разобрался.
#182 #1028867
Аноны, спасайте.
Есть два целых числа, их надо разделить и представить результат в double. Но как бы я не исхитрялся, в результате получается огромное число, не имеющее никакого отношения к реальности. Как это сделать?

Код:
int a = 5;
int b = 2;
double res;
res = (double) a / (double) b;
printf("Result: %d, \n", res);
#183 #1028868
>>1028867

int a = 5;
int b = 2;
double res;
res = (double) a / (double) b;
printf("Result: %d, \n", res);
#184 #1028869
>>1028867
%lf у printf вместо %d
#185 #1028929
>>1028869
%lf - это long double. Надо просто %f, а еще лучше %g.
148 Кб, 750x573
#186 #1028944
>>1019934 (OP)
Всем привет, у меня появилось желание написать 2d образовательную игру на чистом C, чисто как челледж, с пиксельным графоном и тд. Программирую на питошке, С дается очень сложно, вот прямо со скрипом. Во вторых я не понимаю как писать игры без ООП, ну воот до меня что-то не доходит. Есть те кто пытался? Подкиньте литературы, библиотек, поделитесь опытом.
#187 #1028952
>>1028929
long float - double
#188 #1028956
>>1028944
Я недавно на С написал веб-программу. На середине хотел бросить, в конце зарёкся так больше не делать и юзать для этого питон или пхп.
#189 #1028959
>>1028712
Благодарствую! Скажи, а что за makefile такой? Только слышал о нём. Получается работать буду всё же в студии, но билдить/дебажить где то в другом месте?
#190 #1028964
>>1028944
Код дума почитай вдумчиво.
#191 #1028970
>>1028959
Можешь те же самые ключики выставить в настройках проекта студии. Посмотри, там где-то можно было прямо текстом additional switches прописать.
Алсо, зачем тебе вообще этот дроч на размер? Я еще понимаю, когда стремятся уместиться в десятки килобайт вместо сотен. Или ты демки делать собрался?
#192 #1028978
>>1019934 (OP)
Тернарный оператор сосет или нет? Что более наглядно?

https://ideone.com/41Zcgp
#193 #1028987
>>1028978
На длинных строках сосет. Но тут строка влезает в нормальный монитор даже при наличии IDE с боковой панелью (на ретроградов с вимом и лимитом в 72/80 символов на строку традиционно насрать). Так что в принципе норм и тернарным оператором. Я бы, возможно, сделал ctx->reloc = NULL у нас тут не кресты при создании ctx, и выкинул бы ветку else в твоем коде.
А вот ставил бы ты скобки в K&R стиле, тебе не жалко было бы тратить строки, и вопроса не возникло бы.
#194 #1029020
>>1028970

>Можешь те же самые ключики выставить в настройках проекта студии. Посмотри, там где-то можно было прямо текстом additional switches прописать.


Уже заметил

>Алсо, зачем тебе вообще этот дроч на размер?


Вобще всегда хотел попробовать злокодинг из за любопытства. Думал сначала написать кулхацкерский троянвася1337эдишон, ну ты понел, но чёт стало стрёмно да и вредить не хочу, переметнулся на создание читовлюто ненавижу читеров, но щито поделать, вроде там можно относительным злокодингом занятся и не вредить никому, кробе разрабов ест-но.
Думал, если размер будет меньше и бинарник как можно "чище" от всего остального, то он будет легче криптоваться/паковаться. Думал в будущем просто криптовать бинарник что бы менять его сигнатуру. Но я наверное дебил, это мои догадки, не знаю где и как про это узнать и уж тем более кого спросить.

А вобще вся эта поебень с низкоуровневым программированием аля чистый си и винапи почему то доставляет мне удовольствие. Как будто нахожусь на самом низком уровне в системена дне ебаном.
Даже лабы по винапи в институте писал с теми же статьями про экзешники в 1кб "без всего лишнего", отрубал нахер crt и использовал только то, что винда давала, оттого простые консольные лабы превращались в лёгкоетяжёлое садо мазо, ведь консоль нужно создать, в неё писать и закрывать её. Раньше получалось захерачить 1кб бинарник, а теперь, в студии2017 почему то нет.
#195 #1029033
>>1029020
Кстати, напрямую вставлял опции компиля и линкера, ничего не помогло, всё те же 2кб.

>>1028970
Няша, можешь попробовать у себя сбацать? Может у меня что то не то.
#196 #1029066
>>1029033

> можешь попробовать у себя сбацать


Я уже попробовал, у меня хелловорлд 1.5 КБ в 32-битном бинаре и 2.5 КБ в 64-битном. Не представляю, как отключить генерацию отладочной датадиректории, которую оно пихает в бинарь даже в релизе и убрать .idata внутрь .text. Собственно, если .idata убить, то будет как раз 512 байтами меньше. Но проще свой линкер написать или какой-нибудь ld/ulink прикрутить, чем ебаться.
#197 #1029086
>>1029066

>Не представляю, как отключить генерацию отладочной датадиректории, которую оно пихает в бинарь даже в релизе


А как ты это определил? Через какой то декомпилятор смотрел?

А если поставить например студию 2015 и в ней те же манипуляции провести, стоит попробовать?
#198 #1029090
>>1029086
Да любой инструмент показывает: dumpbin /headers, objdump, всевозможные PETools, IDA, глазами в хексредакторе все видно, наконец.

> А если поставить например студию 2015


Лучше возьми какой-нибудь другой линкер и пропиши его вызов в post-build action. Можешь, например, polink спиздить из Pelles C: polink /FIXED /NODEFAULTLIB /ENTRY:твояфункция /SUBSYSTEM:WINDOWS /MERGE:.data=.text /SECTION:.text,erw foo.obj user32.lib - и сразу килобайт без ебли.
#199 #1029095
>>1019934 (OP)
Господа, я пишу базонезависимый кодес, в котором указатель на структуру, расположенной на стеке, передается в различные функции. Пишу на чистом WinAPI, сами API динамически дергаю при помощи парсинга PEB и таблиц экспорта. Не помешает ли передача указателя сделать кодес базоненависимым, или придется использовать дельта-смещение для доступа к этой структуре?
#200 #1029096
>>1029095
Если у тебя оно на стеке лежит, это уже относительная адресация (относительно фрейма стека). Когда кладешь указатель на структуру в аргументы, будет та же самая относительная адресация, только относительно другого фрейма стека. Btw, что за эпидемия байтоебли итт?
#201 #1029154
Посоветуйте книжку где учат, как запустить процесс через C pipes отправить ему данные и получить от него данные назад? Желательно в кроссплатформенном виде.
#202 #1029222
>>1029154
Advanced Programming in the UNIX Environment.
#203 #1029396
>>1029154
Если без книг и с С++

std::string exec(const char* cmd)
{
std::array<char, 512> buffer;
std::string result;
std::shared_ptr<FILE> pipe(popen(cmd, "r"), pclose);
if (!pipe) throw std::runtime_error("popen() failed!");
while (!feof(pipe.get())) {
if (fgets(buffer.data(), 511, pipe.get()) != NULL)
result += buffer.data();
}
return result;
}

В шиндовс pipe заменить на _pipe, pclose на _pclose.
#204 #1029397
>>1029396

> \t


Ах ета VS
#205 #1029442
>>1019934 (OP)
Написал минималистичный PE-лоадер и успешно загрузил им хелловорлд на masm32, в котором есть секция релоков. Когда я попытался загрузить этим лоадером многопоточную программу, собранную студией, лоадер рухнул. В этой программе были секции .text, .idata, .tls, .gfids, .00cfg, .rsrc, .reloc. Почему загрузка провалилась? Это из-за TLS и какого-то дерьма в секциях типа .gfids?
#206 #1029444
>>1029442
Вполне возможно, что и из-за TLS.

> лоадер рухнул


А ты знаешь такую штуку, называется отладчик? Он дает какую-нибудь информацию вместо кофейной гущи и пустых предположений. Алсо если рухнул твой лоадер, то в нем есть ошибки.
#208 #1029464
>>1029454
У меня ломка началась от этого видео.
372 Кб, webm, 1280x720, 0:03
#209 #1029469
>>1029454
У Кэролайн хуевые ASMR получаются. Она гонит сотни одинаковых видео про потирание и нашептывание бинауральному микрофону без всякого разнообразия.
Внешне рыжая сучка, понаехавшая из США в Германию, охуенная, но ее ASMR делает мне cringe и становится несмотрительным.
#210 #1029963
Комрады, нид ёр хелп.
Решил вкатиться, и начал штудировать Ричи.
И вот стопорнулся на задаче с вертикальными гистограммами.

Освежу память:
Напишите программу, печатающую гистограммы длин вводимых слов. Гистограмму легко
рисовать горизонтальными полосами. Рисование вертикальными полосами — более трудная задача.

Попробовал пару идей, и вроде все скомпилировалось и запустилось, но вот незадача:
1. Оптимальность. Если слов больше 10к, то программа не будет работать корректно. Если меньше, расходуется лишняя память, пусть и малое её кол-во(всё равно косячно).
Посему встаёт вопрос, сколь реально решить оптимально данную задачу со знаниями, которые по учебнику у меня должны быть в данный момент?
2. После подачи EOF на getchar ничего не происходит. Не рисуются гисты, ничего. Оставил в коде комменты, чтобы понятней было, на листочку расчерчивал примерные итерации, ошибки по идее нет, но она есть. Ломаю голову уже часов 6, ничего не могу понять. ПОМОГИТЕ!

Сам код.
https://pastebin.com/0BiKnK4b

p.s.
Не понял как учитывать ру-символы, 'А'-'Я' не зашло.

p.s.s.
ОС linux mint 18.1 cinnamon, в си вроде бы есть различия между окнами и unix системами.
#211 #1029975
>>1029963
Ужос.

> int main


int main(void).

> Оптимальность. Если слов больше 10к


Не сохраняй слова. Тебе не нужны слова для построения гистограммы. Тебе нужны длины, вот их и храни. Ограничь максимальную длину слова 64 символами (почти вдвое больше длины supercalifragilisticexpialidocious), все что длиннее - относи к ней.

> расходуется лишняя память


Похуй.

> после подачи EOF на getchar ничего не происходит


У тебя внутри цикла еще один цикл с getchar(), и там ты не учитываешь EOF. Подумай, как сделать так, чтобы был ровно один цикл ввода с ровно одним getchar() (подсказка: конечный автомат, у которого два состояния).

> Не понял как учитывать ру-символы, 'А'-'Я' не зашло.


У тебя ввод в UTF-8, почитай про UTF-8, там русские символы представляются двумя последовательными байтами (а другие символы могут быть закодированы еще длиннее, вплоть до пяти). У тебя есть четыре варианта:
1) забить (это простенькая задачка, ебаться не имеет смысла);
2) написать свой декодер UTF-8 (не слишком сложно, но наверняка запутает тебя, особенно если с обработкой ошибок делать);
3) взять готовую либу (ICU, iconv, utf8proc) и ебаться с юникодом вместо изучения языка;
4) представить, что у тебя ввод в Windows-1251, сделать сравнения типа (c >= 0xe0 && c <= 0xff) || (c >= 0xc0 && c <= 0xdf) || c == 0xa8 || c == 0xb8 (строчные, прописные, Ё, ё). С консоли ты Windows-1251 не введешь, конечно, поэтому запускать можно ./a.out < file.txt, где file.txt - файл с русскими символами в кодировке Windows-1251.

Лично я советую первый вариант.

> в си вроде бы есть различия между окнами и unix системами


Есть, но не такие большие, чтобы обращать внимание. Не забывай про атрибут "b" у fopen(), не забывай про возможный \r\n (а то и просто \r) вместо \n, не забывай, что названия локалей для setlocale() везде разные, не забывай, что стандартная либа в винде хочет какой-нибудь Windows-1251, а не UTF-8, ну и про Ctrl+D vs. Ctrl+Z в винде ты, наверное, уже знаешь. На более неочевидные вещи ты напорешься сильно потом.
#211 #1029975
>>1029963
Ужос.

> int main


int main(void).

> Оптимальность. Если слов больше 10к


Не сохраняй слова. Тебе не нужны слова для построения гистограммы. Тебе нужны длины, вот их и храни. Ограничь максимальную длину слова 64 символами (почти вдвое больше длины supercalifragilisticexpialidocious), все что длиннее - относи к ней.

> расходуется лишняя память


Похуй.

> после подачи EOF на getchar ничего не происходит


У тебя внутри цикла еще один цикл с getchar(), и там ты не учитываешь EOF. Подумай, как сделать так, чтобы был ровно один цикл ввода с ровно одним getchar() (подсказка: конечный автомат, у которого два состояния).

> Не понял как учитывать ру-символы, 'А'-'Я' не зашло.


У тебя ввод в UTF-8, почитай про UTF-8, там русские символы представляются двумя последовательными байтами (а другие символы могут быть закодированы еще длиннее, вплоть до пяти). У тебя есть четыре варианта:
1) забить (это простенькая задачка, ебаться не имеет смысла);
2) написать свой декодер UTF-8 (не слишком сложно, но наверняка запутает тебя, особенно если с обработкой ошибок делать);
3) взять готовую либу (ICU, iconv, utf8proc) и ебаться с юникодом вместо изучения языка;
4) представить, что у тебя ввод в Windows-1251, сделать сравнения типа (c >= 0xe0 && c <= 0xff) || (c >= 0xc0 && c <= 0xdf) || c == 0xa8 || c == 0xb8 (строчные, прописные, Ё, ё). С консоли ты Windows-1251 не введешь, конечно, поэтому запускать можно ./a.out < file.txt, где file.txt - файл с русскими символами в кодировке Windows-1251.

Лично я советую первый вариант.

> в си вроде бы есть различия между окнами и unix системами


Есть, но не такие большие, чтобы обращать внимание. Не забывай про атрибут "b" у fopen(), не забывай про возможный \r\n (а то и просто \r) вместо \n, не забывай, что названия локалей для setlocale() везде разные, не забывай, что стандартная либа в винде хочет какой-нибудь Windows-1251, а не UTF-8, ну и про Ctrl+D vs. Ctrl+Z в винде ты, наверное, уже знаешь. На более неочевидные вещи ты напорешься сильно потом.
#212 #1029981
>>1029975

>вплоть до пяти


Четырёх
#213 #1029982
>>1029981
Да, ты прав. Но пятью можно кодировать вплоть до 0x7fffffff. Всегда так делаю, срать хотел на консорциум, использую излишки на технические нужды. Ввод извне декодирую по стандарту, естественно.
sage #214 #1029983
>>1029982
шестью, ну ты понял.
#215 #1030022
>>1029975
Огромное спасибо. Я оказывается дурак, очевидного не увидел. Накостылил, блин.

>Похуй.


Плохо же?

>Не сохраняй слова. Тебе не нужны слова для построения гистограммы. Тебе нужны длины, вот их и храни.


Длины вроде бы и сохраняю в массив. А про ограничения не подумал.
#216 #1030025
>>1029975
>>1030022
И ещё, забываю спросить. В чём существенные различия стандартов?
И нужно ли учить все?
Или стоит учить определённый? Но какой?
#217 #1030033
>>1024333
Если знакомо, то отложи книгу и напиши по памяти краткий конь спект. Это покажет, знакомо или у тебя иллюзия знания.
#218 #1030034
>>1030025

> плохо же


Пока у тебя используется полсотни килобайт, да еще на стеке, тебе вообще не нужно думать о памяти (но подумать о подходе к подсчету длин слов безусловно стоит). В будущем тебе еще предстоит принимать интересные решения типа лукап 128 метров и пиздец кэшу vs. лютые тормоза на бранчах и пиздец конвейеру - тогда и будешь переживать.

> Длины вроде бы и сохраняю в массив


Я код не читал нормально, но ты вроде зачем-то сохраняешь длины каждого слова, тогда как стоило хранить в ячейке массива количество слов с длиной, соответствующей ее индексу (ну или с длиной = индекс + 1, если ты у мамы эстет).

> В чём существенные различия стандартов?


В C11 выпилили gets() (используй fgets()). В остальном код C89 вполне скомпилится без или с минимальными правками. Разве что не приучайся пользоваться старым способом декларации аргументов функций (когда в скобках пусто и/или аргументы задекларированы между () и телом) и еще неявным int (например, main() { puts("Hello"); } и прочие register foo = 1) - просто считай, что этого говна в языке нет.

> Или стоит учить определённый?


Новые стандарты по большей части надмножества старых (обратная совместимость, миллионы строк уже написанного сишного кода, вот это все). Прату после K&R прочитай, там есть про C11, на текущий момент это последний, C2x еще не скоро. Под какой стандарт ты будешь писать - зависит от компилятора и работодателя. Кто-то вон до сих пор сидит на C89 и злобно выпиливает из кода случайные "C99измы" (чаще всего это опенсорс с портируемостью головного мозга, ну или embedded, когда компилятор кастомный и древний одновременно).
#219 #1030037
Из-за чего может получится: Исключение в операции с плавающей точкой (сделан дамп памяти)?
c++ // Библиотека SFML // Linux
#220 #1030040
>>1030037
Поделил на ноль например.
#221 #1030044
>>1028944
оставь свое мыло, у меня есть небольшой проект на Си с использованием sdl2
136 Кб, 893x1200
#222 #1030099
>>1019934 (OP)
Изучаю С по пику.
Там присутствует задачка по написанию програмки по подсчету карт в блекджеке.Изучается if и switch
Краткий алгоритм програмки:
1)Проверяем карту. Если король, валет или королева то оцениваем карту в 10
2) Если туз, то оцениваем в 11.
3) Иначе atoi
4) Поверка на недопустимый ввод\выход\обнуление счетчика
5) Если цена < 10, то уменьшаем счетчик
6) Если цена >=10, то увеличиваем.
7) Вывод
8) Пускаем по кругу

Однако, к моему стыду, switch оказывается работать. Вроде по книге все делаю. Не в один в один. Слегка переделал програмку однако все равно - хуй. Хелп, анон.
https://pastebin.com/yWfgvyAt
#223 #1030118
>>1030099
>>1029963
Вы заебали, форматируйте код нормально. У тебя там break забыт.
8 Кб, 677x343
#224 #1030120
>>1019934 (OP)
Господа, я пытаюсь загрузить XP-шный calc.exe своим лоадером и получаю сегфолт. Почему-то не грузятся две библиотеки. Почему?

Алгоритм загрузки:
1) Пробую GetModuleHandleA (вдруг модуль уже загружен)
2) Если не загружен, вызываю LoadLibraryA.
#225 #1030121
>>1030120
Зря вопрос задал. Туплю. Библиотеки грузятся, проблема где-то еще. В OllyDbg видно, что дебагер виснет при чтении по какому-то адресу.
#226 #1030129
>>1030118
Но для сурова же Брик не критичен. Он будет просто дальше перебирать условия же.
#227 #1030136
>>1019934 (OP)
Почему при выделении памяти по адресу ImageBase возникает ошибка ERROR_INVALID_ADDRESS и возвращается nullptr?

void mem = VirtualAlloc(nullptr /(void)NtHeaders->OptionalHeader.ImageBase/,
NtHeaders->OptionalHeader.SizeOfImage,
MEM_COMMIT,
PAGE_READWRITE);
#228 #1030226
>>1020965

>А на линуксе?


4, все символы Юникода помещаются.
Винда, ЕМНИП, символы больше 0xFFFF не поддерживает.
#229 #1030230
>>1024378

>то скала работает на джава машине


Уже нет, scala native может компилироваться в машинный код.
#230 #1030232
>>1024525

>Можно ли ебашить на си под чистое железо без ничего?


А как по-твоему ОС пишут?
#231 #1030247
>>1024525
Для написания ОС нужен Тьюринг-полный язык программирования, который должен уметь управлять памятью и компилятор.
#232 #1030252
>>1025414
Сишку знать надо, даже если пишешь веб-сайты. Чтобы не быть быдлокодером. Ту же Java вообще нельзя изучать до Си.
#233 #1030258
>>1024525

>Чо такое стандартная библиотека си, точнее как она реализована?


Библиотека, включающая стандартные функции Си, вроде strlen, printf, malloc, rand и т.д. Обычно сделана в виде динамической библиотеки и входит в состав ОС. В Windows это msvcrt.dll (для старого Visual C++ 6.0) и msvcr.dll (для более поздних версий). В Linux это libc.so. (GNU C Library, написанная лично дедушкой Штульманом, из-за чего он считает, что система должна называться GNU/Linux).
В C++ функции из стандартной библиотеки С объединены в пространство имен std.

>Можно ли ебашить на си под чистое железо без ничего? Оно в асм чтоле компилируется и всё?


По умолчанию компилятор C автоматически прилинковывает эту библиотеку к программе (в хэдерах типа <stdio.h> содержатся лишь прототипы функций). Специальным ключом можно отключить при компиляции эту линковку и писать ядра ОС, загрузчики и другой низкоуровневый софт, не требующий ОС.
#234 #1030259
>>1030258

>msvcrN.dll


>libc.so.N


Все время забываю про звездочки в макабе.
#235 #1030303
>>1030099

> char a[3]


> char sub[] = a;


> switch(sub)


a - это указатель (ну то есть, записано как массив трех char, но массивы в аргументах функций неявно преобразуются к указателям на их первый элемент). Ты пытаешься инициализировать им массив sub, тогда как инициализировать этот массив ты можешь только одним или более символом (ну или строковым литералом), но никак не указателем. Потом ты просишь switch сравнить массив с указанными тобой символами. Целый массив. С одним символом. Тогда как switch работает исключительно с целыми числами, и ни про какие массивы знать не знает. Что ты должен сделать: никуда аргумент не присваивать (зачем вообще ты это делаешь?!), взять из него один нужный тебе символ (видимо первый по счету) и уже его матчить switch-ем. Алсо, там у тебя break после return, до него управление не дойдет, выкинь. Алсо, цикл for ты тоже не понял, в 30 строке у тебя нечто странное. Хотел бесконечный? Сделай for (;;) или while (1). Строка 44: точка с запятой после if - явно не то, что ты хотел. Строка 48: несколько выражений между if и else. Пока не выучишь язык, всегда ставь фигурные скобки в теле if/for/do/while (можешь и потом продолжить). И присоединяюсь к >>1030118: выравнивай код! Лень самому, возьми IDE или любой продвинутый редактор (саблайм, npp), там обычно есть автоформатирование одной кнопкой. Можешь еще astyle или clang-format осилить.

>>1030121
Телепаты по-прежнему в отпуске. Код тащи. Или снапшот из ольки с открытым окном модулей и памяти. Но лучше все же код.

>>1030136

> Почему при выделении памяти по адресу ImageBase возникает ошибка ERROR_INVALID_ADDRESS


Занято? ImageBase не выравнен по allocation granularity? Алсо, правильно делать MEM_COMMIT | MEM_RESERVE, ведь ты страницы не резервировал.

>>1030226

> Винда, ЕМНИП, символы больше 0xFFFF не поддерживает.


Очень устаревшие сведения времен NT. Да, изначально никто не знал, какую свинью подложат разработчики Unicode, 65к символов достаточно всем, поэтому был UCS-2. С тех пор успели придумать UTF-16, и винда в него научилась. Символы больше 0xffff в UTF-16 представляются теми самыми обсуждаемыми выше суррогатными парами.

>>1030259

> msvcrN.dll


Ты забыл статическую линковку. Алсо, с некоторых пор в винде динамически линкуются не к msvcr*, а ко всяким vcruntimeN.dll и прочим API sets типа API-MS-WIN-CRT-STDIO-L1-1-0.DLL (пидоры!).
#235 #1030303
>>1030099

> char a[3]


> char sub[] = a;


> switch(sub)


a - это указатель (ну то есть, записано как массив трех char, но массивы в аргументах функций неявно преобразуются к указателям на их первый элемент). Ты пытаешься инициализировать им массив sub, тогда как инициализировать этот массив ты можешь только одним или более символом (ну или строковым литералом), но никак не указателем. Потом ты просишь switch сравнить массив с указанными тобой символами. Целый массив. С одним символом. Тогда как switch работает исключительно с целыми числами, и ни про какие массивы знать не знает. Что ты должен сделать: никуда аргумент не присваивать (зачем вообще ты это делаешь?!), взять из него один нужный тебе символ (видимо первый по счету) и уже его матчить switch-ем. Алсо, там у тебя break после return, до него управление не дойдет, выкинь. Алсо, цикл for ты тоже не понял, в 30 строке у тебя нечто странное. Хотел бесконечный? Сделай for (;;) или while (1). Строка 44: точка с запятой после if - явно не то, что ты хотел. Строка 48: несколько выражений между if и else. Пока не выучишь язык, всегда ставь фигурные скобки в теле if/for/do/while (можешь и потом продолжить). И присоединяюсь к >>1030118: выравнивай код! Лень самому, возьми IDE или любой продвинутый редактор (саблайм, npp), там обычно есть автоформатирование одной кнопкой. Можешь еще astyle или clang-format осилить.

>>1030121
Телепаты по-прежнему в отпуске. Код тащи. Или снапшот из ольки с открытым окном модулей и памяти. Но лучше все же код.

>>1030136

> Почему при выделении памяти по адресу ImageBase возникает ошибка ERROR_INVALID_ADDRESS


Занято? ImageBase не выравнен по allocation granularity? Алсо, правильно делать MEM_COMMIT | MEM_RESERVE, ведь ты страницы не резервировал.

>>1030226

> Винда, ЕМНИП, символы больше 0xFFFF не поддерживает.


Очень устаревшие сведения времен NT. Да, изначально никто не знал, какую свинью подложат разработчики Unicode, 65к символов достаточно всем, поэтому был UCS-2. С тех пор успели придумать UTF-16, и винда в него научилась. Символы больше 0xffff в UTF-16 представляются теми самыми обсуждаемыми выше суррогатными парами.

>>1030259

> msvcrN.dll


Ты забыл статическую линковку. Алсо, с некоторых пор в винде динамически линкуются не к msvcr*, а ко всяким vcruntimeN.dll и прочим API sets типа API-MS-WIN-CRT-STDIO-L1-1-0.DLL (пидоры!).
#236 #1030369
>>1029090
А я могу использовать другой компилятор?
Слышал что то про makefile'ы, как я понял они связаны с cmake. Т.е. например, пишу код в студииили в vscode на крайняк, а компилю уже другими средствами, не студию. Это реально?
#237 #1030373
>>1030369

> могу использовать другой компилятор


Можешь использовать другой тулчейн (банально сохранил все и сказал make в соседней консольке), можешь как я предлагаю через post-build использовать только внешний линкер (может быть, можно и просто внешний линкер указать вместо стандартного, я в студии не спец): т.е., cl генерит объектники, link линкует из них стандартный .exe, а ты потом берешь эти же объектники и линкуешь каким-нибудь другим линкером скукоженный .exe.

> vscode


Вообще никаких проблем со сборкой чем угодно. Туториал по настройке прямо на официальном сайте.

> Слышал что то про makefile'ы, как я понял они связаны с cmake


Ну так потрать десять минут, разберись с синтаксисом мэйкфайлов. Нет, makefile-ы не связаны с cmake. Это cmake связан с makefile-ами. cmake - это генератор makefile-ов под разные тулсеты (в том числе, он, например, может автоматом создать проект для студии).
#238 #1030381
>>1030373
Спасибо тебе за твои ответы, анон, но я не на столько разбираюсь в этом на данный момент.
Я не знаю как использовать эти линкеры-хункеры, работаю пока что с тем, что есть.
Я думал, раз уж 2017 студия добавляет эти ссаные 512 байт и не дает мне сделать желанный мной экзешник в 1кбещё и изъябываться надо что бы на сишке писать а не наплюсах то стоит попробовать сбилдить через что то другое. Ведь по сути, мне надо указать опции для компиля и линковщика, импорты либкстати, что за либы .lib и почему я должен их импортить? я ведь могу динамически подгружать длл и работать с ними, верно?
Но я туговато соображаю, как мне это сделать.
Туториал который был в ответах на мой пост предлагает юзать мейкфайл и nmake, но он выдаёт ошибку, говорит там что то не так с синтаксисом, а гугл нихуя не знает.
#239 #1030382
>>1030373

>(в том числе, он, например, может автоматом создать проект для студии).


Т.е. через него, я смогу сделать себе шаблон проекта на си и что бы без лишнего для студии?
#240 #1030383
>>1019934 (OP)
Посоветуйте ТУЛЧЕЙН для разработки под STM32 для линукса. Мне нужен тулчейн с дебаггером GDB. Если можно, ссылку тоже киньте.
#241 #1030392
>>1030383
ARM же. GNU ARM + OpenOCD. Оба гуглятся, в каком-нибудь арчике есть прямо в репозиториях, ничего качать не нужно. Надеюсь, STLink у тебя есть.
#242 #1030393
>>1030392

>GNU ARM


Там нету gdb.
14 Кб, 547x210
#243 #1030397
>>1030393
Кому ты пиздишь?
#244 #1030402
>>1030381

> но я не на столько разбираюсь в этом на данный момент


> не знаю как использовать эти линкеры-хункеры


Я тебе выше командную строку кидал. Готовую. Всего-то делов - спиздить polink.exe из дистра Pelles C.

> что за либы .lib и почему я должен их импортить


Ты их не импортируешь, ты с ними линкуешься. А в либах этих лежат куски, из которых с помощью магии и сортировки по алфавиту собирается таблица импортов .exe. Ну это если ты про всякие import libraries типа user32.lib спрашивал.

> выдаёт ошибку


Где ошибка? Алсо, если собирать по туториалу тому, будет 3 КБ, а то и больше.

>>1030382

> что бы без лишнего для студии?


Нет. Без разницы, как именно ты будешь вызывать студийный линкер, это он портит всю малину, и он будет ее портить как с ручным вызовом командной строкой, так и через CMake. При этом, с CMake еще и поебаться придется, это такая технология, которая сделана нелюдьми для нелюдей (особенно на винде).
16 Кб, 1003x170
#245 #1030489
Хелп ми, двач.
Или лыжи не едут, или какого хуя в гетчар нельзя засунуть символьную константу?
Ругается именно на эту строчку и я просто не понимаю почему
#246 #1030490
>>1030489
Там снизу какая-то хуета, но я ее уже переписал и дело не в ней
#247 #1030804
>>1030489
p кириллическая или ascii?
sage #248 #1030827
>>1030489
Ругается не на эту строчку, дебил.
#249 #1030909
>>1030397
Нет там нихуя: https://www.archlinux.org/packages/community/x86_64/arm-none-eabi-gcc/

usr/bin/arm-none-eabi-c++
usr/bin/arm-none-eabi-cpp
usr/bin/arm-none-eabi-g++
usr/bin/arm-none-eabi-gcc
usr/bin/arm-none-eabi-gcc-7.1.0
usr/bin/arm-none-eabi-gcc-ar
usr/bin/arm-none-eabi-gcc-nm
usr/bin/arm-none-eabi-gcc-ranlib
usr/bin/arm-none-eabi-gcov
usr/bin/arm-none-eabi-gcov-dump
usr/bin/arm-none-eabi-gcov-tool
#250 #1030911
>>1030909
А ты читать умеешь? Какой пакет по твоей ссылке? А вот по этой: https://www.archlinux.org/packages/community/x86_64/arm-none-eabi-gdb/ ?
#251 #1030956
Решил вкатиться в погроммирование. В приличные конторки не пошел (я не умею программировать, только в алгоритмистику могу), а вот в нии решил тестовое задание и попал на работу.
Получил задание, первый день отработал. Насколько я понял, назвать мою (и всего нии) работу "программированием" сложно. Скорее это решение некоторых сложных физических задач численными методами. Программирование занимает лишь часть времени, значительная часть (и не только у меня, но даже у коллеги-доктора) - курение мануалов или разработка нового скорее "подработка старого" численного метода для задачи.
Возник вопрос. А эта хуйня вообще кому-то нужна или удел всяких физических нии? Стоит вкатываться или это болотце, единственным вариантом развития в котором является дрочь на научные знания, аспа и статейки в ваковских журналах (я глуповат, вряд ли смогу в статейки)?
#252 #1030958
>>1030956
Добавлю, что плюсов нет. Я сказал, что умею лишь в плюсы (и то посредственно), мне ответили: переучивайся, плюсы ненужное говно.
Я думал, ненужное говно С.
#253 #1030993
>>1030956
Рашкинские нии это такой мультиверс полный чудес, каждая инста почти как новый мир:
можно найти и глухой тупой совок, и даже иногда мир полдня, как у стругачей.

Это совсем не программирование и не имеет ничего общего с ни с computer science, ни с греблей.

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

Пишу с нулевой, к С это отношения не имеет, язык в такой тусовке вторичен и зависит от специфики задачи и нии.
#254 #1031019
>>1030383
IAR uber alles
#255 #1031020
>>1031019
А что, оно таки стало бесплатным? А что, оно умеет в Linux?
#256 #1031052
>>1030958

>плюсы ненужное говно.


Мужики дело говорят. Видел недавно в новостях, что разработчики буста перекатились с собственного велосипеда на CMake наконец-то.
Хотя асинхронщина что в сях, что в крестах это больно.
#257 #1031054
>>1030993

> отражение радиоволн от летящего сверхзвукового обекта


Угадал.
Впрочем, пока моя задача скорее напоминает курсовик третьекурсника, чем что-то серьезное.
#258 #1031930
>>1019934 (OP)
Пиздец, какого хера линкер помещает переменную i в .bss, а переменную off в .data? Из-за этого в i оказывается мусор, потому что я не обнуляю .bss в RAM. Почему линкер такой пидор?

https://ideone.com/C2bgUt
#259 #1031952
Будет ли какое-либо увеличение производительности, если UDP сервер с большой нагрузкой будет разбивать коннекты по портам, или порт - просто абстракция?
#260 #1032016
>>1031952
Кажется, ты хочешь скорее что-то вроде SO_REUSEPORT. То есть, множество процессов на одном порту
#261 #1032022
>>1032016
Я хочу, чтобы сервер мог держать огромное количество клиентов и общаться с ними по UDP максимально быстро. Будет ли ускорение, если распределить клиентов по портам?
#262 #1032245
>>1031930

> какого хера линкер помещает


Как раз именно того самого хера, что он ожидает нули в .bss. Это оптимизация такая, чтобы не хранить нули в бинарнике. Напиши кастомный скрипт для ld, чтобы он этого не делал, в чем проблема-то?

>>1032022
Вряд ли. Хочешь ускорения - делай больше потоков-обработчиков. Кстати, огромное - это сколько?
#263 #1032295
>>1031020
Отладка в ворованной IDE на ворованной винде даже приятнее, чем за деньги.

Тем более, что шведское поделие, в отличие от эклипсоидов, летает на любом калькуляторе.
#264 #1032385
>>1032022

>Будет ли ускорение, если распределить клиентов по портам?


Что будешь делать, когда порты закончатся?
sage #265 #1032415
>>1032385
Добавит машинке еще один айпи?
мимо
#266 #1032612
>>1032245
40к, как в eve
>>1032385
По 10-50 клиентов на 1 порт. Нет привязки клиента к порту, есть просто распределение, вопрос в том, будет ли от этого увеличвние перфоманса
#267 #1032696
>>1031952
Тебе нужен бондинг.
#268 #1032722
>>1032612

>будет ли от этого увеличвние перфоманса


нет
#269 #1033075
Что писать в main? return 0 или exit(EXIT_SUCCESS)?
#270 #1033076
>>1033075
Можешь еще ничего не писать. Все три варианта равнозначны.
#271 #1033238
>>1033076
ну если совсем доебаться, то формально разница есть:

> int main(){return 0;} =>


> movl$0, %eax


> popq%rbp



> int main(){exit(0);}


> movl$0, %edi


> callexit@PLT


>

#272 #1033369
Анон, что означает этот атрибут?

void SysTick_Handler(void)
__attribute__((weak, alias("default_handler")));

Объявление функции линкер рассматривает как символ, который можно заменить другим символом с таким же названием, если он встретится в дальнейшем при линковке? Объясни подробно, как происходит замена этого дефолтного прерывания пользовательским обработчиком.
#273 #1033371
>>1033369
А еще: атрибут указывается только после имени функции или до имени тоже можно?
#274 #1033672
>>1033238
Наблюдаемой нет. Стандарт подразумевает что-то типа:
void _start(void) {
...
exit(main(argc, argv, envp));
}

>>1033369

> Объявление функции линкер рассматривает


Линкер не рассматривает объявления, он их не видит. Он видит атрибуты (флаги).

> который можно заменить другим символом с таким же названием, если


Да, weak означает "если ничего более подходящего не найдется".

> как происходит


Символы бывают defined (определенные - "вот здесь есть такая-то сущность"). Бывают еще undefined символы (неопределенные - "где-то есть такая сущность"). Линкер по ходу обработки объектных файлов составляет список всех встреченных символов. Если встретился символ defined, а в списке есть undefined - ура, мы нашли определение. Если встретился defined, но в списке уже есть defined - это ошибка, потому что непонятно, какое определение из двух нужно использовать (на деле все сложнее). Если по окончанию работы в списке остались undefined - это тоже ошибка (опять же в реальности возможны некоторые варианты).

Weak на самом деле - две разных фичи (не считая веселья с динамической загрузкой) - weak reference и weak definition. У линкера, умеющего в weak, обычные defined-символы (без weak) называются strong. Если в таблице у линкера лежит weak, а он видит strong (или если лежит strong, а он видит weak), то должна была бы возникнуть ошибка, но она не возникает - weak нахуй игнорируется, в таблицу попадает (или остается в ней) strong. Мало того, если по окончанию работы линкера в таблице остались undefined weak символы, это тоже не ошибка - считается, что значение символа (например, адрес функции) - ноль/NULL.

Ну и соответственно: если у тебя где-то в системных хедерах лежит weak-reference (объявление) обработчика прерывания, а обработчика вообще нихуя нигде нет, то в таблицу обработчиков прерываний попадет NULL. Если у тебя есть (определена) своя функция с таким же именем, то в таблицу попадет адрес твоей функции. И, наконец, если в хедерах или либе лежит weak-definition (определение), а твоей функции с таким же именем нет, то будет использовано библиотечная реализация.

>>1033371

> только после имени функции или до имени тоже


В объявлениях или до имени, или после. В определениях только до имени.
#274 #1033672
>>1033238
Наблюдаемой нет. Стандарт подразумевает что-то типа:
void _start(void) {
...
exit(main(argc, argv, envp));
}

>>1033369

> Объявление функции линкер рассматривает


Линкер не рассматривает объявления, он их не видит. Он видит атрибуты (флаги).

> который можно заменить другим символом с таким же названием, если


Да, weak означает "если ничего более подходящего не найдется".

> как происходит


Символы бывают defined (определенные - "вот здесь есть такая-то сущность"). Бывают еще undefined символы (неопределенные - "где-то есть такая сущность"). Линкер по ходу обработки объектных файлов составляет список всех встреченных символов. Если встретился символ defined, а в списке есть undefined - ура, мы нашли определение. Если встретился defined, но в списке уже есть defined - это ошибка, потому что непонятно, какое определение из двух нужно использовать (на деле все сложнее). Если по окончанию работы в списке остались undefined - это тоже ошибка (опять же в реальности возможны некоторые варианты).

Weak на самом деле - две разных фичи (не считая веселья с динамической загрузкой) - weak reference и weak definition. У линкера, умеющего в weak, обычные defined-символы (без weak) называются strong. Если в таблице у линкера лежит weak, а он видит strong (или если лежит strong, а он видит weak), то должна была бы возникнуть ошибка, но она не возникает - weak нахуй игнорируется, в таблицу попадает (или остается в ней) strong. Мало того, если по окончанию работы линкера в таблице остались undefined weak символы, это тоже не ошибка - считается, что значение символа (например, адрес функции) - ноль/NULL.

Ну и соответственно: если у тебя где-то в системных хедерах лежит weak-reference (объявление) обработчика прерывания, а обработчика вообще нихуя нигде нет, то в таблицу обработчиков прерываний попадет NULL. Если у тебя есть (определена) своя функция с таким же именем, то в таблицу попадет адрес твоей функции. И, наконец, если в хедерах или либе лежит weak-definition (определение), а твоей функции с таким же именем нет, то будет использовано библиотечная реализация.

>>1033371

> только после имени функции или до имени тоже


В объявлениях или до имени, или после. В определениях только до имени.
#275 #1033768
>>1033672

>Символы бывают defined (определенные - "вот здесь есть такая-то сущность"). Бывают еще undefined символы (неопределенные - "где-то есть такая сущность"). Линкер по ходу обработки объектных файлов составляет список всех встреченных символов. Если встретился символ defined, а в списке есть undefined - ура, мы нашли определение. Если встретился defined, но в списке уже есть defined - это ошибка, потому что непонятно, какое определение из двух нужно использовать (на деле все сложнее). Если по окончанию работы в списке остались undefined - это тоже ошибка (опять же в реальности возможны некоторые варианты).


.......

что вы зделоли с сишечкой?
sage #276 #1033945
>>1033768
А что не так, и при чем тут сишечка? Все линкеры делают делают это.
#277 #1034216
Пишу библиотеку длинной арифметики над конечными полями. Как эффективнее всего реализовать сравнение двух 256-битныхчисел, представленных пятью chunk'ами, в которых хранятся "цифры" размером 51 бит? Я реализую операции так, чтобы они могли выполняться над всеми цифрами числа одновременно за один такт, и для этого не использую прибавление с переносом adc. Сравние я тоже хочу сделать эффективно, чтобы оно выполнялось за такт над всеми чанками. Как? Одно условие с несколькими &&?
#278 #1034231
>>1034216

> выполнялось за такт


Для начала скажи, ты дизасм смотришь, или у тебя кофейная гуща?
#279 #1034232
>>1034231
Пока что основную часть кода и вообще писал на асме.
#280 #1034233
>>1034232
Ну покажи хотя бы свое сложение без adc. А то я слабо представляю себе софтовую реализацию за такт. В железе вот могу, а софтом нет.
#281 #1034235
>>1034233

mov TempReg, [rax]
shr TempReg, 51
add ebx, TempReg ; в ebx - следующий чанк, к нему прибавляем carry
and [rax], маска обнлуляющая carry бит и все старшие биты

Тут используем сокращенную запись чисел: 256 бит делим на 5 частей, в каждой части получается 51 бит. При сложении таких цифр переполнения не возникает,и дорогостоящая операция adc не нужна. Все carry, однако, нормируем самостоятельно.
#282 #1034241
>>1034235
Ну все это к тому, что над векторами процессор может выполнять операции за такт, но при этом теряются carry, т.к. замедляют процесс. Поэтому нужна вся эта магия со сдвигами и масками.
#283 #1034819
Если я буду реаллокать char, то по сути все, что лежало в этом массиве будет лежать в новом, так? Будут ли утечки памяти при этом и высвобождает ли realloc ранее выделенную память? Вопрос встал потому, что сначала должны быть высвобождены все char, потом char, потом сам char*, чтобы не было утечек
#284 #1034822
>>1034819

>Если я буду реаллокать char


char

>высвобождены все char


char

>потом char


char

>потом сам char


char
1 Кб, 188x149
#285 #1034825
>>1034822
Уебите меня кто-нибудь
#286 #1034826
>>1034819

> Будут ли утечки памяти при этом и высвобождает ли realloc ранее выделенную память


Нет и да.
#287 #1034828
>>1034826
Как именно он высвобождает? Если я ему подам тройной char, то он снесет сразу его или начнет с более "низких" указателей? Т.е. сначала чар1, потом чар2, потом чар3. Если так, то все хорошо. Если же нет, то сто процентно будет утечка. Я именно это хоте уточнить
#288 #1034829
>>1034828

>сто процентно


стопроцентно

>хоте уточнить


хотел уточнить
#289 #1034840
>>1034819

> то по сути все, что лежало в этом массиве будет лежать в новом, так?


так

> realloc ранее выделенную память


эмм, ну должен вообще-то. Почитай man realloc.

> Вопрос встал потому, что сначала должны быть высвобождены все char, потом char


mi ne komprenas vin, ja tvoja ne ponimat?
#290 #1034841
>>1034819
ответ
#291 #1035089
>>1034819
malloc/realloc/free абсолютно похуй, что конкретно у тебя лежит в куске памяти. Все, о чем они знают - размер и адрес этого куска. Так что, если у тебя массив указателей, то realloc() сами указатели-то тебе, конечно, скопирует в новое место (или наоборот лишние из хвоста выкинет, если новый размер меньше текущего), но о том, что там указатели, он не знает и знать не может, поэтому если ты не озаботился - утечки будут. У тебя язык с ручным управлением памяти, каждым своим указателем ты рулишь сам. Сам насоздавал - вот и высвобождай все сам.
156 Кб, 1280x404
#292 #1035236
Почему здесь не ставится звёздочка? Спотыкаюсь о синтаксис как даун.
#293 #1035245
>>1035236
char ∗lineptr[] в аргументах равносильно char ∗∗lineptr. В теле цикла lineptr[ i ] равносильно ∗(lineptr + i), т.е., одну звездочку (один уровень указателей) у lineptr ты убираешь, получаешь char ∗, именно его (адрес последовательности символов, завершенной \0) и хочет %s в printf. Если бы ты выводил только один символ через %с, то сделал бы ∗∗(lineptr + i) (убрали два уровня, получили char) или более читабельно с использованием синтаксиса массивов ∗lineptr[ i ].
#294 #1035254
>>1035089
Я именно об этом и спрашивал, ибо писали, что высвобождает выделенную память. Я понять как раз не мог, как он может указатели более низкого порядка удалять (так как он и не может, лол), хотя обычно пишут, что нет никаких утечек и быть не может. Спасибо
#295 #1035278
>>1035254
Ну про realloc обычно имеется в виду, что если foo = realloc(bar, length) успешен, и оно решит переместить содержимое bar на новое место, то память по адресу bar оно само освободит, тебе не нужно об этом думать. Никаких утечек в этом смысле.
132 Кб, 1280x317
#296 #1035281
>>1035245
Блять. Вроде, улавливаю вершки. Так меня указатели путают почему-то.
#297 #1035291
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/

Просят деньги.
Может есть что-то для нищебродов?
#298 #1035304
>>1035281
Да все просто. Есть char ∗∗lineptr, у постфиксного ++ приоритет выше, чем у звездочки. Соответственно ++ увеличивает lineptr (и lineptr теперь указывает на следюущий char ∗), но до того, как постфиксный ++ что-то сделает, он (так как он постфиксный) "кладет" в выражение текущее значение lineptr значение, а звездочка читает из этого значения char ∗.
Путаешься в указателях - обязательно смотри в отладчике (желательно в голом хексдампе памяти), путаешься в приоритетах - расставляй скобки, объявляй временные переменные. Алсо, попробуй думать об указателе, как о массиве (из нескольких, а иногда и из одного элемента) значений того типа, на который он указывает. Ну типа: ∗lineptr++ это char ∗line; line = lineptr[0]; ++lineptr.
#299 #1035306
#300 #1035445
>>1035304
Спасибо за разъяснения, переспал с твоими сообщениями, понял, что запутался, так как не сразу понял, что в printf и нужен указатель на строку.
#301 #1035595
>>1019934 (OP)
C чем сравнить ctx->pPeHdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS], чтобы определить, что TLS нет?
#302 #1035626
Гайс, как создать массив объектов класса?
К примеру :
for(int i = 0; i<VariableList.threads; i++)
VkApi Api = new VkApi();
Что бы в последующем мог использовать
Api[0].Auth();
Api[1].Auth();
...
и т.п ?
#303 #1035628
>>1035626

>VkApi Api = new VkApi();


VkApi Api = new VkApi();
Фикс
#304 #1035638
#305 #1035640
>>1035638
api[ i ]
#306 #1035705
>>1035595
Размер директории больше или равен размеру IMAGE_TLS_DIRECTORY?
#307 #1035775
Аноны, вот основы синтаксиса прочел, "опыта" на laba1 набрался.
Интересует вот какой момент: где почитать про Си и сети? Как делать пост/гет запросы и прочее?
#308 #1035777
>>1035775
В документации к библиотеке CURL?
#309 #1035790
>>1035775
Ось какая? На форточках дрочи Winsock, там не сложно.
#310 #1035834
>>1035775
Под линукс есть охуенный libsoup. Под винду даже хз что может по удобству сравниться с ней.
#311 #1035846
>>1035834
В винде winhttp есть системный, но с удобством там некоторые проблемы.
#312 #1035854
Lua тут кто нибудь знает?
#313 #1035861
>>1035854
Тут нет. Иди к ньюфагам в бесконечно-прикрепленный.
#314 #1037071
Всем привет! В процессе написания кода иногда приходится printfами выводить какие то значения или состояния, захотел эти конструкции обернуть ifndef DEBUG endif. Т.е хотел определить глобальную переменную DEBUG и если она определена,то выводим вспомогательное сообщения, если нет, то не выводим. Но как вы понимаете не получилось, гугл кидает на использование этой конструкции при подключении .h файлов. Помогите пожалуйста разобрася, спасибо.
#315 #1037105
>>1037071
Заворачиваешь вызов функции в макрос, типа:
#define dbgprint(x) \
#ifdef debug \
print(x) \
#endif
sage #317 #1037164
>>1037071
>>1037105
#ifdef DEBUG
#define DPRINTF(...) dprintf(__VA_ARGS__)
/ void dprintf(const char fmt, ...) {
va_list ap;
va_start(ap, fmt); vfprintf(stderr, fmt, ap); va_end(ap); } */

#else
#define DPRINTF(...) ((void) 0)
#endif
#318 #1037271
>>1037108
>>1037105
>>1037164
Большое спасибо! Разобрался.
#319 #1037662
Почему после brk(heap_start + small_value) я могу сделать так heap_start[large_value] = some_value не словив segfault? Это как-то связано с тем, что ос выделят память постранично, и такая, мол, вот тебе страница, пездюк, еби ее как хочешь? Если так, то почему после выделения памяти с помощью brk, sbrk(0) возвращает адрес heap_start + small_value, а не heap_start + page_size?
#320 #1037693
>>1037662
если ты прочитаешь windows internals или хотя бы пару книг рихтера являсь разработчиком под винду ну или пару аналогичных книг под юникс разработку то подобных вопросов не будешь задавать
а так иди нахуй, да
#321 #1037772
>>1037662

> Это как-то связано с тем, что ос выделят память постранично


brk() тебе дает сразу несколько страниц, даже если ты попросишь байт. Но да, причина в этом.

> почему после выделения памяти с помощью brk, sbrk(0) возвращает адрес heap_start + small_value


Патамушта такой API, так сложилось. Сколько попросил - столько твое, ни байтом больше. И вообще, о том, что выделено больше, тебе знать не нужно. Попросишь потом еще раз small_value - вообще нихуя не выделится физически, только указатель brk передвинется. Хочешь выделять постранично - используй mmap. И вообще, управление виртуальной памятью в юзермоде в линуксе застряло в 80х, это тебе не винда.

>>1037693
А ты сам иди нахуй отсюда.
#322 #1037782
>>1037772
помогаешь абсолютно незнакомому человеку, который в будущем станет твоим прямым конкурентом за жизненную нишу
соси хуй, дурачок
#323 #1037827
>>1037782
Какие-то жизненные ниши, конкуренты, что несёт этот поехавший?
#324 #1037845
>>1037827
Чмо с двача же. Когда я нашел работу и тянку, то перестал думать о такой хуйне.
#325 #1037855
>>1037772

>Патамушта такой API


Блядь, могли бы в man brk это добавить. Добра тебе.

>>1037693

>если ты прочитаешь


Хорошо, прочитаю.

>>1037782

>Непомахай блядь, он тебя сожрет


Каждый раз проигрываю.
319 Кб, 1022x598
#326 #1037864
Обосрался
#327 #1037865
>>1037864
Не туда
#328 #1038176
Задача такая. Есть два канала. Нужно считать из них данные и вывести. Но при этом делать это с помощью селект, чтобы не дожидаться одного из них, а потом второго.
Почему-то если со стандартным вводом (если написать fd1 = 0) работает, а с файлами -- нет.
https://pastebin.com/AiyETnxA
Помогите, люди добрые.
#329 #1038214
>>1038176

> Помогите, люди добрые.


Классика же. Прочитай внимательно (ВНИМАТЕЛЬНО!) про первый аргумент у select().
#330 #1038218
>>1038214
зачем? можно просто спросить, и умный дурачок, поджав лапки, ответит
так гораздо быстрей чем самому грызть проблему
#331 #1038233
Может вы знаете? Как протраверсисть дерево без рекурсии? Я спрашивал у С++-уёбков, а они послали меня делать конечный автомат со стеком. Может, есть какое-нибудь решение попроще?
#332 #1038235
>>1037845
когда ты потеряешь работу потому что на твое место взяли молодое мясо - студентика выпускника, и твоя шлюха соскочит с твоего пинуса на другой, надеюсь ты вспомнишь что нехуй помогать собственным прямым конкурентам
#333 #1038240
>>1038235
Ебать ты мелочный. Ты сильно переоцениваешь свои возможности, считая, что твоя "помощь" или ей отсутствие может как-то сильно повлиять на состояние окружающего мира. Фактически, этот мир практически никак не изменится даже если тебя совсем не будет.
#334 #1038241
>>1038233
С рекурсией ты просто используешь аппаратный стек неявно. И без рекурсии тебе тоже нужна какая-нибудь вспомогательная структура данных. Стек там или очередь. Да и куда уж проще-то? Стек из массива фиксированного размера хуячится четырьмя строками, считая обработку ошибок. Для начала кладешь корень, потом в цикле достаешь узел/кладешь его потомков, повторяешь, пока в стеке что-то есть.
#335 #1038244
>>1038241
Но я не хочу массив фиксированного размера, это ведь ограничит уровень вложенности.
#336 #1038245
Нужно запрограммировать две функции. Есть два варианта как это сделать.

1.
double func1(всякие переменные);
double
func2(double(...), всякие переменные);
В этом случае вторая функция реализуется элементарно и обладает некоторой вариативностью -- вместо func1 в нее можно засунуть кучу разных функций. Но норм пацаны почему-то (из-за необходимости потратить пару тактов на присвоение результата функции некоторой переменной?) так не делают, они делают вот так:

2.
int func1(всякие переменные, double
result);
int func2(всякие переменные, double* result);
В таком случае внутри func2 придется явно вызывать func1 или существует способ этого избежать?, вариативность теряется.

Какой способ выбрать? Первый мне ближе (потому что именно он обычно используется в других языках), но вроде бы хорошим стилем является второй способ.
Как пофиксить второй способ таким образом, чтобы в него можно было засовывать разные функции, а не просто запустить func1 внутри?
#337 #1038246
>>1038245
https://pastebin.com/UjfPxx1N
Простите, забыл про звездочки.
#338 #1038247
>>1038214
О, спасибо.
>>1038218
Ты какой-то обиженный.
#339 #1038249
>>1038244
Ну блять динамический сделай тогда, это еще три строки.
#340 #1038251
>>1038249
Ну и нахуя такая монстроузная конструкция? Тогда проще уж сделать рекурсию с каллбэком, раз и навсегда.
#341 #1038255
>>1038235
Ты какой-то хуевый байтоеб, если тебя заменили студентом.
#342 #1038256
>>1038251

> Ну и нахуя такая монстроузная конструкция


Это мне надо без стека? Я-то откуда знаю? Видимо, чтобы не ограничивать уровень вложенности. Алсо, не вижу ничего монструозного в нормально написанном обходе дерева, если это не лаба1, а что-то применимое на практике.

>>1038245
Не совсем понятно, что именно ты там считаешь. Если тебе reduce нужен - делай reduce с колбеком, это нормально. Если функция считает какую-то конкретную вещь, тогда нахуя ей эта твоя вариативность?
#343 #1038258
>>1038256
Просто мне лень плодить функции, а при рекурсии придётся.
#344 #1038270
>>1038256
func1 - обычная математическая функция (правая часть диффура второго порядка).
func2 - численный метод решения диффура.

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

Смотрел код начальника. У него кругом указатели, препроцессорные директивы и функции именно второго варианта (то есть функция что-то делает с какой-то переменной, переданной по указателю, а выход unt просто говорит о корректности работы функции или о коде ошибки).
#345 #1039209
Никак не пойму. Как выделить структуру определенного размера? Например, под 512 байт. До этого создавал структуры и описывал в ней переменные, где по типам было понятно, сколько они займут места. Но сейчас мне надо выделить просто большую область для использовании в функции fread. Как это можно сделать?
#346 #1039234
>>1039209
Это называется массив. char buffer[512] (ну или uint8_t buffer[512] - дело вкуса).
#347 #1039235
>>1039209
uint8_t* buffer = new uint8_t[512];
sage #348 #1039239
>>1039235

> new


Туда ли ты зашел?
#349 #1039258
>>1039234

Действительно. Спасибо тебе, анон.
#350 #1040600
Оказывается с графом на связанных списках вершин и рёбер работать намного удобнее, чем с корявым деревом. Как же охуенно стало!
который-спрашивал-про-траверсинг
#351 #1040866
Хочу быть богом си, че делать
#352 #1040874
>>1040866
сосать матчасть
#353 #1040930
>>1040866
Завтра ищешь в интернете книжку K&R The C Programming Language. Похуй если ничего не поймешь. Затем идешь на cplusplus.com и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию сишного кода - ANSI C, чтобы от зубов отскакивало. Когда напишешь свое первое ядро, по пути изучив ассемблер, покупаешь и изучаешь любой микроконтроллер, рекомендую TMS570. Как переделаешь ядро, чтобы было по крайней мере не монолитным, можешь идти дальше - тебя ждет увлекательный мир байтоебства. Byte stuffing, сверхбыстрые O(1) алгоритмы, экономия тактов процессора. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь собирать бинарники с такими флагами оптимизации, что любая баба будет течь при одном упоминании твоего тулчейна.
#355 #1040980
>>1040930
В оригинале было примерно так: и уже через пол года ты будешь мыться так редко, что любая баба будет прикрывать нос от твоего запаха.
#356 #1040981
>>1040980

> к тебе будут приближаться бабы

#357 #1040983
>>1040930
Как в Си можно экономить такты процессора?
#358 #1040984
>>1040983
Писать оптимизированный код, лол!
#359 #1040985
>>1040983
_exit/_Exit
#360 #1041180
>>1040983
Профайлером.
#361 #1041815
>>1019934 (OP)
сап программач, дайте инфы для проекта нуфагу как работать с файлами и директориями в шиндовс, ну типа удалять создавать папки с реестром взаимодействовать
#363 #1041826
>>1041818
двачаю ток это для какой-то библиотеки типо #include windows.h?
#364 #1041827
>>1041826

> #include windows.h


Для подключения ведра винды. В C/C++ нет стандартных функций для работы с файловыми системами. А что такое реестр они вообще не в курсе.
#365 #1041896
Анончики, помогите советом. Выбрал C, из-за высокого уровня возможности оптимизации. Планирую в дальнейшем под конкретное железо писать либы под нейросети.
Правильный ли выбор языка я сделал?
Используют ли вообще C для нейросетей?
#366 #1041897
>>1041896
L I S P
I
S
P
#367 #1041900
>>1041897

>L I S P


Можно чуть подробнее? Сколь востребован в нынешних реалиях в Рахе? Сколь востребован за бугром? Жив/Мёртв? Подходит ли для современных нейросетей? Есть на данный момент какие фатальные недостатки синтаксиса?
#368 #1041902
>>1041900
Востребован как и нейросети, т.е. мёртв.
За бугром используется для рекламы топовых железяк и ВЫСОКИХ технологий и выкачивания денег на самоуправляемое дерьмо.
У нас денех не хватает на такое.
Если быть серьёзным, у меня, как видишь, довольно мрачное представление об этом, но ты и вопрос задаёшь такой, что правильно хрен ответишь.
#369 #1041905
>>1041902

> используется


используются*
я про нейросети говорил, а не про язык, в этом посте
#370 #1041906
>>1041902
Под нейросетями я имел ввиду и современные deep learning, которые по сути те же яйца - вид сбоку.
#371 #1041908
>>1041906
Энивэй, это не вглядит, как что-то сишное.
#372 #1041922
>>1041896
С используют для всего.
#373 #1042480
>>1038245
>>1038256
Я только вчера понял, как сделать это симпатично.
Просто писать указатель на функцию вида int(type1 param1, type2 param2, ..., typen paramn, void params). В void пихать всё говно.
И для реальных функций, использующих много разных переменных, писать что-то уровня обертки, которая будет запихивать факультативную часть переменных в params.

Вангую, такому дерьму учат на первом курсе шараги. И как меня на работу взяли с такими знаниями?
#374 #1042482
>>1042480
void две звездочки.
#376 #1042522
>>1042483
Это не подошло бы. Функции (значительная часть из которых написаны давно и их нельзя изменять) вовсе не обязаны иметь схожую сигнатуру и отличаться лишь последними факультативными параметрами.
#377 #1042527
>>1042522

> Просто писать указатель на функцию вида int(type1 param1, type2 param2, ..., typen paramn, void params). В void пихать всё говно.


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


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


Таблетки принял?
#378 #1042536
>>1042527
Есть обязательные параметры:
double x
double t
int size.
Есть всё остальное.
Нужно, написать функцию, которая получает на вход функцию с вышеназванными параметрами и чем-то еще. То есть любая из следующих функций должна пройти:
int f(double
x, double t, int size)
int f(double t, double x, int size)
int f(int size, double t, double
x)
int f(int size, type1 param1, double t, double x)
int f(type1 param1, int size, type2 param2, double t, double
x)
И так далее.
Это можно написать с помощью функций с переменным числом параметров?
#380 #1042549
>>1038245
В первом случае ты никогда не узнаешь, завершилась ли функция с ошибкой, а это первое, что хочется проверить после вызова, а результат уже дело десятое.

>>1042536
Ты, конечно, можешь передать любую из этих функций воид-поинтером, но как ты собрался их потом вызывать?
#381 #1042556
>>1042549
Для этого приходится оборачивать функции. Вот пример: https://pastebin.com/89YB94Bx
#382 #1042558
>>1042556
Ну и что мешает сделать тип

typedef int ((зв)wrapper_t) (double date0, double (зв)initial_data, double (зв)result, int size, ...);

и функции к нему:

int EIH_wrapper(double date0, double initial_data, double result, int size, ...)
{}
#383 #1042561
Насколько легко/сложно будет учить C++ после Си, и с чего стоит начать?
#385 #1042570
>>1042563
Зачем использовать архейскую книгу со старыми стандартами?
#386 #1042571
>>1042570

>новичок


>современные стандарты


Современные стандарты нигде не используются. Единственная реальное приложение - это Qt. Книга учит писать идиоматический код на С++
#387 #1042574
>>1042571
Еще плюс книги - она не большего объема и без воды. А то понимаешь ли, любят они читать толстые учебники вместо писания кода.
#388 #1042576
>>1042574

>не большего


небольшего
#389 #1042582
>>1042571

>Современные стандарты нигде не используются


Охлол. У меня на обоих работах C11, и мои проекты C11, и опенсорс выбираю, который не застрял на C89.
#390 #1042583
>>1042571
>>1042574
>>1042576
Все равно придется читать про современные стандарты, вон уже 20 стандарт скоро выкатят.
#391 #1042584
>>1042582
На чем вы компилируете? Даже gcc не поддерживает полностью С11.
И кем ты работаешь?
#392 #1042617
>>1042583
И кому он нужен? 99% до сих пор на С99 сидят, им норм.
#393 #1042626
>>1042563
Спасибо!

То есть, рекомендуете все же быть в курсе новых стандартов, а работать по старым?
#394 #1042651
>>1042584

> gcc не поддерживает полностью


И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.

> И кем ты работаешь?


Говнокодером же.
#395 #1042665
>>1042651

> И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.


А что умеет 11 из того, чего люто не хватало на 99? Без этого невозможно было жить?
#396 #1042677
>>1042651

>И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.


Ну ладно, умеет во все, но threads.h есть только в васянских библиотеках.
#397 #1042682
>>1042665
Не хватало static_assert без извращений с массивами отрицательной длины - костылем менеьше, атомики - огромной кучей костылей стало меньше, кроссплатформенный _Thread_local.

> Без этого невозможно было жить?


Жить можно было и без этого. Но тот факт, что язык и компилятор официально знают о существовании тредов (вне зависимости от наличия threads.h), он очень радует.
#398 #1042702
А когда в glibc добавят threads.h ?
#399 #1042971
>>1041826
Там в каждой странице описания каждой сущности написано, какой заголовок и какую либу надо подключать.
#400 #1044616
>>1019934 (OP)

> Что читать:


>- ООП, например...


Но ведь полноценного ООП на Си нет
#401 #1044618
>>1044616
Проконсультируйтесь с предыдущими тредами на предмет срача о том, считать ли структурное программирование ООП или нет.
#402 #1044619
>>1044618
Структура != объект
#403 #1044627
>>1044618
На первом курсе что-то говорили о наследовании, инкапсуляции и полиморфизме.

Инкапсулировать можно статиком. А наследовать и полиморфить как?
#404 #1044632
>>1044627
Будет считаться наследованием, если создавать структуру потомка просто копируя поля родительской + добавляя свои?
#405 #1044634
>>1044627
есть целая толстая книжка как делать ооп на сях )
но тебе это не нужно
#406 #1044643
>>1044632
>>1044634
>>1044627
>>1044618
>>1044616
Если нужно ООП, то лучше использовать С++ как Си с классами, чем пердолиться с чистым си
#407 #1044691
>>1044643
Далеко не всегда есть чисто техническая возможность использовать кресты.
#408 #1044692
>>1044632
Нужно еще и скопировать все функции с псевдородителем и переделать их для потомка.
Уебанство какое-то получится.
#409 #1046593
>>1019934 (OP)
Как с кириллицей работать в C?
Вот достал кириллическую строку char *string из argv и дальше ее нужно сделать uppercase и какой функцией это проделать?
toupper(ch) - игнорирует кириллицу
Ебатся теперь с wchar_t?
#410 #1046601
>>1046593
Да.towouuper. и сначала придётся переводить из utf-8 (mbtowc). И устанавливать локаль. Либо пользоваться icu/iconv
#411 #1046603
>>1044632
Виртуальные методы придумай как реализовать, т.е., эмулируй vtable
#412 #1049614
Аноны, что я делаю не так (должно сохранять и выводить 10 чисел) :

#include <stdio.h>
#define N 9

int main (void){
int i;
int m[N];
for (i=0;i<=N;i++)
scanf ("%d",&m);
for (i=0;i<=N;i++)
printf ("%-2d",m);
return 0;
}

Результат работы:
1 2 3 4 5 6 7 8 9 10 (ввожу)
1 2 3 4 5 6 7 8 9 9 (получаю)
#413 #1049615
>>1049614
Что-то не все скопировалось:

#include <stdio.h>
#define N 9

int main (void){
int i;
int m[N];
for (i=0;i<=N;i++)
scanf ("%d",&m);
for (i=0;i<=N;i++)
printf ("%-2d",m);
return 0;
}
#414 #1049618
>>1049614
Классическая ошибка на 1. Размер массива - 9, чисел ты вводишь 10 (у тебя диапазон включает и 0, и 9). Ты выходишь за пределы массива, и последняя девятка в выхлопе, видимо - значение переменной i или просто какая-то временная переменная.
#415 #1050322
кто нибудь обьяснит как это работает
sage #417 #1050351
>>1050323
Что "это"?
#418 #1050423
Programming in C Дейтейлов это хорошая книга на первый раз?
#419 #1050453
>>1050323
У тебя llvm есть же, куда ещё мингв.
#420 #1050545
Аноны, читал K&R, дропнул на средине т.к. мне подогнали бумажного Стивена Прата, которогоя только что дочитал. Есть ли смысл продолжать K&R? Заранее благодарю.
#421 #1050564
>>1050545

> K&R


параша
#422 #1050615
Нужно работать с питуном через C api, сишечка на уровне laba3, можно просто начинать все сначала учить или из-за специфики задачи часть можно опустить?
#423 #1050833
>>1050615
Ну нам-то откуда знать, что именно ты там делаешь, и насколько глубокие знания тебе понадобится. В части взаимодействия с питоном все просто, и примеров овердохуя, но ведь тебе еще и что-то полезное нужно делать?
#424 #1050844
>>1050615

> Нужно работать с питуном через C api


Что-то удивительное. Я понимаю нужду в работе с си через петухон, петухон обеспечивает пользователеджружелюбность, си - скорость. Получается быстро и удобно.
Но если поменять их местами, как хочет антоша, разве не получится медленная и сложная в написании программа?
#425 #1050849
>>1050844
Посмотри на блендер или саблайм - если написать ядро на C или C++ и скриптовать плагины для него питоном, получается весьма годно.
#426 #1050933
>>1050849
Я почему-то решил, что анон выше хотел сделать наоборот. То есть ядро на питоне, остальное на си.
Так (ну, почти так) и в моем говнонии делают: пишут библиотечки на си, вставляют в питон и потом тестируют, рисуют графенчики и прочее.

Но зачем для этого "Учить все сначала или часть опустить"? Вроде достаточно узнать одно слово на C и один пакет для питона.
#427 #1050934
>>1050933
Или в промышленном погроммировании сложнее? Черт его знает, никогда им не занимался.
Свалю, пока мне не пояснили, что я долбоеб
47 Кб, 521x500
#428 #1050995
>>1019934 (OP)
Господа, что вы имеете сказать за rust. Капец сям уже не за горами? Вообще стоит его учить/не забывать (если не под встроенные системы пишешь, конечно)?
#430 #1051046
>>1050995

>Капец


хохол?
#431 #1051129
>>1050995

> Капец сям


> rust


try harder
#432 #1051138
>>1051016
Справедливости ради, скажу, что Rust станет быстрее, когда завезут оптимизации, некоторые невозможны в C из-за системы типов.

Примеры оптимизаций, которые ожидаются:
1. SIMD(конец этого года)
2. https://github.com/rust-lang/rust/issues/31681 это уже от llvm зависит
#433 #1051148
>>1050995
Ну сишке конечно ещё очень долго не капец, но вообще Rust медленно но верно приближается к мейнстриму. И вот чего после Rust делать не хочется, так это прикасаться к C или C++.
sage #434 #1051163
>>1051148
ты и так ни к чему из этого не прикасаешься, только шиллишь на бордах
#435 #1051164
В Rust слишком большие бинарники. На си вирмейкеры в нулевых писали программы размером 800 байт. В расте так можно делать?
#436 #1051170
>>1051164
Можно. Там по умолчанию jemalloc используется, из-за этого хелловорлды жирные, но можно заюзать системный аллокатор.
#437 #1051189
У раста никогда не будут сравнимые с C бинарники, это не является целью языка
#438 #1051299
>>1051164
Так ты приплюсуюй стандартную библиотеку сишную динамически линкованную, которая в системе предустановлена и для любой нехелловолдной программы получится совсем не 800 байт.
#439 #1051301
Говорят, что прежде чем изучать шарпы всякие и джавы, то лучше начать с простого Си. Так ли это? Или это заблуждение?
#440 #1051303
>>1051301
Начни с ассемблера наркоманской выдуманной машины Кнута )
#441 #1051377
>>1051303

>наркоманской выдуманной машины Кнута


есть же специально для петухов от Белоснежки Тюринга
#442 #1051423
>>1051301
Начни с Хаскеля.
#443 #1051492
>>1051163

>только шиллишь на бордах


Пиздюк, поясни батьке значение слова, а то я стар стал для вашего сленга молодёжного.
#444 #1051514
>>1051492
Зазывала ты
#445 #1051588
Котаны, в некоторых вакансиях значится удивительный язык C/C++. Что это значит? Их устроит человек, знающий только натив си?
Имею 3 месяца опыта. После испытательного срока повысили зарплата АЖ НА 5 ТЫЩ. Охуеть теперь, моя зарплата 30450 рублей.
Начал гуглить схожие вакансии (цос), везде написано либо C++, либо C/C++ а еще питон или матлаб, но это для прототипирования. На таком уровне освоить питон и матлаб можно за 3 дня.
#446 #1051624
>>1051588

>На таком уровне освоить питон и матлаб можно за 3 дня


Ошибаешься. Матлаб как язык - унылое говно. Ценность его в тулбоксах (стандартных и сторонних). И вот их грамотно использовать ты не научишься за три дня. А уж тем более не поймешь матана, на котором эти тулбоксы основаны.
#447 #1051628
>>1051588
Это может значить что угодно. Может описание вакансии писла безграмотная тупая пизда HR, которая одно от другого не отличает, а может им таки правда специалист по крестам необходим. Пока не прособеседуешься или еще как-то не провентилируешь вопрос - не поймешь.
#448 #1051662
>>1051624
В питоне в данном случае аналогично. Он нужен только из-за нумпая, скайпая, матплотлиба и еще пары библиотек.
#449 #1051687
>>1049618
Видимо значение переменной i на стеке...
#450 #1051808
Чё про MinGW скажете?
#451 #1051811
>>1051808
А что тебе тут должны сказать?
sage #452 #1052109
>>1051808
Скажем, что работает. Что тебе еще нужно?
#453 #1052307
>>1051811
>>1052109
Какие вы душные ребята тут
#454 #1052346
#455 #1053219
Пацаны, хочу получить общие знания о языке. Поэтому вопрос такой, че читать - книгу которая у ОПа или взять Дейтелов лучше? На самом деле прохожу cs50 и там советуют ту, что у ОПа почитать начальные главы, а в гайде на лурке пишут про Дейтелов. В общем, какую взять? Где примеры лучше? Актуальность?

А еще такой вопрос, куда пропал фак со ссылками на все языки в начале борды? Или я просто с утра нихуя найти не могу?
#456 #1053246
>>1051808
кривая ссанина от васянов, которая выполняет функции компилятора
#457 #1053299
>>1053219

> хочу получить общие знания о языке


Керниган и Ритчи

> Актуальность


Журнал "Птюч". Если верить Пелевину, об актуальностях пишут именно там.
#458 #1053326
Как понять из таких объявлений:

> char strtok(char str, const char delim);


Что char
str требует массив char str[], а не указатель на строку char *str?
4 Кб, 445x29
#459 #1053327
#460 #1053328
>>1053326
строку правильно указывать как const char *str
#461 #1053329
ну тоексть строки - const
а массивы - не const
#462 #1053330
>>1053329
Понял тебя! Это просто условность, или правило языка?
#463 #1053341
>>1053330
Тут скорее правило, чтобы не было неявных ошибок.
Вот например ты передашь строку не как const, а потом захочешь ее изменить. А строки в си неизменяемые, и не каждый компилятор может отследить такую ошибку.
#464 #1053347
>>1053326
Никак. С чего ты взял?
#465 #1053366
>>1053219
K&R однозначно.
#466 #1053553
>>1053219
Я параллельно читаю, шоб пропорционально было. В Дейтейлах по 40 упражнений на главу, что солидно, а K&R легко читается и более информативная и сжатая. Всегда так делаю -- книга, где про всё самое нужное + грузный, аки справочник, учебник с кучей упражнений.
#467 #1053579
>>1053553
Не понял, где ты у Дейтеллов упражнения увидел? Вот в K&R да, есть в конце каждой главы + ещё примеры кода, а вот у Дейтеллов только примеры, да и то не очень.
#468 #1053591
>>1053553

Тоже с нуля начал заниматься? У меня еще вот такая лежит. Не помню где нашел. Просто не хочется 300 страниц читать ради нихуя.

http://index-of.es/Programming/C/Vine,_Michael_-_C_Programming_for_the_Absolute_Beginner_-_2nd_Edition.pdf
#470 #1053764
Пиздец, парни. Пытаюсь писать коротенькие проги в разных IDE и хочу вам сказать, что я за весь день столько говна поел с популярными IDE(VS, Eclipse, NetBeans), что пиздец. Ни в одной нормально не получилось обычный Привет, мир написать. Но тут я установил CodeBlocks и все заработало с первого раза. Почему все так сложно то?
#471 #1053768
>>1053764
Потому что это уже для крутышек. КодБлокс для хеллоувордов самое то, потому что "из коробки". Хотя вкатать какой-нибудь компилятор в какой-нибудь Sublime - дело пяти минут, гугл ит
#472 #1053771
>>1053764
Всегда знал, что IDE-дкловны весь день только тем и занимаются, что едят г-но со своими IDE.
А мог бы поставить vim и просто писать код.
sage #473 #1053772
>>1053764
Если сложно настроить компилятор в IDE, учить Си рановато. И вообще, на время изучения языка IDE желательно выкинуть, писать в любом блокноте с подсветкой синтаксиса (ну или всякие Sublime тоже подойдут), а компилировать исключительно вручную (заодно будет повод Makefileы осилить).
#474 #1053775
>>1053772

>Makefileы осилить


Што там осиливать? Создал Makefile с одной строчкой
CFLAGS=-Wall -Wextra (тут по желанию опции оптимизации/дебаг символы)
и пишешь
make shit
И тебе из shit.c создастся исполняемый файл shit.
sage #475 #1053780
>>1053775
Ты хотел сказать:
CFLAGS=-Wall -Wextra make shit
А вот когда у тебя дерево, да с зависимостями, да с библиотечками, да еще и новые файлы периодически появляются, а ты по-прежнему хочешь олдскульные мейкфайлы, а не cmake, тогда нужно осиливать.
#476 #1053791
>>1053780

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



Если не считать список объектных файлов в дереве, для всего этого достаточно 4-5 строк:

1) CPPFLAGS=-I<инклуды> или $(pkg-config --cflags-only-I <либанеймс>) -MMD -MP
2) CFLAGS=-Wall -Wextra ... $(pkg-config --cflags-only-other <либанеймс>)
3) LDFLAGS=$(pkg-config --libs-only-L --libs-only-other <либанеймс>)
4) LDLIBS=$(pkg-config --libs-only-l <либанеймс>)

all: shit

shit: \
subdir/shit1.o \
subdir/shit2.o \

5) -include $(shell find . -type f -name '*.d')
14 Кб, 644x499
#477 #1053815
>>1053763
Сделал, кстати, задачку 4.26. Уже минут 20 жду, пока он выловит первый 3.14159. До них получилось сравнительно быстро. У меня алгоритм получился такой, что результат для ряда из n требует (n^2 + n)/2 операций т.е. сумма арифметической прогрессии до n с шагом один (пикрелейтед). То есть, порядок роста у алгоритма полиномиальный, потому что он много лишних вычислений при новом j внешнего цикла. Говно, конечно, но мне лень переписать пару строчек, чтобы хранить последнее состояние ряда и я хочу спать.
28 Кб, 1116x454
#478 #1053820
>>1053815
Хотя, мне стало интересно, что там получится, поэтому я тупо убрал верхний цикл, переписал переменные внутреннего под него и таким образом получил линейный порядок роста, посчитав результат за секунду.
А вы говорите, SICP не нужен
Заёбно было эти приближения ручками считать в каком-нибудь V A.D., наверное.
#479 #1053824
>>1053815

> А вы говорите, SICP не нужен


Мы говорим. Потому что никому в голову не придет делать решение, как в твоем предыдущем посте. Это элементарный здравый смысл, для этого даже про О-большое знать не нужно.
#480 #1053825
>>1053820

>А вы говорите, SICP не нужен


Там даже про call-with-current-continuation не рассказывают.
#481 #1053826
>>1053824
Там было ещё задание на вывод таблицы с рядом из одного элемента, двух, трёх, etc. Мне это понадобилось, чтобы отслеживать и выводить изменения переменных для наибольшей детальности, верхний цикл был до 10. Так что ну зря ты так.
#482 #1053923
Анчоусы, минуточку внимания.

У меня есть самописный бутлоадер на асме, в котором же находится обработчка прерывний/исключений потому как их векторы упираются именно во флэш память.
Бутлоадер, помимо своих основных задач, кушает elf-файл по нужному адресу или принимает его по uart, затем парсит, раскидывая сегменты по нужным адресам в ОЗУ, и в конце прыгает в entry_point.

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

ВОПРОС: как сообщить бутлоадеру адреса этих функций обработки прерываний?

Пока что вижу два пути решения:

1) В бутлоадере закрепить фиксированные адреса для этих функций где-нибудь в cram, и в случае прерывания прыгать по ним. Сами же функции объявлять через __attribute__(__section__), а в скрипте линковщика размещать их по тем самым фиксированным адресам.

2) Парсить symtable elf-файла на наличие функций с заданным параметром name. Этот вариант видится мне лучше, ибо загрузчик будет точно знать, есть ли обработчики прерываний или нет. И если нет, можно просто отключит прерывания. И не будет слепого перехода туда, где возможно ничего нет.
Но я замучаюсь парсер писать на асме.
#483 #1054194
>>1053763
Так, кажись я начинаю догонять. У тебя же издание книги старое, там где в конце плюсы рассматриваются? Если я опять не угадал, напиши год и издательство.
#484 #1054216
>>1054194
Угадал.
#485 #1054402
>>1053923

> Но я замучаюсь парсер писать на асме


Кто тебя заставляет писать на асме?

> как сообщить бутлоадеру адреса этих функций обработки прерываний


А цели у загрузчика какие? Загрузить твой собственный образ и только твой? Тогда фиксированные адреса в тему. Чужие бинарники поддерживаются? Можешь сделать по образу и подобию UEFI: передавать в точку входа загружаемого файла аргументом список сервисов загрузчика, в числе которых функция установки кастомной таблицы векторов прерываний.
#486 #1054461
Котаны, нашел программу с таким прототипом:
int func(бла-бла-бла, double date0, double date1, бла-бла).
Мне сказали, что date0 и date1 -- это просто разбиение одного времени на 2 числа для большей точности. И якобы это более-менее стандартная операция.
А как именно разбивают? На целую и дробную части? И для того, чтобы все работало, отдельно арифметику писать?
Если это на самом деле стандартное действие, не подскажете, где про это прочесть?
sage #487 #1054466
>>1054461
Впервые вижу, чтобы разбивали плавающую точку, да и точности в double овердохуя для дат, да и long double завезли. Вот при передаче double на x86-машинах, он как раз разбивается (компилятором, а не вручную!) и передается в качестве двух 32-битных (целых!) значений, т.е., используются два push. А что конкретно происходит в твоей библиотечке, нахуя так сделано, и какой там формат у каждой части, можно узнать, только посмотрев в код. Это никаким местом не стандартная операция.
#488 #1054491
>>1054466
Благодарю. Буду спрашивать у человека, написавшего эту хуету.
#489 #1054640
>>1054402

>Кто тебя заставляет писать на асме?


Хм, в действительности пожалуй никто не заставляет.

>А цели у загрузчика какие? Загрузить твой собственный образ и только твой? Тогда фиксированные адреса в тему. Чужие бинарники поддерживаются?


Да, хотел сделать так, чтобы чужие файлы тоже поддерживались. А теперь даже хуй знает, как лучше сделать. Оставить обработку прерываний и исключений только в бутлоадере. Ведь по идее юзера вообще не должно ебать, как там они обрабатываются.

>Можешь сделать по образу и подобию UEFI: передавать в точку входа загружаемого файла аргументом список сервисов загрузчика, в числе которых функция установки кастомной таблицы векторов прерываний.


Слишком сложна. Но в любом случае спасибо, попробую почитать про принцип работы UEFI.

Мне вообще интересно, как всю эту ёбань с загрузчиками и программами делают нормальные люди. Так как понимаю, что изобретение велосипеда с квадратными колёсами - хреновый и сложный путь.
#490 #1054641
>>1054640
>>1054402
Забыл добавить, что на асме пишу, потому что бутлоадер находится в ридонли области. В итоге для временного хранения данных использую регистры в основном, реже стэк. Но, наверно, в сишечке так тоже можно делать.
#491 #1054756
Привет, котоны. Интересует такой вопрос: можно ли снять дамп памяти во время выполнения программы и извлечь из него значения переменных?
sage #492 #1054982
>>1054756
Можно. gdb/windbg умеют дампы открывать. Тебе под какую ос?
#493 #1055316
>>1054982
Под линукс.
#494 #1055334
>>1055316
Вы здесь будете или в докер завернуть с собой?
#495 #1055376
>>1055334
Не понимаю о чем ты.
В общем, для теста я сделал следующее:
1. Написал простую программу на C
2. Скомпилировал с флагом -g
3. Запустил
4. Снял дамп с помощью gdb -q - <pid>
5. Открыл в gdb core file
Как дальше смотреть содержимое стека я не знаю. Если запускать программу сразу через gdb и ставить брейкпоинты, то через info locals все переменные видны, но как их посмотреть в дампе я без понятия - на команду info locals отладчик говорит что таблица символов не загружена.
#496 #1055429
>>1019934 (OP)
О, шикарно мой тред!
Учусь по книжке Брайана и Ритчи(англ версию, русские сосут хуй), я решил самостоятельно все задачки до той, где нужно подменять несколько пробелов одним. Первую задачку в теме, где нужно вести счёт табов, пробелов и символ новой строки решил сразу же, вторая пошла по пизде, сидел писал разные типы псевдокода, пытался спагетти-кодом придумать что-то, но в итоге залез в стэк и увидел решение, от которого у меня загорела жепа, однако у меня голова уже не соображала, поэтому думаю тут тупость простительна. Ничего страшного в том, что не можешь решить какую то задачку? Как поступать в таком положений? Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?
Алсо, что стоит знать об GCC? В первый день потратил часы читая вики по компиляции на винду, в итоге залез на вики Линукса и ввел в cmd просто gcc и название программы как было написано и все заработало. Вот хотел спросить, что нужно о GCC знать?
#497 #1055451
>>1055429

> Вот хотел спросить, что нужно о GCC знать?


Ты имеешь в виду ключи?
#498 #1055496
>>1055451
Я блять, искренне извиняюсь, но я имел ввиду компилятор. В первый раз я его, блядь, пытался запустить, нихуя не понял, а ведь это лучший компилятор даже в сравнений с любой IDE, да и как новичок я обязан знать эту базу. Полез в вики читать, а там много всего.
https://sourceforge.net/projects/mingw/?source=navbar
Стоит ли полностью наворачивать вики?
#499 #1055513
>>1055429

>Ничего страшного в том, что не можешь решить какую то задачку?


Ничего страшного.

>Как поступать в таком положений?


Сначала подумать, если все равно не получается, то внимательно изучить решение и попытаться понять его.

>Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?


Можно и так

>Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?


Ставь mingw-w64 и просто компилируй в gcc как на линуксе. Или можешь украсть/купить CLion
#500 #1055527
>>1055496

>лучший компилятор даже в сравнений с любой IDE


Ты не понимаешь чем компилятор отличается от IDE?
#501 #1055528
>>1055513

>попытаться понять его.


Так и сделал.
>>1055513

>Ставь mingw-w64


Я его и поставил лол! Там дают туеву хучу эмуляторов GNU-like терминалов и обычную версию MinGW64 для винды. Я ее установил, но не мог додуматься как пользоваться, в вики каша, а я и так заебанный.
>>1055527
IDE представляет сферу разработки, со встроенным библиотеками, компиляторами и графическим интерфейсом, а комплилятор преобразовывает его язык в низкоуровневый. Если, блядь, я правильно понимаю.
#502 #1055529
>>1055528
О, надо бы еще вики почитать по всей этой хуйне, база же. Алсо либо в силу своих припизднутых глаз, либо это действительно так - Не вижу эту самую базу, которую должен знать погромист. Ну, типа этого
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/Executable
Ребят, кто нибудь знает, где можно почитать про все это?
#503 #1055536
Есть ли хорошие гиды по различиям между С++ и С для плюсовиков?
#504 #1055542
>>1055536
Да, в шапке.
#505 #1055547
>>1055528
Так я понять не могу, что ты хочешь знать про компилятор?
#506 #1055559
>>1055547
Я прошу прощения за ебаное мозгоебство, но меня смущает вот это:
https://sourceforge.net/p/mingw-w64/wiki2/FAQ/
Я должен знать все, что написано здесь? Типа: How do I compile multilib toolchain?
#507 #1055561
>>1055528

>Я ее установил, но не мог додуматься как пользоваться


Добавить в PATH и юзать как обычный gcc из командной строки
#508 #1055565
>>1055559
Мультилиб может и не нужен, но как подключать сторонние либы, хедеры, линковка, флаги компиляции скорее всего должен знать.
#509 #1055581
>>1055561
Спасибо.
>>1055565
Ну я так понял, когда в этом нужда появится.
31 Кб, 317x372
#510 #1055590
>>1055496

>блять


>блядь

ПЕРЕКАТ # OP #511 #1055735
#512 #1055748
>>1019934 (OP)

>ООП, например


А что, в С (не С++) завезли ООП?
#513 #1055751
>>1055748
ООП может быть хоть на асме, но для некоторых ООП == классы.
#514 #1055761
>>1055751
То есть в С классов нет
Так почему в треде C ссылки на книжки по C++?
#515 #1055763
>>1055761
Где ссылки на C++?
#516 #1055772
>>1055763

>ООП

#517 #1055773
>>1055772
Попробуй открыть книгу и прочитать хотя бы название.
#518 #1055782
>>1055773
В ней нет названия.
14 Кб, 415x248
#519 #1055798
>>1055782
Заебал. Это ООП на Си с помощью макросов, магии и извращений. Поэтому книга в шапке.
#520 #1055835
>>1055798
А зачем вторую копию скачивал - она же у тебя уже есть на диске?
90 Кб, 900x600
#521 #1056298
>>1051016
И чего? Сайт этот заставляет всех решать задачу одним и тем же алгоритмом. В реальной жизни такого ограничения нет. И даже в таких условиях почти на всех задачах только чуть-чуть медленнее. Потора-два раза это именно чуть-чуть. Это не в десятки раз. Сейчас чтоб дрочить на порнуху в инете закупают домой пеки эквиваленые по производительности мейнфреймам недавнего прошлого. Купить больше или более дорогое железо для кода на rust дешевле и проще, чем писать, отлаживать и сопровождать "крестовый" код. Мало кому в не-embedded мире действительно критически необходим каждый процент производительности.
90 Кб, 900x600
#522 #1056299
>>1051016
И чего? Сайт этот заставляет всех решать задачу одним и тем же алгоритмом. В реальной жизни такого ограничения нет. И даже в таких условиях почти на всех задачах только чуть-чуть медленнее. Потора-два раза это именно чуть-чуть. Это не в десятки раз. Сейчас чтоб дрочить на порнуху в инете закупают домой пеки эквиваленые по производительности мейнфреймам недавнего прошлого. Купить больше или более дорогое железо для кода на rust дешевле и проще, чем писать, отлаживать и сопровождать "крестовый" код. Мало кому в не-embedded мире действительно критически необходим каждый процент производительности.
#523 #1056822
Парни, а чего в VS теперь на C писать нельзя? Или чего не так с ней? Кст кто-то может ссылку дать на Кочана на английском 3е издание или 4е, если есть. Чет в гугле найти не могу живых ссылок. Только на русском.
#524 #1056832
Как вообще пользоваться ебучим терминалом? Я так понимаю его придумали просто, чтобы программы запускать и все? Там же ничего написать нельзя?
#525 #1056889
>>1056822
Можно. Создай новый Win32-проект, добавь C++ файл с расширением .c. Если книжку не найдешь - читай Прату.

>>1056832
Да, терминал нужен, чтобы запускать программы. Писать код удобнее в текстовом редакторе, но если ты упорствуешь, загугли всякие ed/vi/vim, edlin и edit в винде есть опять же.
#526 #1057017
>>1056889
Допустим я поставил терминал и в книжке, которую я читаю пишут, что надо выполнить программу. Я выполняю и терминал пишет, что не может ее найти. Это значит, что бинарника нет в PATH, который я указал, так? У меня стоит cygwin. В нем же ниче не написать?
#527 #1057048
>>1057017
Перекат: >>1055733 (OP)
#528 #1057139
>>1057017
А зачем тебе cygwin вообще? Это мерзкие костыли, с которыми можно смириться лишь заради компиляции некоторых программ, завязанных на POSIX. Если тебе никсовое окружение нужно - возьми MSYS или лучше MSYS2. Если тебе компилировать - поставь отдельно mingw или clang+mingw.
#529 #1058503
>>1029086
Гугли RTTI и как его отключить.
#530 #1058737
>>1058503
Умный самый? RTTI я отключал. Мало того, я пытался компилировать .c-файлы, в которых RTTI не может быть по определению - результат тот же. Мало того, RTTI не имеет никакого отношения к отладочной директории, RTTI хранится в секции данных, рядом с таблицами виртуальных функций. Мало того, со включенным RTTI в предыдущих версиях VS отладочной директории в бинарнике нет. Такие дела.
#531 #1059257
Как бороться с лимитом на размер чисел?
Простой пример
1/243 = 0.0041152263374485596…

long double a = 1.0/243.0;
printf("%.24Lf\n", a);
Результат:
0.004115226337448560020582…
Складывается впечатление, что 855 округляется до 856, а дальше сплошной рандом идет
#532 #1059288
>>1059257

> long double


> 1.0 / 243.0


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

Алсо, у нас >>1055733 (OP) НОВЫЙ ТРЕД ДАВНО.
Тред утонул или удален.
Это копия, сохраненная 22 сентября 2017 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски