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


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

Check this out!


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 531 | 28 | 218
Назад Вниз Каталог Обновить

C Programming Language #23 Аноним # OP  09/07/17 Вск 22:27:06  1019934  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь 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/%7Eats/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
Аноним 09/07/17 Вск 22:32:49  1019944
Первохуй.
Аноним 10/07/17 Пнд 01:29:50  1020056
>>1019702
> Зачем нужны указатели на указатели и даже о, ужас, указатели на указатели на указатели и дальше по глубине?
Тройные используются редко, обычно на этом этапе уже появляются дополнительные данные, и возникают мысли о структурках. А двойные очень часто нужны. Допустим, есть у нас текстовый буфер, и мы его парсим. Можно передавать стейт (в структурке), но это часто избыточно, поэтому функции дают указатель на текущую позицию в буфере. Но как узнать, сколько данных обработала функция? Можно вернуть новый указатель. Но если нужно вернуть что-то еще, то разумно передавать указатель на указатель на текущую позицию, и обновлять его содержимое перед возвратом из функции. Или, например, при манипуляциях связанным списком может понадобиться вставить узел в самое начало - можно возвращать новое начало списка, а можно передавать указатель на переменную, которая хранит начало списка и модифицировать его.
Аноним 10/07/17 Пнд 14:19:03  1020357
А тип памяти register это пережиток прошлого, так же как и кнопочка Turbo на системниках?
Аноним 10/07/17 Пнд 15:49:13  1020421
Как программировать на Си без использования оперативной памяти?
Аноним 10/07/17 Пнд 15:51:47  1020424
>>1020421
куришь дескрипторы и работу с файлами. Своп юзаешь вместо оперативы, но код так или иначе будет храниться в оперативке: загружаться и выгружаться в неё. Хотя при должном скиле, можно вообще свести использование оперативы к минимуму.
Аноним 10/07/17 Пнд 17:19:10  1020514
>>1020424
Я больше о регистрах и процессорном кеше.
Аноним 10/07/17 Пнд 17:44:19  1020535
>>1020357
С register получается такая же автоматическая переменная, как и другие. Это не "тип памяти", это просто хинт компилятору плюс ограничения на использование. Но на этот хинт большинство компиляторов не обращают никакого внимания.

>>1020421
Никак. Единственное, что стоит сделать, выполняясь из кэша - инициализировать DRAM. И делают это обычно на ассемблере.
Аноним 10/07/17 Пнд 19:27:21  1020646
>>1019934 (OP)
Ананасы, как думаете, что лучше делать с зомби процессами в POSIX?
Мне нужно запустить процесс, подождать пока он завершится, получить код выхода. Ждать долго нельзя, есть максимальный таймаут. Если таймаут прошел (очень редкий, но возможный случай), нужно ругнуться. И дальше 2 варианта: 1) забить на процесс, и он будет себе болтаться как зомби когда все-таки завершится 2) принудительно SIGKILL-нуть и тут же вызвать waitpid (надежно, но больно если процесс таки собирался выполнить своё дело).
В общем вопрос: приемлемо ли оставлять зомби или нужно обязательно их избегать?
Аноним 10/07/17 Пнд 19:32:51  1020648
>>1020535
>Но на этот хинт большинство компиляторов не обращают никакого внимания.
Очень даже обращают если свободные регистры закончились.
Аноним 10/07/17 Пнд 20:19:39  1020693
>>1020648
> Очень даже обращают если свободные регистры закончились.
Ты, видимо, не понял. Современные оптимизирующие компиляторы срать хотели на register (как и на inline, который тоже хинт), они сами решают, как им будет оптимальнее распределить регистры или инлайнить функции. Если переменной пользуются редко, никто ее в регистр не положит, несмотря на register. Справедливости ради, в embedded все не совсем так, и там есть компиляторы, которые если уж не подчиняются, то хотя бы прислушиваются.
Аноним 10/07/17 Пнд 21:48:44  1020753
Собираюсь использовать Clion + mingw-w64 на винде, какие подводные?
Аноним 10/07/17 Пнд 21:49:05  1020754
>>1019934 (OP)
Собираюсь использовать Clion + mingw-w64 на винде, какие подводные?
Аноним 10/07/17 Пнд 21:49:59  1020756
>>1020754
Зачем ебать вола?
Аноним 10/07/17 Пнд 21:50:22  1020757
>>1020693
не пользовал register, но инлайнил активно с arm-none-eabi-gcc, ну так там прост ключиков полно для управления процессом, в т.ч. "инлайнить все что с атрибутом inline" (по умолчанию отключено)
Аноним 10/07/17 Пнд 21:53:19  1020760
>>1020756
А что тут такого?
Аноним 10/07/17 Пнд 21:55:43  1020763
>>1020760
Да ничего, просто у тебя наверняка не соберется какой-нибудь ncurses и ты часами будешь сидеть и чинить это говно.

Не проще накатить линукс виртуалкой или дуалбутом?
Аноним 10/07/17 Пнд 21:58:15  1020765
>>1020763
>не соберется какой-нибудь ncurses
Почему не соберется?
Аноним 10/07/17 Пнд 21:58:24  1020766
>>1020763
Проще сразу пересесть или хотябы чрутом.
Аноним 10/07/17 Пнд 21:58:51  1020767
>>1020765
Потому-что на венде гцц это порт.
Аноним 10/07/17 Пнд 22:02:45  1020774
>>1020767
>на венде гцц это порт
Поэтому ncurses не соберется?
Аноним 10/07/17 Пнд 22:05:26  1020779
>>1020774
Ну порт он бывает баганным (коим и является). Есть некоторая вероятность, что не соберётся приложение.
Аноним 10/07/17 Пнд 22:12:53  1020791
>>1020779
Ну а MSVC не поддерживает C99 и C11, а также не полностью поддерживает C++98 (sic!), про это анон писал в прошлом крестотреде.
Аноним 10/07/17 Пнд 22:15:27  1020797
>>1020791
Проиграл. А что на этот счёт говорят некрософт?
Аноним 10/07/17 Пнд 22:22:05  1020809
>>1020779
давно mingw щупал? там сейчас все охуенно, по крайней мере я из-под линукса весьма большие и разнообразные ехе-шники собираю, никаких проблеи
Аноним 10/07/17 Пнд 22:23:22  1020811
>>1020809
ну хз. Обычно порты убогие.
Аноним 10/07/17 Пнд 22:25:56  1020815
>>1020797
Пишут, что стараются реализовывать стандарт как можно быстрее.
Но стандарты С99 и С11 реализовывать не стали вообще.
С++11 они смогли полностью реализовать спустя 5 лет после выхода этого стандарта, С++14 реализован еще не полностью, С++17, видимо, ждет участь С++11.
Аноним 10/07/17 Пнд 22:27:58  1020817
>>1020811
>Обычно порты убогие.
Там хотя бы заявлена реализация стандарта и она действительно есть.
Можно, конечно, пользоваться msvc в котором не осилили до сих пор С++98, зато не порт, да.
Аноним 10/07/17 Пнд 23:53:07  1020881
>>1019934 (OP)
cап, кто нибудь сейчас пишет вирусы на си?
Аноним 11/07/17 Втр 00:07:14  1020892
>>1020791
ни разу не видел c11 ни в продакшне, ни в опенсурсе
Аноним 11/07/17 Втр 00:09:54  1020893
>>1020881
нет, их пишут на джаваскрипте и бейсике
Аноним 11/07/17 Втр 00:12:21  1020897
>>1020893
на жс вроде страницы веб делают?
Аноним 11/07/17 Втр 00:37:09  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 как?
Аноним 11/07/17 Втр 02:29:42  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 кодируются все символы юникода, просто не всегда в один.
Аноним 11/07/17 Втр 02:32:17  1020967
>>1020965
Сходил посмотрел. В стандарте в 6.4.4.4 черным по белом написано implementation defined, т.е., компилятор имеет полное право использовать суррогатные пары и хранить их в нескольких wchar_t.
Аноним 11/07/17 Втр 02:53:48  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
По стандарту — нет.
Аноним 11/07/17 Втр 03:36:26  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 вполне достаточно в большинстве случаев. Но это так, к слову.
Аноним 11/07/17 Втр 03:55:33  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 со стандартом в этом пункте.
Аноним 11/07/17 Втр 05:15:27  1020994
Чёт я задумался. Стоит ли продолжать метать бисер?
Аноним 11/07/17 Втр 05:42:20  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 (обещают последние пару лет).
Аноним 11/07/17 Втр 06:06:43  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-окружении, то он удовлетворяет. Если нет — нет.

> убедились, что студия нинужна
Я такого не говорил. Вообще я не собираюсь кого-то убеждать или разубеждать. Я тут просто привёл ещё один примерчик несоответствия стандарту. Вряд ли кому-то это помешает пользоваться студией.
Аноним 11/07/17 Втр 11:22:01  1021075
>>1019934 (OP)
Поясните по хардкору, почему символ указателя "*" лепят то к спецификатору типа, то к названию переменной или функции? Это дебильные художества за которые надо в руки насрать, или это классика, это знать надо разные вещи?
Аноним 11/07/17 Втр 11:38:47  1021080
>>1021075
>Это дебильные художества
This.
Аноним 11/07/17 Втр 12:04:15  1021086
>>1020965
> Если ncurses не соберется - виноват ncurses
Солипсизм уровня windows
Аноним 11/07/17 Втр 12:23:14  1021094
>>1020921
>НИКОГДА!!!!!! НИКОГДА, БЛЯДЬ!!!!!! СЛЫШИТЕ? ПОТОМУ ЧТО ЭТО СРАЗУ ОТПРАВИТ НАХУЙ НА ПОМОЙКУ ВСЕ КВАДРИЛЛИОНЫ СТРОК КОДА ПОД СПЕРМУ, В КОТОРОМ ЭТОТ WCHAR_T ИСПОЛЬЗУЕТСЯ ВОВСЮ
>Этот самоподрыв пидорахи
Аноним 11/07/17 Втр 15:38:57  1021249
>>1021075
> или это классика, это знать надо разные вещи?
Haдо лепить их исключительно к имени переменной, потому что оно так работает.
Аноним 11/07/17 Втр 15:40:00  1021250
>>1020991
Хуесосы, кроме ASCII ничего не нужно.
Аноним 11/07/17 Втр 16:21:38  1021289
>>1021094
>хрю-хрю-хрю
Что, простите?
Аноним 11/07/17 Втр 16:31:34  1021303
Сначала вкатиться в си, а потом в кресты, или наоборот?
Аноним 11/07/17 Втр 17:14:24  1021350
>>1021303
Сначала в си, а потом во что угодно, но не в ц++
Аноним 11/07/17 Втр 17:24:17  1021353
>>1021350
Почему? Во многих вакансиях требуют знание как С, так и С++.
Аноним 11/07/17 Втр 18:17:20  1021387
>>1021353
если для работы, то можно.
Аноним 11/07/17 Втр 19:43:45  1021446
Блин, смотрю на книги и не понимаю с чего начать:
Параллельное программирование с использованием OpenMP;
Advanced Programming in the UNIX Environment
Advanced Bash Scripting Guide, но это же тоже надо для UNIX'а
Не понимаю, с чего начать. APUE даст знания по целевой ОС, OpenMP даст знания по многопокпоку, на который дрочу.
В самой книге по OpenMP про UNIX'ы ничего нет, там какие-то мокрые письки в качестве компиляторов рассматриваются, благо руководства по GCC и OpenMP можно найти в интернете.
С чего бы ты начал, анон? С понимания ОС или конкретного стандарта языка?
Аноним 11/07/17 Втр 19:59:15  1021462
>>1021446
да
Аноним 11/07/17 Втр 20:00:12  1021465
>>1021462
Но почему?
Аноним 11/07/17 Втр 22:39:21  1021627
>>1021446
>
>В самой книге по OpenMP про UNIX'ы н
Смотри со своими многопотоками не обосрись. Большинство задач быстрее выполнятся в одном потоке. Многопоток это огромный оверхед на создание потоков, имеет смысл только если без этого программа заметно быстрее.
Аноним 11/07/17 Втр 22:40:30  1021628
>>1021627
В любых программах для научных вычислений актуально, любителям синглтхреада пора руки ломать, имхо
Аноним 11/07/17 Втр 22:42:49  1021633
>>1021627
Хотя, может, ты и прав.
Просто почитать APUE, там посмотреть про межпроцессные взаимодействия и pthreads заодно.
Аноним 11/07/17 Втр 23:05:12  1021644
>>1021628
Если что-то вроде физики, рендеринга, нейроночек то разумеется это многопоточные вычисления по своей природе.
Но можно говна наделать когда пытаешься сделать простые вещи паралельными, потому что по природе они последовательны.
Аноним 12/07/17 Срд 01:39:51  1021698
>>1021086
#include <conio.h>
@
НИСОБИРАЕТСЯ ПОД ЛИНУКСОМ
@
ВИНОВАТ КОМПИЛЯТОР

>>1021627
> Многопоток это огромный оверхед на создание потоков
Именно поэтому при нормальных многопоточных вычислениях потоки чаще всего создаются однажды, кладутся в пул и выполняют задачи, ну ты пони. Или если много IO, то создаются однажды и выполняют каждый свою задачу (или не выполняют, ожидая этого самого IO).
Аноним 12/07/17 Срд 07:37:53  1021729
>>1021698
>#include <conio.h>
>@
>НИСОБИРАЕТСЯ ПОД ЛИНУКСОМ
>@
>ВИНОВАТ КОМПИЛЯТОР

естественно. компилятор visual studio может собрать conio.h, а vim не может.
Аноним 12/07/17 Срд 10:18:55  1021776
Правильно ли я понимаю, что на Си мне лучше писать что-то низкоуровневое (работа с периферией, памятью, быстрая числодробилка), а основной код лучше реализовывать через вызовы Си библиотек в более высокоуровневых языках?
Аноним 12/07/17 Срд 10:21:40  1021778
>1021075
>Haдо лепить их исключительно к имени переменной, потому что оно так работает.

Если только это не приведение типов
Аноним 12/07/17 Срд 10:41:39  1021785
>>1021776
Первое - да. Второе - не лучшая идея. В высокоуровневых языках уже есть аналоги всех функций.
Аноним 12/07/17 Срд 11:05:42  1021794
>>1019934 (OP)
Анонасы помогите новичку, есть куча-же книг по программированию и видео курсы. Подскажите, где рассказывается как юзать не стандартные библиотеки API в программах? Например всякие arpa/inet.h winsock.h sys/socket.h sasl.h
Аноним 12/07/17 Срд 11:25:04  1021800
>>1021794
man
Аноним 12/07/17 Срд 11:54:44  1021812
>>1021794
>winsock.h
>видео курсы
>c
Пошел нахуй
Аноним 12/07/17 Срд 12:02:03  1021817
winsock победный носок
Аноним 12/07/17 Срд 19:28:33  1022064
Хуль указателей нет в том же джаваскрипте?
Аноним 12/07/17 Срд 19:31:59  1022065
>>1022064
Потому-что ц для низкоуровневых програм, а жс для анимаций кнопок.
Аноним 12/07/17 Срд 20:13:41  1022082
>>1022064
Они есть.
Аноним 12/07/17 Срд 20:17:40  1022083
>>1022064
В жс есть ссылки, то есть те же указатели, только всегда гарантированно валидные (или не валидные, и тогда это серьезный баг в движке JS, за который можно срубить бабла).
Аноним 12/07/17 Срд 23:04:17  1022188
Обнаружил, что в С99 были массивы переменной длины, которые в С11 зачем-то убрали?
Как на них можно взглянуть?
Аноним 12/07/17 Срд 23:08:43  1022189
И да, почему в литературе почти нигде не упоминается про стандарт С95? Хоть он и был расширением к основному в то время стандарту - С89/С90, почему он не заслуживает упоминания?
Аноним 12/07/17 Срд 23:35:11  1022205
>>1022188
> взглянуть
-std=c99 ?
А убрали, потому что говно, грозящее переполнением стека и сегфолтами на ровном месте, ну и потому что не приняли в крестах.

>>1022189
Так дополнение же. Никаких киллер-фич по сравнению с C99/11 нет, синтаксис вообще не затронут, только мелкие уточнения и wchar.
Аноним 13/07/17 Чтв 00:50:03  1022254
>>1022205
>Так дополнение же.
C++03, несмотря на то, что он тоже дополнение к C++98, упоминается довольно часто.
Аноним 13/07/17 Чтв 13:51:33  1024062
бамп
Аноним 13/07/17 Чтв 16:27:46  1024175
Как прочитать прату (1000 страниц) и не сойти с ума?
Аноним 13/07/17 Чтв 16:38:44  1024184
>>1022254
03 плюсы это вообще один большой багфикс, а не дополнение даже. Просто этот багфикс в отличие от диграфов и ещё какой-то непонятной хунты оказался кому-то нужен и зашёл.
Аноним 13/07/17 Чтв 16:40:32  1024185
>>1024175
По частям. Хотя если раньше ты никаких книг в руках не держал, то проблему никак кроме как анальной болью не решить.
Если не нюфаг — смотри только то что нужно. Если таки нюфаг — возьми книжку потоньше, благо C небольшой.
Аноним 13/07/17 Чтв 17:32:27  1024210
>>1024185
>По частям.
Вроде как читаешь по частям, а все равно что-нибудь упускаешь.
>возьми книжку потоньше
Какую?
Аноним 13/07/17 Чтв 18:22:12  1024236
>>1024175
> Как прочитать прату (1000 страниц) и не сойти с ума?
Разбить на месяц, а лучше два. Вдумчиво читать каждый день понемногу. Стараться понять суть, логику происходящего, а не тратить время на заучивание правил и кейвордов. Обязательно писать хелловорлды на каждую новую для тебя вещь. Собственно, так со всеми книгами, если тебе нужно разобраться, а не ознакомиться.
Аноним 13/07/17 Чтв 19:48:38  1024307
>>1019934 (OP)
Вопрос треду, на сколько живой С в современных реалиях , учу этот ЯП и дико доставляет , но сейчас появляется куча "модных" ЯП не вытеснят ли они С?
Аноним 13/07/17 Чтв 19:55:30  1024313
>>1024307
>появляется куча "модных" ЯП
Каких? Приведи примеры.
>не вытеснят ли они С?
Си в основном и полностью живет в программировании микроконтроллеров и в системном программировании. Учитывая, что почти весь код написан на Си, то он еще будет жить очень долго, но в специальных местах, как и любой другой язык.
Аноним 13/07/17 Чтв 19:57:40  1024314
>>1024236
Просто когда я читаю, то понимаю, что все это уже знаю (был небольшой опыт на С# и C++) и чтение становится очень нудным.
Аноним 13/07/17 Чтв 20:01:55  1024323
>>1024314
>понимаю, что все это уже знаю
Не делай так больше.
Аноним 13/07/17 Чтв 20:11:29  1024333
>>1024323
Ну вроде как я читаю, но мне это все знакомо.
Просто нудно читать все это пока не дойдешь до последних глав, где будет новый и интересный материал
Аноним 13/07/17 Чтв 20:56:47  1024375
>>1024313
всякие Go Scala
Аноним 13/07/17 Чтв 20:59:05  1024378
>>1024375
На го и scala пишут вебсервисы, причем если го еще компилируемый, то скала работает на джава машине.
А на си программируют драйвера и микроконтроллеры.
Аноним 13/07/17 Чтв 21:11:00  1024389
>>1024378
>на си программируют драйвера и
Спасибо анон , то есть если вкатываться в глубь С и математику , то без работы не останешься?
Аноним 13/07/17 Чтв 21:15:47  1024392
>>1024389
> то без работы не останешься?

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

Да даже обычные программы часто на Си пишут.
Аноним 13/07/17 Чтв 21:16:11  1024393
>>1024392
> ядро Windows
Proofs?
Аноним 13/07/17 Чтв 21:16:42  1024396
>>1024389
>без работы не останешься
Я тебя разочарую.
Если живешь в россии, то как раз таки есть высокий риск остаться без работы, потому что вакансий на С/С++ мало и они в основном в оборонной промышленности.
Если хочешь работу, то иди в жс/пеашпи тред и вкатывайся. Сайты нужны всем и в большом количестве, а микроконтроллеры/драйверы - нет.
Аноним 13/07/17 Чтв 21:17:14  1024398
>>1024392
Только если ты живешь за рубежом.
Аноним 13/07/17 Чтв 21:18:07  1024401
>>1024392
>обычные программы часто на Си пишут
Обычные программы сейчас пишут в ентерпрайзе, где очень популярны джава и сишарп
Аноним 13/07/17 Чтв 21:35:46  1024432
>>1024393

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

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

P.s

Насчет С++

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

согласен не со всеми аргументами но с большинством
Аноним 13/07/17 Чтв 22:07:17  1024475
>>1024396
сайты не интересуют и всем нутром их ненавижу, буду учить и постараюсь стать крутым программистом С
Аноним 13/07/17 Чтв 22:48:39  1024525
>>1019934 (OP)
Чо такое стандартная библиотека си, точнее как она реализована? Можно ли ебашить на си под чистое железо без ничего? Оно в асм чтоле компилируется и всё?
Аноним 13/07/17 Чтв 22:50:24  1024526
>>1024525
> как она реализована
Как хедер.
> Оно в асм чтоле компилируется и всё
С ключом -S у жцц в асм
Аноним 13/07/17 Чтв 22:54:10  1024529
>>1024526
>Как хедер.
Нет. Определения функций в скомпилированных библиотеках, а объявления в хедерах.
Аноним 13/07/17 Чтв 23:20:35  1024552
>>1024307
Даже если все перекатятся на "модные" языки, сишечка все равно - этакий английский от айти. Нужно хотя бы уметь ее читать. Вторым таким языком понемногу становится питон.

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

>>1024525
> Можно ли ебашить на си под чистое железо без ничего?
Можно, но обычно некоторое количество асма все равно нужно (грубо говоря, лоадер, чтобы минимальный набор железа инициализировать, загрузить код с какого-нибудь флеша, инициализировать проц, прерывания, стек и т. д.).
Аноним 14/07/17 Птн 10:55:37  1024757
>>1024552
>этакий английский
английский это скорее плюсы, когда нормальный франко язык был деградирован уебанами
Аноним 14/07/17 Птн 18:21:35  1025010
Как можно реализовать подобие шаблонов в крестах?
Аноним 14/07/17 Птн 19:02:10  1025034
>>1025010
> Как можно реализовать подобие шаблонов в крестах?
Только макросами.
Аноним 14/07/17 Птн 19:06:32  1025036
>>1025034
Где про это можно почитать?
Аноним 14/07/17 Птн 21:22:18  1025130
>>1025036
Делаешь что-нибудь вроде #define TYPE int, инклудишь какой-нибудь foo.с, в котором вместо нужного типа TYPE, после инклуда делаешь #undef TYPE int. Потом можно использовать _Generic для автоматического выбора нужной функции в зависимости от типа. Но лучше так не делай. Если жизненно необходимы шаблоны - используй кресты.
Аноним 14/07/17 Птн 21:22:57  1025131
>>1025130
> #undef TYPE int
Просто #undef TYPE конечно же.
Аноним 14/07/17 Птн 23:08:27  1025216
Какую IDE прикрутить к mingw?
Аноним 15/07/17 Суб 11:15:10  1025344
Когда уже полностью портируют llvm-гомосятину на винду?
Заебался использовать сlang вместе с уебищным mingw или msvc.
Аноним 15/07/17 Суб 11:19:38  1025348
>>1024398
Активных контрибуторов всяких линупс-кернелов и всего похожего заграницей с руками отрывают, на самом деле. Так что вполне себе даже вариант для съеба.
Аноним 15/07/17 Суб 11:21:42  1025349
>>1025344
>Когда уже полностью портируют llvm на гомовинду?
ftfy
Аноним 15/07/17 Суб 12:07:09  1025355
>>1024389
> если вкатываться в глубь С и математику , то без работы не останешься?
В РФ работы мало и она оплачивается хуже, чем какая-нибудь Java.
мимо 7 лет системного программирования
Аноним 15/07/17 Суб 13:13:05  1025368
>>1025355
Вау , расскажи чем занимался что входило в твои обязанности ?
Аноним 15/07/17 Суб 13:25:40  1025376
Пишу PE-загрузчик. Как в этом уебищном языке хранить адреса: как void* или DWORD, чтобы избежать преобразований типов которых на асме не возникло бы?
Аноним 15/07/17 Суб 13:45:46  1025382
>>1025216
Notepad++ + NppExec
Аноним 15/07/17 Суб 14:04:35  1025389
>>1025382
>NppExec
Там дебаггера нет
Аноним 15/07/17 Суб 15:22:32  1025414
>>1025355
да, да
коротко и ясно
только тебя не будут слушать, прямо сейчас дурачки штудируют сишечку и прочую системщину
Аноним 15/07/17 Суб 15:23:20  1025415
>>1025348
nop
(хоть один пример приведи)
Аноним 15/07/17 Суб 21:11:08  1025573
>>1020646
>принудительно SIGKILL-нуть и тут же вызвать waitpid
SIGTERM + waitpid.
SIGTERM должен корректно обработаться в дочернем процессе.
Ну либо IPC прикручивай и следи за стейтом.
Аноним 15/07/17 Суб 21:15:43  1025576
>>1024389
>Спасибо анон , то есть если вкатываться в глубь С и математику , то без работы не останешься?
Если middle/senior, то не останешься. Оплачивается тоже ничего, мне 200к в ДС предлагали, например, за матан и C, только не мой профиль там.
Вот нормальное место найти, чтобы до соответствующего левела дорасти - это может быть проблемой.
Аноним 16/07/17 Вск 13:09:10  1025938
Расскажите, как программируют на Си под голое железо?
Вот допустим я хочу вывести хеловорлд на си, но у меня нет ничего, кроме UEFI/BIOS. Что делают в этом случае?
Аноним 16/07/17 Вск 13:14:07  1025941
>>1025938
Накатывают Linux.
Аноним 16/07/17 Вск 15:24:05  1026009
>>1025938
Ну ты берешь и реализуешь стандартную библиотеку. Например, printf с помощью int 0x10 или прямой записью в видеопамять. Или реализуешь какую-нибудь прослойку, на которой реализуешь printf. И так для каждой использованной функции.
Аноним 16/07/17 Вск 16:12:26  1026053
>>1026009
>printf с помощью int 0x10
Это на старых биосах, а на EFI?
>прямая запись в видеопамять
Это надо драйвера писать? Или что надо сделать, чтобы в видеопамять писать и выводить на экран?
Аноним 16/07/17 Вск 19:16:56  1026163
>>1026053
> EFI
Предоставляет соответствующие сервисы. Погугли EFI hello world.

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

> _s
Не используй это говно.
Аноним 16/07/17 Вск 22:13:31  1026246
>>1026245
Через fflush же очищается буфер? Я его для stdin перед вызовом ставлю, результат тот-же.
Аноним 16/07/17 Вск 22:32:01  1026254
>>1026246
fflush(stdin) - undefined behavior. Осознай и живи с этим.
Аноним 16/07/17 Вск 23:44:50  1026278
>>1026254
Ну и нахуй так жить?
Аноним 17/07/17 Пнд 16:52:13  1026535
Есть один даун (я), и я прошу помощи.
Кровь из носу нужно использовать функцию MD6. Нагуглив единственную реализацию, я собрал оригинальную прогу - все пашет. Попытался использовать этот код и заголовки - соснул, пишет undefined reference. Так вот, как бы его заюзать-то?
https://groups.csail.mit.edu/cis/md6/downloads.html
Аноним 17/07/17 Пнд 17:08:09  1026541
>>1026535
Отредактировать функцию main в файле md6sum.c так, как тебе нужно?
Аноним 17/07/17 Пнд 17:10:05  1026542
>>1026541
Несмотря на всю очевидность, я до этого не догадался. Ну ебана. Хотя я не сказал бы, что это будет удобно использовать, но, видимо, придется.
Аноним 17/07/17 Пнд 17:13:55  1026545
>>1026535
> Попытался использовать этот код и заголовки - соснул, пишет undefined reference

Ну очевидно же, что не всё подклчил.
Аноним 17/07/17 Пнд 17:14:51  1026546
>>1026545
Ну, все заголовки, в количестве двух штук я цепанул.
Аноним 17/07/17 Пнд 17:17:00  1026548
>>1026546
А .c файлы в соответствующую директорию перенес?
Аноним 17/07/17 Пнд 17:18:11  1026550
>>1026548
В какую? Все в одной, должно работать. В проект (Code::Blocks) тоже добавил.
Аноним 17/07/17 Пнд 17:19:56  1026553
>>1026550
залей куда-нибудь своё творение, посмотрю
Аноним 17/07/17 Пнд 17:31:29  1026558
>>1019934 (OP)
тест
Аноним 17/07/17 Пнд 17:44:58  1026564
>>1026553
Уже не надо. Вроде как распердолил это дело. Осталось написать нормальную обертку, и будет готово.
Аноним 17/07/17 Пнд 19:51:10  1027346
>>1026564
Заебись. Возникла необходимость собрать это в Студии. А она ругается на повторяюшееся определение, хотя там такого нет и MinGW это съел спокойно. Заебись.
Аноним 17/07/17 Пнд 19:57:29  1027475
>>1027346
Ты блять начнешь уже постить сообщения об ошибках целиком, или ты думаешь, что тут все телепаты?
Аноним 17/07/17 Пнд 20:07:23  1027478
>>1027475
Чем поможет-то, лол?
Аноним 17/07/17 Пнд 20:10:40  1027480
>>1027478
ебать ты даун
Аноним 17/07/17 Пнд 20:11:36  1027481
>>1027480
Это я уже знаю.
Аноним 17/07/17 Пнд 20:15:29  1027485
>>1027478
Дай угадаю, ты определил функцию с именем compression_hook, хотя должен был присвоить указателю compression_hook адрес функции, названной как-нибудь по-другому?
Аноним 17/07/17 Пнд 20:22:43  1027488
>>1027485
Маленькая поправочка - не я, а некий профессор из США. Но что-то такого я там не замечаю. И MinGW это переварил без проблем.
Ну и вот собственно все, что по этому в исходниках и заголовках находится
Аноним 17/07/17 Пнд 20:30:21  1027491
>>1027485
Хотя погоди. У тебя же кресты, а кресты тебе не сишечка, там логика другая. Думал, расширение сменил, и норм будет? Короче, сходи в md6.h, напиши там extern перед compression_hook, и еще само объявление скопируй (без extern) куда-нибудь в начало md6_compress.c, вот тогда соберется.
Если не будет extern, у тебя будет по переменной на каждый файл, куда инклудится .h, если не воткнешь определение без extern в одном из .cpp, тебя спросят, а гиде собственно переменная. В Си же для деклараций глобальных неинициализированных переменных extern подразумевается автоматически, а если инициализация так и не найдется, линкер создаст переменную вместо тебя.
Аноним 17/07/17 Пнд 20:32:55  1027492
>>1027491
Был бы я Брежневым - расцеловал бы. Спасибо огромное.
Аноним 17/07/17 Пнд 20:59:00  1027502
122453252543.PNG (14Кб, 631x438)
Анон, помоги мне, я уже всю голову сломал с этой хренью.
Ну что с этим не так.
Аноним 17/07/17 Пнд 21:03:47  1027505
>>1027502
На выходе должны быть рандомные восьмибитные числа. А у меня стабильно вылазит гордая единица. Уже второй день не могу с этим разобраться.
Аноним 17/07/17 Пнд 21:21:05  1027514
>>1027502
Что-то я нихуя не понимаю, особенно про делай после ретурна.
Но если подумать, то tmp = 10000000 , а потом 7 раз сдвигается в единицу.
Т.е. чтобы было отлично от 1 нужно чтобы if(DO) сработало ещё хотя бы один раз, чтобы оно не значило.
Аноним 17/07/17 Пнд 21:48:04  1027527
>>1027514
DO просто сыпет восьмибитные числа.
На выходе "Data" иногда появляется "1".
Значит что-то проходит (0b00000001 или 0b10000000).
Какого чёрта оно отрубает остальные 7 бит? Вот это я не понимаю.
Аноним 17/07/17 Пнд 21:48:50  1027529
>>1027502
> if (DO) temp |= 0x80;
Если в DO (видимо, выходной порт shift-регистра) не ноль, ты ставишь старший бит числа (или не ставишь: если на выходе регистра ноль, у тебя старший бит тоже будет 0). Потом сдвигаешь число вправо и сдвигаешь регистр вправо. Таким образом, повторив цикл 8 раз, ты пишешь в temp бит за битом содержимое регистра. Почему у тебя получается что-то неожиданное - искать тебе. Смотри схему, смотри, откуда в регистре содержимое.

> delay после return
Не сработает, не нужен. Разве что выравнивание кода какое.
Аноним 17/07/17 Пнд 21:51:16  1027533
>>1027529
"return" внутрь скобок возвращает?
Аноним 17/07/17 Пнд 22:00:18  1027537
>>1027527
Поставь лог внутри if, и узнай когда он срабатывает.
Меня это
> DO просто сыпет восьмибитные числа.
как-то напрягает. Ведь условие IF(DO) это тоже самое если if(DO !=0 ) Если там не только 0 или 1, то он может слишком часто срабатывать или хз ещё чего.
Аноним 17/07/17 Пнд 23:53:06  1027588
На чистой сишке в студии 2017 можно уже писать? Хочу обмазаться винапи и чистым си и заебенить какое нить приложение. Как пример беру эту апликуху https://github.com/hfiref0x/WinObjEx64 стоит ли на неё ориентироваться?
Аноним 18/07/17 Втр 00:10:46  1027594
>>1027588
> На чистой сишке в студии 2017 можно уже писать?
Всегда можно было. C11 по большей части есть.

> стоит ли на неё ориентироваться
Что ты под этим подразумеваешь? Программа норм. Хочешь написать такую же? Незачем. Их и так минимум две, эта лучше.
Аноним 18/07/17 Втр 00:21:51  1027597
>>1027594
>Всегда можно было. C11 по большей части есть.
А почему тогда не вижу что бы было можно делать сишные проекты? Вижу только визуальные плюсы.

>Что ты под этим подразумеваешь?
Организация логики и кода. Тк сложно представить программу на си и винапи без ооп. Но знаю, что пишут.
Аноним 18/07/17 Втр 00:34:27  1027601
>>1027597
> А почему тогда не вижу
Потому что Microsoft официально забила на Си в юзермоде (хотя ядро у них по-прежнему по большей части на Си). Создавай крестовый проект, сохраняй файлы как .c, и они будут компилироваться именно как Си. Алсо, раньше были ключики /TC и /Tc<filename> (должны были остаться), которые говорят компилятору работать с Си вне зависимости от расширения.
Аноним 18/07/17 Втр 00:42:11  1027606
>>1027601
Благодарю тебя антош, буду осваивать мир байтоёбства и низкоуровнего погромирования.
Аноним 18/07/17 Втр 01:00:47  1027616
>>1027606
>низкоуровнего погромирования
>c
lol
Аноним 18/07/17 Втр 11:49:07  1027741
Хочу пощупать таблицы экспорта и импорта в PE-файлах. Какой инструмент имеет удобную навигацию по смещениям для этого?
Аноним 18/07/17 Втр 14:49:04  1027847
>>1027741
Ну вообще достаточно IDA. В каких-нибудь PETools/LordPE есть редакторы и вьюверы разного рода, ну или можешь какой-нибудь CFF Explorer взять.
Аноним 18/07/17 Втр 15:38:57  1027868
>>1027502
>>1027514
>>1027529
>>1027537
Короче разобрался. Проблемы было две:
Сдвиговый регистр не 8 бит, а целых 32! И часть входных данных отсекалась.
И ещё с таймингами проблемы, пришлось замедлить MCU и delay`в добавить.

Осталось доработать напильником.
Аноним 19/07/17 Срд 14:14:48  1028321
251235.PNG (15Кб, 608x833)
Анон, а как бы это сократить?
Аноним 19/07/17 Срд 15:52:15  1028360
>>1028321
Вынести цикл в отдельную функцию, temp передавать по значению, индекс цикла - по ссылке.
Аноним 19/07/17 Срд 15:53:37  1028361
>>1028360
Хотя temp тоже по ссылке инб4 в си нет ссылок
Аноним 19/07/17 Срд 17:47:22  1028410
Анон, спасай.
Для Visual Studio 2017 нужен плагин подсветки SASS.
Web Compiler подсвечивает SCSS, а вот за sass очень обидно.
В гугле нашел только протухший SassyStudio.
Аноним 19/07/17 Срд 17:50:01  1028412
hqdefault.jpg (19Кб, 480x360)
>>1028410
> SASS
> SCSS
Аноним 19/07/17 Срд 23:29:08  1028569
>>1028412
>>1028410
>SCSS — "диалект" языка SASS. А что такое SASS? SASS это язык похожий на HAML (весьма лаконичный шаблонизатор), но предназначенный для упрощения создания CSS-кода.

вот первый раз про эту хуйню услышал, да еще в ситрхеде. смузихлебы уже реально не могут в ксс в нотпаде и придумывают всякую поеботу?
Аноним 19/07/17 Срд 23:55:53  1028578
>>1028569
Ну CSS без переменных очень неудобен, это да. Хотя тред по сишечке - совсем не место об этом говорить.
Аноним 20/07/17 Чтв 00:23:10  1028595
>>1028578
>Ну CSS без переменных очень неудобен
и зачем там переменные если операторов нет?
Аноним 20/07/17 Чтв 00:29:56  1028598
>>1028595
а, глянул, вот такая шляпа

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

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


ну хз, по мне очередная хипстерская технология, которя нинужна поскольку все там можно разрулить грамотным наследованием
Аноним 20/07/17 Чтв 00:33:35  1028601
>>1028595
Просто веб-макаки тупые, и не могут расположить блоки в правильном порядке. Мне всегда calc() хватало.
Аноним 20/07/17 Чтв 02:14:37  1028626
Не получается заебенить экзешник в 1кб как тут учат http://eax.me/winapi-dev-environment/
На первой проге с изменёнными настройками проекта 1кб, у меня 2кб. На второй проге с меседж боксом у автора 2кб, а у меня 3кб. Откуда берётся этот сраный килобайт? Юзаю visual studio 2017 community edition на семёрке.
>>1027588 кун
Аноним 20/07/17 Чтв 03:11:24  1028635
623653572353.PNG (11Кб, 532x433)
Ну какого чёрта оно не хочет считать..
Аноним 20/07/17 Чтв 08:24:40  1028660
>>1027594
> Всегда можно было. C11 по большей части есть.
Че там, к 2030 году завезут void указатели?
Аноним 20/07/17 Чтв 11:38:16  1028712
>>1028626
Держи, няш.

https://vxlab.info/1kb-programm/
Аноним 20/07/17 Чтв 11:52:19  1028723
>>1028635
>temp << 1
Что я блеять вижу? А точно, кто-то не знает языка
> temp <<= 1;
Аноним 20/07/17 Чтв 12:15:02  1028733
>>1028723
Да, спасибо, разобрался.
Аноним 20/07/17 Чтв 16:58:36  1028867
Аноны, спасайте.
Есть два целых числа, их надо разделить и представить результат в double. Но как бы я не исхитрялся, в результате получается огромное число, не имеющее никакого отношения к реальности. Как это сделать?

Код:
int a = 5;
int b = 2;
double res;
res = (double) a / (double) b;
printf("Result: %d, \n", res);
Аноним 20/07/17 Чтв 16:59:51  1028868
>>1028867

int a = 5;
int b = 2;
double res;
res = (double) a / (double) b;
printf("Result: %d, \n", res);
Аноним 20/07/17 Чтв 17:00:10  1028869
>>1028867
%lf у printf вместо %d
Аноним 20/07/17 Чтв 18:53:47  1028929
>>1028869
%lf - это long double. Надо просто %f, а еще лучше %g.
Аноним 20/07/17 Чтв 19:22:28  1028944
14974615784440.jpg (148Кб, 750x573)
>>1019934 (OP)
Всем привет, у меня появилось желание написать 2d образовательную игру на чистом C, чисто как челледж, с пиксельным графоном и тд. Программирую на питошке, С дается очень сложно, вот прямо со скрипом. Во вторых я не понимаю как писать игры без ООП, ну воот до меня что-то не доходит. Есть те кто пытался? Подкиньте литературы, библиотек, поделитесь опытом.
Аноним 20/07/17 Чтв 19:43:23  1028952
>>1028929
long float - double
Аноним 20/07/17 Чтв 19:47:58  1028956
>>1028944
Я недавно на С написал веб-программу. На середине хотел бросить, в конце зарёкся так больше не делать и юзать для этого питон или пхп.
Аноним 20/07/17 Чтв 20:12:04  1028959
>>1028712
Благодарствую! Скажи, а что за makefile такой? Только слышал о нём. Получается работать буду всё же в студии, но билдить/дебажить где то в другом месте?
Аноним 20/07/17 Чтв 20:29:00  1028964
>>1028944
Код дума почитай вдумчиво.
Аноним 20/07/17 Чтв 20:43:29  1028970
>>1028959
Можешь те же самые ключики выставить в настройках проекта студии. Посмотри, там где-то можно было прямо текстом additional switches прописать.
Алсо, зачем тебе вообще этот дроч на размер? Я еще понимаю, когда стремятся уместиться в десятки килобайт вместо сотен. Или ты демки делать собрался?
Аноним 20/07/17 Чтв 21:04:16  1028978
>>1019934 (OP)
Тернарный оператор сосет или нет? Что более наглядно?

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

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

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

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

>>1028970
Няша, можешь попробовать у себя сбацать? Может у меня что то не то.
Аноним 20/07/17 Чтв 23:30:37  1029066
>>1029033
> можешь попробовать у себя сбацать
Я уже попробовал, у меня хелловорлд 1.5 КБ в 32-битном бинаре и 2.5 КБ в 64-битном. Не представляю, как отключить генерацию отладочной датадиректории, которую оно пихает в бинарь даже в релизе и убрать .idata внутрь .text. Собственно, если .idata убить, то будет как раз 512 байтами меньше. Но проще свой линкер написать или какой-нибудь ld/ulink прикрутить, чем ебаться.
Аноним 21/07/17 Птн 00:12:31  1029086
>>1029066

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

А если поставить например студию 2015 и в ней те же манипуляции провести, стоит попробовать?
Аноним 21/07/17 Птн 00:22:24  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 - и сразу килобайт без ебли.
Аноним 21/07/17 Птн 00:36:25  1029095
>>1019934 (OP)
Господа, я пишу базонезависимый кодес, в котором указатель на структуру, расположенной на стеке, передается в различные функции. Пишу на чистом WinAPI, сами API динамически дергаю при помощи парсинга PEB и таблиц экспорта. Не помешает ли передача указателя сделать кодес базоненависимым, или придется использовать дельта-смещение для доступа к этой структуре?
Аноним 21/07/17 Птн 00:40:38  1029096
>>1029095
Если у тебя оно на стеке лежит, это уже относительная адресация (относительно фрейма стека). Когда кладешь указатель на структуру в аргументы, будет та же самая относительная адресация, только относительно другого фрейма стека. Btw, что за эпидемия байтоебли итт?
Аноним 21/07/17 Птн 10:04:56  1029154
Посоветуйте книжку где учат, как запустить процесс через C pipes отправить ему данные и получить от него данные назад? Желательно в кроссплатформенном виде.
Аноним 21/07/17 Птн 13:38:49  1029222
>>1029154
Advanced Programming in the UNIX Environment.
Аноним 21/07/17 Птн 19:27:46  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.
Аноним 21/07/17 Птн 19:28:29  1029397
>>1029396
> \t
Ах ета VS
Аноним 21/07/17 Птн 20:33:42  1029442
>>1019934 (OP)
Написал минималистичный PE-лоадер и успешно загрузил им хелловорлд на masm32, в котором есть секция релоков. Когда я попытался загрузить этим лоадером многопоточную программу, собранную студией, лоадер рухнул. В этой программе были секции .text, .idata, .tls, .gfids, .00cfg, .rsrc, .reloc. Почему загрузка провалилась? Это из-за TLS и какого-то дерьма в секциях типа .gfids?
Аноним 21/07/17 Птн 20:35:58  1029444
>>1029442
Вполне возможно, что и из-за TLS.

> лоадер рухнул
А ты знаешь такую штуку, называется отладчик? Он дает какую-нибудь информацию вместо кофейной гущи и пустых предположений. Алсо если рухнул твой лоадер, то в нем есть ошибки.
Аноним 21/07/17 Птн 21:04:40  1029454
LOL https://www.youtube.com/watch?v=XrFegNHpHfc
Аноним 21/07/17 Птн 21:34:37  1029464
>>1029454
У меня ломка началась от этого видео.
Аноним 21/07/17 Птн 21:57:01  1029469
14920230345060.webm (372Кб, 1280x720, 00:00:03)
>>1029454
У Кэролайн хуевые ASMR получаются. Она гонит сотни одинаковых видео про потирание и нашептывание бинауральному микрофону без всякого разнообразия.
Внешне рыжая сучка, понаехавшая из США в Германию, охуенная, но ее ASMR делает мне cringe и становится несмотрительным.
Аноним 23/07/17 Вск 01:00:10  1029963
Комрады, нид ёр хелп.
Решил вкатиться, и начал штудировать Ричи.
И вот стопорнулся на задаче с вертикальными гистограммами.

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

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

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

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

p.s.s.
ОС linux mint 18.1 cinnamon, в си вроде бы есть различия между окнами и unix системами.
Аноним 23/07/17 Вск 01:51:35  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 в винде ты, наверное, уже знаешь. На более неочевидные вещи ты напорешься сильно потом.
Аноним 23/07/17 Вск 02:47:47  1029981
>>1029975
>вплоть до пяти
Четырёх
Аноним 23/07/17 Вск 02:50:23  1029982
>>1029981
Да, ты прав. Но пятью можно кодировать вплоть до 0x7fffffff. Всегда так делаю, срать хотел на консорциум, использую излишки на технические нужды. Ввод извне декодирую по стандарту, естественно.
Аноним 23/07/17 Вск 02:52:34  1029983
>>1029982
шестью, ну ты понял.
Аноним 23/07/17 Вск 08:35:31  1030022
>>1029975
Огромное спасибо. Я оказывается дурак, очевидного не увидел. Накостылил, блин.

>Похуй.
Плохо же?

>Не сохраняй слова. Тебе не нужны слова для построения гистограммы. Тебе нужны длины, вот их и храни.
Длины вроде бы и сохраняю в массив. А про ограничения не подумал.
Аноним 23/07/17 Вск 08:43:24  1030025
>>1029975
>>1030022
И ещё, забываю спросить. В чём существенные различия стандартов?
И нужно ли учить все?
Или стоит учить определённый? Но какой?
Аноним 23/07/17 Вск 09:46:05  1030033
>>1024333
Если знакомо, то отложи книгу и напиши по памяти краткий конь спект. Это покажет, знакомо или у тебя иллюзия знания.
Аноним 23/07/17 Вск 09:46:18  1030034
>>1030025
> плохо же
Пока у тебя используется полсотни килобайт, да еще на стеке, тебе вообще не нужно думать о памяти (но подумать о подходе к подсчету длин слов безусловно стоит). В будущем тебе еще предстоит принимать интересные решения типа лукап 128 метров и пиздец кэшу vs. лютые тормоза на бранчах и пиздец конвейеру - тогда и будешь переживать.

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

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

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

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

Алгоритм загрузки:
1) Пробую GetModuleHandleA (вдруг модуль уже загружен)
2) Если не загружен, вызываю LoadLibraryA.
Аноним 23/07/17 Вск 14:44:45  1030121
>>1030120
Зря вопрос задал. Туплю. Библиотеки грузятся, проблема где-то еще. В OllyDbg видно, что дебагер виснет при чтении по какому-то адресу.
Аноним 23/07/17 Вск 15:26:18  1030129
>>1030118
Но для сурова же Брик не критичен. Он будет просто дальше перебирать условия же.
Аноним 23/07/17 Вск 15:39:22  1030136
>>1019934 (OP)
Почему при выделении памяти по адресу ImageBase возникает ошибка ERROR_INVALID_ADDRESS и возвращается nullptr?

void mem = VirtualAlloc(nullptr /(void)NtHeaders->OptionalHeader.ImageBase/,
NtHeaders->OptionalHeader.SizeOfImage,
MEM_COMMIT,
PAGE_READWRITE);
Аноним 23/07/17 Вск 19:28:24  1030226
>>1020965
>А на линуксе?
4, все символы Юникода помещаются.
Винда, ЕМНИП, символы больше 0xFFFF не поддерживает.
Аноним 23/07/17 Вск 19:34:47  1030230
>>1024378
>то скала работает на джава машине
Уже нет, scala native может компилироваться в машинный код.
Аноним 23/07/17 Вск 19:37:00  1030232
>>1024525
>Можно ли ебашить на си под чистое железо без ничего?
А как по-твоему ОС пишут?
Аноним 23/07/17 Вск 20:01:49  1030247
>>1024525
Для написания ОС нужен Тьюринг-полный язык программирования, который должен уметь управлять памятью и компилятор.
Аноним 23/07/17 Вск 20:13:59  1030252
>>1025414
Сишку знать надо, даже если пишешь веб-сайты. Чтобы не быть быдлокодером. Ту же Java вообще нельзя изучать до Си.
Аноним 23/07/17 Вск 20:29:18  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> содержатся лишь прототипы функций). Специальным ключом можно отключить при компиляции эту линковку и писать ядра ОС, загрузчики и другой низкоуровневый софт, не требующий ОС.
Аноним 23/07/17 Вск 20:31:07  1030259
>>1030258
>msvcrN.dll
>libc.so.N
Все время забываю про звездочки в макабе.
Аноним 23/07/17 Вск 21:36:55  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 (пидоры!).
Аноним 24/07/17 Пнд 00:54:50  1030369
>>1029090
А я могу использовать другой компилятор?
Слышал что то про makefile'ы, как я понял они связаны с cmake. Т.е. например, пишу код в студииили в vscode на крайняк, а компилю уже другими средствами, не студию. Это реально?
Аноним 24/07/17 Пнд 01:12:45  1030373
>>1030369
> могу использовать другой компилятор
Можешь использовать другой тулчейн (банально сохранил все и сказал make в соседней консольке), можешь как я предлагаю через post-build использовать только внешний линкер (может быть, можно и просто внешний линкер указать вместо стандартного, я в студии не спец): т.е., cl генерит объектники, link линкует из них стандартный .exe, а ты потом берешь эти же объектники и линкуешь каким-нибудь другим линкером скукоженный .exe.

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

> Слышал что то про makefile'ы, как я понял они связаны с cmake
Ну так потрать десять минут, разберись с синтаксисом мэйкфайлов. Нет, makefile-ы не связаны с cmake. Это cmake связан с makefile-ами. cmake - это генератор makefile-ов под разные тулсеты (в том числе, он, например, может автоматом создать проект для студии).
Аноним 24/07/17 Пнд 01:54:49  1030381
>>1030373
Спасибо тебе за твои ответы, анон, но я не на столько разбираюсь в этом на данный момент.
Я не знаю как использовать эти линкеры-хункеры, работаю пока что с тем, что есть.
Я думал, раз уж 2017 студия добавляет эти ссаные 512 байт и не дает мне сделать желанный мной экзешник в 1кбещё и изъябываться надо что бы на сишке писать а не наплюсах то стоит попробовать сбилдить через что то другое. Ведь по сути, мне надо указать опции для компиля и линковщика, импорты либкстати, что за либы .lib и почему я должен их импортить? я ведь могу динамически подгружать длл и работать с ними, верно?
Но я туговато соображаю, как мне это сделать.
Туториал который был в ответах на мой пост предлагает юзать мейкфайл и nmake, но он выдаёт ошибку, говорит там что то не так с синтаксисом, а гугл нихуя не знает.
Аноним 24/07/17 Пнд 01:56:35  1030382
>>1030373
>(в том числе, он, например, может автоматом создать проект для студии).
Т.е. через него, я смогу сделать себе шаблон проекта на си и что бы без лишнего для студии?
Аноним 24/07/17 Пнд 02:04:07  1030383
>>1019934 (OP)
Посоветуйте ТУЛЧЕЙН для разработки под STM32 для линукса. Мне нужен тулчейн с дебаггером GDB. Если можно, ссылку тоже киньте.
Аноним 24/07/17 Пнд 03:18:09  1030392
>>1030383
ARM же. GNU ARM + OpenOCD. Оба гуглятся, в каком-нибудь арчике есть прямо в репозиториях, ничего качать не нужно. Надеюсь, STLink у тебя есть.
Аноним 24/07/17 Пнд 03:30:10  1030393
>>1030392
>GNU ARM
Там нету gdb.
Аноним 24/07/17 Пнд 03:48:05  1030397
gdb.png (14Кб, 547x210)
>>1030393
Кому ты пиздишь?
Аноним 24/07/17 Пнд 04:28:44  1030402
>>1030381
> но я не на столько разбираюсь в этом на данный момент
> не знаю как использовать эти линкеры-хункеры
Я тебе выше командную строку кидал. Готовую. Всего-то делов - спиздить polink.exe из дистра Pelles C.

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

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

>>1030382
> что бы без лишнего для студии?
Нет. Без разницы, как именно ты будешь вызывать студийный линкер, это он портит всю малину, и он будет ее портить как с ручным вызовом командной строкой, так и через CMake. При этом, с CMake еще и поебаться придется, это такая технология, которая сделана нелюдьми для нелюдей (особенно на винде).
Аноним 24/07/17 Пнд 11:42:37  1030489
Снимок.PNG (16Кб, 1003x170)
Хелп ми, двач.
Или лыжи не едут, или какого хуя в гетчар нельзя засунуть символьную константу?
Ругается именно на эту строчку и я просто не понимаю почему
Аноним 24/07/17 Пнд 11:44:49  1030490
>>1030489
Там снизу какая-то хуета, но я ее уже переписал и дело не в ней
Аноним 24/07/17 Пнд 20:27:39  1030804
>>1030489
p кириллическая или ascii?
Аноним 24/07/17 Пнд 21:01:46  1030827
>>1030489
Ругается не на эту строчку, дебил.
Аноним 24/07/17 Пнд 23:08:48  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
Аноним 24/07/17 Пнд 23:10:08  1030911
>>1030909
А ты читать умеешь? Какой пакет по твоей ссылке? А вот по этой: https://www.archlinux.org/packages/community/x86_64/arm-none-eabi-gdb/ ?
Аноним 25/07/17 Втр 01:28:10  1030956
Решил вкатиться в погроммирование. В приличные конторки не пошел (я не умею программировать, только в алгоритмистику могу), а вот в нии решил тестовое задание и попал на работу.
Получил задание, первый день отработал. Насколько я понял, назвать мою (и всего нии) работу "программированием" сложно. Скорее это решение некоторых сложных физических задач численными методами. Программирование занимает лишь часть времени, значительная часть (и не только у меня, но даже у коллеги-доктора) - курение мануалов или разработка нового скорее "подработка старого" численного метода для задачи.
Возник вопрос. А эта хуйня вообще кому-то нужна или удел всяких физических нии? Стоит вкатываться или это болотце, единственным вариантом развития в котором является дрочь на научные знания, аспа и статейки в ваковских журналах (я глуповат, вряд ли смогу в статейки)?
Аноним 25/07/17 Втр 01:31:27  1030958
>>1030956
Добавлю, что плюсов нет. Я сказал, что умею лишь в плюсы (и то посредственно), мне ответили: переучивайся, плюсы ненужное говно.
Я думал, ненужное говно С.
Аноним 25/07/17 Втр 04:42:50  1030993
>>1030956
Рашкинские нии это такой мультиверс полный чудес, каждая инста почти как новый мир:
можно найти и глухой тупой совок, и даже иногда мир полдня, как у стругачей.

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

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

Пишу с нулевой, к С это отношения не имеет, язык в такой тусовке вторичен и зависит от специфики задачи и нии.
Аноним 25/07/17 Втр 08:30:54  1031019
>>1030383
IAR uber alles
Аноним 25/07/17 Втр 08:33:50  1031020
>>1031019
А что, оно таки стало бесплатным? А что, оно умеет в Linux?
Аноним 25/07/17 Втр 10:17:53  1031052
>>1030958
>плюсы ненужное говно.
Мужики дело говорят. Видел недавно в новостях, что разработчики буста перекатились с собственного велосипеда на CMake наконец-то.
Хотя асинхронщина что в сях, что в крестах это больно.
Аноним 25/07/17 Втр 10:18:13  1031054
>>1030993
> отражение радиоволн от летящего сверхзвукового обекта
Угадал.
Впрочем, пока моя задача скорее напоминает курсовик третьекурсника, чем что-то серьезное.
Аноним 26/07/17 Срд 13:20:12  1031930
>>1019934 (OP)
Пиздец, какого хера линкер помещает переменную i в .bss, а переменную off в .data? Из-за этого в i оказывается мусор, потому что я не обнуляю .bss в RAM. Почему линкер такой пидор?

https://ideone.com/C2bgUt
Аноним 26/07/17 Срд 13:57:32  1031952
Будет ли какое-либо увеличение производительности, если UDP сервер с большой нагрузкой будет разбивать коннекты по портам, или порт - просто абстракция?
Аноним 26/07/17 Срд 15:24:45  1032016
>>1031952
Кажется, ты хочешь скорее что-то вроде SO_REUSEPORT. То есть, множество процессов на одном порту
Аноним 26/07/17 Срд 15:39:42  1032022
>>1032016
Я хочу, чтобы сервер мог держать огромное количество клиентов и общаться с ними по UDP максимально быстро. Будет ли ускорение, если распределить клиентов по портам?
Аноним 26/07/17 Срд 21:09:50  1032245
>>1031930
> какого хера линкер помещает
Как раз именно того самого хера, что он ожидает нули в .bss. Это оптимизация такая, чтобы не хранить нули в бинарнике. Напиши кастомный скрипт для ld, чтобы он этого не делал, в чем проблема-то?

>>1032022
Вряд ли. Хочешь ускорения - делай больше потоков-обработчиков. Кстати, огромное - это сколько?
Аноним 26/07/17 Срд 23:19:59  1032295
>>1031020
Отладка в ворованной IDE на ворованной винде даже приятнее, чем за деньги.

Тем более, что шведское поделие, в отличие от эклипсоидов, летает на любом калькуляторе.
Аноним 27/07/17 Чтв 08:21:01  1032385
>>1032022
>Будет ли ускорение, если распределить клиентов по портам?
Что будешь делать, когда порты закончатся?
Аноним 27/07/17 Чтв 09:56:10  1032415
>>1032385
Добавит машинке еще один айпи?
мимо
Аноним 27/07/17 Чтв 14:52:57  1032612
>>1032245
40к, как в eve
>>1032385
По 10-50 клиентов на 1 порт. Нет привязки клиента к порту, есть просто распределение, вопрос в том, будет ли от этого увеличвние перфоманса
Аноним 27/07/17 Чтв 17:19:05  1032696
>>1031952
Тебе нужен бондинг.
Аноним 27/07/17 Чтв 17:49:51  1032722
>>1032612
>будет ли от этого увеличвние перфоманса
нет
Аноним 28/07/17 Птн 09:25:05  1033075
Что писать в main? return 0 или exit(EXIT_SUCCESS)?
Аноним 28/07/17 Птн 09:27:56  1033076
>>1033075
Можешь еще ничего не писать. Все три варианта равнозначны.
Аноним 28/07/17 Птн 14:32:31  1033238
>>1033076
ну если совсем доебаться, то формально разница есть:

> int main(){return 0;} =>
> movl $0, %eax
> popq %rbp

> int main(){exit(0);}
> movl $0, %edi
> call exit@PLT
>
Аноним 28/07/17 Птн 17:35:18  1033369
Анон, что означает этот атрибут?

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

Объявление функции линкер рассматривает как символ, который можно заменить другим символом с таким же названием, если он встретится в дальнейшем при линковке? Объясни подробно, как происходит замена этого дефолтного прерывания пользовательским обработчиком.
Аноним 28/07/17 Птн 17:36:09  1033371
>>1033369
А еще: атрибут указывается только после имени функции или до имени тоже можно?
Аноним 28/07/17 Птн 23:41:09  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
> только после имени функции или до имени тоже
В объявлениях или до имени, или после. В определениях только до имени.
Аноним 29/07/17 Суб 09:14:49  1033768
>>1033672
>Символы бывают defined (определенные - "вот здесь есть такая-то сущность"). Бывают еще undefined символы (неопределенные - "где-то есть такая сущность"). Линкер по ходу обработки объектных файлов составляет список всех встреченных символов. Если встретился символ defined, а в списке есть undefined - ура, мы нашли определение. Если встретился defined, но в списке уже есть defined - это ошибка, потому что непонятно, какое определение из двух нужно использовать (на деле все сложнее). Если по окончанию работы в списке остались undefined - это тоже ошибка (опять же в реальности возможны некоторые варианты).
.......

что вы зделоли с сишечкой?
Аноним 29/07/17 Суб 16:58:23  1033945
>>1033768
А что не так, и при чем тут сишечка? Все линкеры делают делают это.
Аноним 30/07/17 Вск 00:20:29  1034216
Пишу библиотеку длинной арифметики над конечными полями. Как эффективнее всего реализовать сравнение двух 256-битныхчисел, представленных пятью chunk'ами, в которых хранятся "цифры" размером 51 бит? Я реализую операции так, чтобы они могли выполняться над всеми цифрами числа одновременно за один такт, и для этого не использую прибавление с переносом adc. Сравние я тоже хочу сделать эффективно, чтобы оно выполнялось за такт над всеми чанками. Как? Одно условие с несколькими &&?
Аноним 30/07/17 Вск 01:08:55  1034231
>>1034216
> выполнялось за такт
Для начала скажи, ты дизасм смотришь, или у тебя кофейная гуща?
Аноним 30/07/17 Вск 01:13:13  1034232
>>1034231
Пока что основную часть кода и вообще писал на асме.
Аноним 30/07/17 Вск 01:14:33  1034233
>>1034232
Ну покажи хотя бы свое сложение без adc. А то я слабо представляю себе софтовую реализацию за такт. В железе вот могу, а софтом нет.
Аноним 30/07/17 Вск 01:23:58  1034235
>>1034233

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

Тут используем сокращенную запись чисел: 256 бит делим на 5 частей, в каждой части получается 51 бит. При сложении таких цифр переполнения не возникает,и дорогостоящая операция adc не нужна. Все carry, однако, нормируем самостоятельно.
Аноним 30/07/17 Вск 01:38:23  1034241
>>1034235
Ну все это к тому, что над векторами процессор может выполнять операции за такт, но при этом теряются carry, т.к. замедляют процесс. Поэтому нужна вся эта магия со сдвигами и масками.
Аноним 31/07/17 Пнд 13:28:33  1034819
Если я буду реаллокать char, то по сути все, что лежало в этом массиве будет лежать в новом, так? Будут ли утечки памяти при этом и высвобождает ли realloc ранее выделенную память? Вопрос встал потому, что сначала должны быть высвобождены все char, потом char, потом сам char*, чтобы не было утечек
Аноним 31/07/17 Пнд 13:29:54  1034822
>>1034819
>Если я буду реаллокать char
char
>высвобождены все char
char

>потом char
char
>потом сам char
char
Аноним 31/07/17 Пнд 13:31:26  1034825
>>1034822
Уебите меня кто-нибудь
Аноним 31/07/17 Пнд 13:32:27  1034826
>>1034819
> Будут ли утечки памяти при этом и высвобождает ли realloc ранее выделенную память
Нет и да.
Аноним 31/07/17 Пнд 13:36:31  1034828
>>1034826
Как именно он высвобождает? Если я ему подам тройной char, то он снесет сразу его или начнет с более "низких" указателей? Т.е. сначала чар1, потом чар2, потом чар3. Если так, то все хорошо. Если же нет, то сто процентно будет утечка. Я именно это хоте уточнить
Аноним 31/07/17 Пнд 13:37:28  1034829
>>1034828
>сто процентно
стопроцентно
>хоте уточнить
хотел уточнить
Аноним 31/07/17 Пнд 13:59:30  1034840
>>1034819
> то по сути все, что лежало в этом массиве будет лежать в новом, так?
так
> realloc ранее выделенную память
эмм, ну должен вообще-то. Почитай man realloc.
> Вопрос встал потому, что сначала должны быть высвобождены все char, потом char
mi ne komprenas vin, ja tvoja ne ponimat?
Аноним 31/07/17 Пнд 14:00:11  1034841
>>1034819
ответ
Аноним 31/07/17 Пнд 21:21:09  1035089
>>1034819
malloc/realloc/free абсолютно похуй, что конкретно у тебя лежит в куске памяти. Все, о чем они знают - размер и адрес этого куска. Так что, если у тебя массив указателей, то realloc() сами указатели-то тебе, конечно, скопирует в новое место (или наоборот лишние из хвоста выкинет, если новый размер меньше текущего), но о том, что там указатели, он не знает и знать не может, поэтому если ты не озаботился - утечки будут. У тебя язык с ручным управлением памяти, каждым своим указателем ты рулишь сам. Сам насоздавал - вот и высвобождай все сам.
Аноним 31/07/17 Пнд 23:47:04  1035236
image.png (156Кб, 1280x404)
Почему здесь не ставится звёздочка? Спотыкаюсь о синтаксис как даун.
Аноним 31/07/17 Пнд 23:55:39  1035245
>>1035236
char ∗lineptr[] в аргументах равносильно char ∗∗lineptr. В теле цикла lineptr[ i ] равносильно ∗(lineptr + i), т.е., одну звездочку (один уровень указателей) у lineptr ты убираешь, получаешь char ∗, именно его (адрес последовательности символов, завершенной \0) и хочет %s в printf. Если бы ты выводил только один символ через %с, то сделал бы ∗∗(lineptr + i) (убрали два уровня, получили char) или более читабельно с использованием синтаксиса массивов ∗lineptr[ i ].
Аноним 01/08/17 Втр 00:01:05  1035254
>>1035089
Я именно об этом и спрашивал, ибо писали, что высвобождает выделенную память. Я понять как раз не мог, как он может указатели более низкого порядка удалять (так как он и не может, лол), хотя обычно пишут, что нет никаких утечек и быть не может. Спасибо
Аноним 01/08/17 Втр 00:24:09  1035278
>>1035254
Ну про realloc обычно имеется в виду, что если foo = realloc(bar, length) успешен, и оно решит переместить содержимое bar на новое место, то память по адресу bar оно само освободит, тебе не нужно об этом думать. Никаких утечек в этом смысле.
Аноним 01/08/17 Втр 00:27:51  1035281
image.png (132Кб, 1280x317)
>>1035245
Блять. Вроде, улавливаю вершки. Так меня указатели путают почему-то.
Аноним 01/08/17 Втр 00:57:49  1035291
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/

Просят деньги.
Может есть что-то для нищебродов?
Аноним 01/08/17 Втр 01:45:41  1035304
>>1035281
Да все просто. Есть char ∗∗lineptr, у постфиксного ++ приоритет выше, чем у звездочки. Соответственно ++ увеличивает lineptr (и lineptr теперь указывает на следюущий char ∗), но до того, как постфиксный ++ что-то сделает, он (так как он постфиксный) "кладет" в выражение текущее значение lineptr значение, а звездочка читает из этого значения char ∗.
Путаешься в указателях - обязательно смотри в отладчике (желательно в голом хексдампе памяти), путаешься в приоритетах - расставляй скобки, объявляй временные переменные. Алсо, попробуй думать об указателе, как о массиве (из нескольких, а иногда и из одного элемента) значений того типа, на который он указывает. Ну типа: ∗lineptr++ это char ∗line; line = lineptr[0]; ++lineptr.
Аноним 01/08/17 Втр 01:49:35  1035306
>>1035291
Ну охуеть вообще! Дожили! http://web.archive.org/web/*/http://c.learncodethehardway.org/book/
Аноним 01/08/17 Втр 13:49:08  1035445
>>1035304
Спасибо за разъяснения, переспал с твоими сообщениями, понял, что запутался, так как не сразу понял, что в printf и нужен указатель на строку.
Аноним 01/08/17 Втр 18:14:57  1035595
>>1019934 (OP)
C чем сравнить ctx->pPeHdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS], чтобы определить, что TLS нет?
Аноним 01/08/17 Втр 18:52:17  1035626
Гайс, как создать массив объектов класса?
К примеру :
for(int i = 0; i<VariableList.threads; i++)
VkApi Api = new VkApi();
Что бы в последующем мог использовать
Api[0].Auth();
Api[1].Auth();
...
и т.п ?
Аноним 01/08/17 Втр 18:52:53  1035628
>>1035626
>VkApi Api = new VkApi();
VkApi Api = new VkApi();
Фикс
Аноним 01/08/17 Втр 19:03:06  1035638
>>1035628
Api
Аноним 01/08/17 Втр 19:03:32  1035640
>>1035638
api[ i ]
Аноним 01/08/17 Втр 20:33:26  1035705
>>1035595
Размер директории больше или равен размеру IMAGE_TLS_DIRECTORY?
Аноним 01/08/17 Втр 22:36:55  1035775
Аноны, вот основы синтаксиса прочел, "опыта" на laba1 набрался.
Интересует вот какой момент: где почитать про Си и сети? Как делать пост/гет запросы и прочее?
Аноним 01/08/17 Втр 22:39:01  1035777
>>1035775
В документации к библиотеке CURL?
Аноним 01/08/17 Втр 22:51:54  1035790
>>1035775
Ось какая? На форточках дрочи Winsock, там не сложно.
Аноним 02/08/17 Срд 00:14:28  1035834
>>1035775
Под линукс есть охуенный libsoup. Под винду даже хз что может по удобству сравниться с ней.
Аноним 02/08/17 Срд 01:10:16  1035846
>>1035834
В винде winhttp есть системный, но с удобством там некоторые проблемы.
Аноним 02/08/17 Срд 01:53:02  1035854
Lua тут кто нибудь знает?
Аноним 02/08/17 Срд 02:16:08  1035861
>>1035854
Тут нет. Иди к ньюфагам в бесконечно-прикрепленный.
Аноним 03/08/17 Чтв 19:02:08  1037071
Всем привет! В процессе написания кода иногда приходится printfами выводить какие то значения или состояния, захотел эти конструкции обернуть ifndef DEBUG endif. Т.е хотел определить глобальную переменную DEBUG и если она определена,то выводим вспомогательное сообщения, если нет, то не выводим. Но как вы понимаете не получилось, гугл кидает на использование этой конструкции при подключении .h файлов. Помогите пожалуйста разобрася, спасибо.
Аноним 03/08/17 Чтв 19:51:15  1037105
>>1037071
Заворачиваешь вызов функции в макрос, типа:
#define dbgprint(x) \
#ifdef debug \
print(x) \
#endif
Аноним 03/08/17 Чтв 19:56:39  1037108
>>1037071
https://wandbox.org/permlink/N40JQaRzjUJzx0TX
Аноним 03/08/17 Чтв 21:03:54  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
Аноним 03/08/17 Чтв 22:25:10  1037271
>>1037108
>>1037105
>>1037164
Большое спасибо! Разобрался.
Аноним 04/08/17 Птн 12:02:58  1037662
Почему после brk(heap_start + small_value) я могу сделать так heap_start[large_value] = some_value не словив segfault? Это как-то связано с тем, что ос выделят память постранично, и такая, мол, вот тебе страница, пездюк, еби ее как хочешь? Если так, то почему после выделения памяти с помощью brk, sbrk(0) возвращает адрес heap_start + small_value, а не heap_start + page_size?
Аноним 04/08/17 Птн 13:17:06  1037693
>>1037662
если ты прочитаешь windows internals или хотя бы пару книг рихтера являсь разработчиком под винду ну или пару аналогичных книг под юникс разработку то подобных вопросов не будешь задавать
а так иди нахуй, да
Аноним 04/08/17 Птн 14:44:45  1037772
>>1037662
> Это как-то связано с тем, что ос выделят память постранично
brk() тебе дает сразу несколько страниц, даже если ты попросишь байт. Но да, причина в этом.

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

>>1037693
А ты сам иди нахуй отсюда.
Аноним 04/08/17 Птн 14:56:15  1037782
>>1037772
помогаешь абсолютно незнакомому человеку, который в будущем станет твоим прямым конкурентом за жизненную нишу
соси хуй, дурачок
Аноним 04/08/17 Птн 15:48:51  1037827
>>1037782
Какие-то жизненные ниши, конкуренты, что несёт этот поехавший?
Аноним 04/08/17 Птн 15:57:27  1037845
>>1037827
Чмо с двача же. Когда я нашел работу и тянку, то перестал думать о такой хуйне.
Аноним 04/08/17 Птн 16:03:55  1037855
>>1037772
>Патамушта такой API
Блядь, могли бы в man brk это добавить. Добра тебе.

>>1037693
>если ты прочитаешь
Хорошо, прочитаю.

>>1037782
>Непомахай блядь, он тебя сожрет
Каждый раз проигрываю.
Аноним 04/08/17 Птн 16:08:14  1037864
image.png (319Кб, 1022x598)
Обосрался
Аноним 04/08/17 Птн 16:08:41  1037865
>>1037864
Не туда
Аноним 04/08/17 Птн 23:56:05  1038176
Задача такая. Есть два канала. Нужно считать из них данные и вывести. Но при этом делать это с помощью селект, чтобы не дожидаться одного из них, а потом второго.
Почему-то если со стандартным вводом (если написать fd1 = 0) работает, а с файлами -- нет.
https://pastebin.com/AiyETnxA
Помогите, люди добрые.
Аноним 05/08/17 Суб 00:48:55  1038214
>>1038176
> Помогите, люди добрые.
Классика же. Прочитай внимательно (ВНИМАТЕЛЬНО!) про первый аргумент у select().
Аноним 05/08/17 Суб 00:54:01  1038218
>>1038214
зачем? можно просто спросить, и умный дурачок, поджав лапки, ответит
так гораздо быстрей чем самому грызть проблему
Аноним 05/08/17 Суб 01:09:18  1038233
Может вы знаете? Как протраверсисть дерево без рекурсии? Я спрашивал у С++-уёбков, а они послали меня делать конечный автомат со стеком. Может, есть какое-нибудь решение попроще?
Аноним 05/08/17 Суб 01:10:02  1038235
>>1037845
когда ты потеряешь работу потому что на твое место взяли молодое мясо - студентика выпускника, и твоя шлюха соскочит с твоего пинуса на другой, надеюсь ты вспомнишь что нехуй помогать собственным прямым конкурентам
Аноним 05/08/17 Суб 01:19:28  1038240
>>1038235
Ебать ты мелочный. Ты сильно переоцениваешь свои возможности, считая, что твоя "помощь" или ей отсутствие может как-то сильно повлиять на состояние окружающего мира. Фактически, этот мир практически никак не изменится даже если тебя совсем не будет.
Аноним 05/08/17 Суб 01:19:31  1038241
>>1038233
С рекурсией ты просто используешь аппаратный стек неявно. И без рекурсии тебе тоже нужна какая-нибудь вспомогательная структура данных. Стек там или очередь. Да и куда уж проще-то? Стек из массива фиксированного размера хуячится четырьмя строками, считая обработку ошибок. Для начала кладешь корень, потом в цикле достаешь узел/кладешь его потомков, повторяешь, пока в стеке что-то есть.
Аноним 05/08/17 Суб 01:23:58  1038244
>>1038241
Но я не хочу массив фиксированного размера, это ведь ограничит уровень вложенности.
Аноним 05/08/17 Суб 01:25:28  1038245
Нужно запрограммировать две функции. Есть два варианта как это сделать.

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

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

Какой способ выбрать? Первый мне ближе (потому что именно он обычно используется в других языках), но вроде бы хорошим стилем является второй способ.
Как пофиксить второй способ таким образом, чтобы в него можно было засовывать разные функции, а не просто запустить func1 внутри?
Аноним 05/08/17 Суб 01:27:11  1038246
>>1038245
https://pastebin.com/UjfPxx1N
Простите, забыл про звездочки.
Аноним 05/08/17 Суб 01:27:28  1038247
>>1038214
О, спасибо.
>>1038218
Ты какой-то обиженный.
Аноним 05/08/17 Суб 01:28:24  1038249
>>1038244
Ну блять динамический сделай тогда, это еще три строки.
Аноним 05/08/17 Суб 01:31:46  1038251
>>1038249
Ну и нахуя такая монстроузная конструкция? Тогда проще уж сделать рекурсию с каллбэком, раз и навсегда.
Аноним 05/08/17 Суб 01:36:56  1038255
>>1038235
Ты какой-то хуевый байтоеб, если тебя заменили студентом.
Аноним 05/08/17 Суб 01:37:13  1038256
>>1038251
> Ну и нахуя такая монстроузная конструкция
Это мне надо без стека? Я-то откуда знаю? Видимо, чтобы не ограничивать уровень вложенности. Алсо, не вижу ничего монструозного в нормально написанном обходе дерева, если это не лаба1, а что-то применимое на практике.

>>1038245
Не совсем понятно, что именно ты там считаешь. Если тебе reduce нужен - делай reduce с колбеком, это нормально. Если функция считает какую-то конкретную вещь, тогда нахуя ей эта твоя вариативность?
Аноним 05/08/17 Суб 01:38:15  1038258
>>1038256
Просто мне лень плодить функции, а при рекурсии придётся.
Аноним 05/08/17 Суб 01:48:58  1038270
>>1038256
func1 - обычная математическая функция (правая часть диффура второго порядка).
func2 - численный метод решения диффура.

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

Смотрел код начальника. У него кругом указатели, препроцессорные директивы и функции именно второго варианта (то есть функция что-то делает с какой-то переменной, переданной по указателю, а выход unt просто говорит о корректности работы функции или о коде ошибки).
Аноним 06/08/17 Вск 18:40:32  1039209
Никак не пойму. Как выделить структуру определенного размера? Например, под 512 байт. До этого создавал структуры и описывал в ней переменные, где по типам было понятно, сколько они займут места. Но сейчас мне надо выделить просто большую область для использовании в функции fread. Как это можно сделать?
Аноним 06/08/17 Вск 19:13:55  1039234
>>1039209
Это называется массив. char buffer[512] (ну или uint8_t buffer[512] - дело вкуса).
Аноним 06/08/17 Вск 19:14:40  1039235
>>1039209
uint8_t* buffer = new uint8_t[512];
Аноним 06/08/17 Вск 19:17:07  1039239
>>1039235
> new
Туда ли ты зашел?
Аноним 06/08/17 Вск 19:25:04  1039258
>>1039234

Действительно. Спасибо тебе, анон.
Аноним 08/08/17 Втр 12:37:46  1040600
Оказывается с графом на связанных списках вершин и рёбер работать намного удобнее, чем с корявым деревом. Как же охуенно стало!
который-спрашивал-про-траверсинг
Аноним 08/08/17 Втр 19:36:16  1040866
Хочу быть богом си, че делать
Аноним 08/08/17 Втр 19:41:44  1040874
>>1040866
сосать матчасть
Аноним 08/08/17 Втр 20:22:11  1040930
>>1040866
Завтра ищешь в интернете книжку K&R The C Programming Language. Похуй если ничего не поймешь. Затем идешь на cplusplus.com и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию сишного кода - ANSI C, чтобы от зубов отскакивало. Когда напишешь свое первое ядро, по пути изучив ассемблер, покупаешь и изучаешь любой микроконтроллер, рекомендую TMS570. Как переделаешь ядро, чтобы было по крайней мере не монолитным, можешь идти дальше - тебя ждет увлекательный мир байтоебства. Byte stuffing, сверхбыстрые O(1) алгоритмы, экономия тактов процессора. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь собирать бинарники с такими флагами оптимизации, что любая баба будет течь при одном упоминании твоего тулчейна.
Аноним 08/08/17 Втр 20:54:11  1040965
photo2017-08-06[...].jpg (28Кб, 366x270)
>>1040930
Аноним 08/08/17 Втр 21:21:31  1040980
>>1040930
В оригинале было примерно так: и уже через пол года ты будешь мыться так редко, что любая баба будет прикрывать нос от твоего запаха.
Аноним 08/08/17 Втр 21:22:13  1040981
>>1040980
> к тебе будут приближаться бабы
Аноним 08/08/17 Втр 21:26:19  1040983
>>1040930
Как в Си можно экономить такты процессора?
Аноним 08/08/17 Втр 21:30:59  1040984
>>1040983
Писать оптимизированный код, лол!
Аноним 08/08/17 Втр 21:31:18  1040985
>>1040983
_exit/_Exit
Аноним 09/08/17 Срд 09:04:51  1041180
>>1040983
Профайлером.
Аноним 10/08/17 Чтв 10:56:12  1041815
>>1019934 (OP)
сап программач, дайте инфы для проекта нуфагу как работать с файлами и директориями в шиндовс, ну типа удалять создавать папки с реестром взаимодействовать
Аноним 10/08/17 Чтв 11:04:59  1041818
>>1041815
Погуглил за тебя:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364233.aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724880.aspx
Аноним 10/08/17 Чтв 11:18:16  1041826
>>1041818
двачаю ток это для какой-то библиотеки типо #include windows.h?
Аноним 10/08/17 Чтв 11:21:32  1041827
>>1041826
> #include windows.h
Для подключения ведра винды. В C/C++ нет стандартных функций для работы с файловыми системами. А что такое реестр они вообще не в курсе.
Аноним 10/08/17 Чтв 13:22:36  1041896
Анончики, помогите советом. Выбрал C, из-за высокого уровня возможности оптимизации. Планирую в дальнейшем под конкретное железо писать либы под нейросети.
Правильный ли выбор языка я сделал?
Используют ли вообще C для нейросетей?
Аноним 10/08/17 Чтв 13:25:35  1041897
>>1041896
L I S P
I
S
P
Аноним 10/08/17 Чтв 13:30:06  1041900
>>1041897
>L I S P
Можно чуть подробнее? Сколь востребован в нынешних реалиях в Рахе? Сколь востребован за бугром? Жив/Мёртв? Подходит ли для современных нейросетей? Есть на данный момент какие фатальные недостатки синтаксиса?
Аноним 10/08/17 Чтв 13:32:06  1041902
>>1041900
Востребован как и нейросети, т.е. мёртв.
За бугром используется для рекламы топовых железяк и ВЫСОКИХ технологий и выкачивания денег на самоуправляемое дерьмо.
У нас денех не хватает на такое.
Если быть серьёзным, у меня, как видишь, довольно мрачное представление об этом, но ты и вопрос задаёшь такой, что правильно хрен ответишь.
Аноним 10/08/17 Чтв 13:33:40  1041905
>>1041902
> используется
используются*
я про нейросети говорил, а не про язык, в этом посте
Аноним 10/08/17 Чтв 13:33:45  1041906
>>1041902
Под нейросетями я имел ввиду и современные deep learning, которые по сути те же яйца - вид сбоку.
Аноним 10/08/17 Чтв 13:34:58  1041908
>>1041906
Энивэй, это не вглядит, как что-то сишное.
Аноним 10/08/17 Чтв 13:48:15  1041922
>>1041896
С используют для всего.
Аноним 11/08/17 Птн 12:48:24  1042480
>>1038245
>>1038256
Я только вчера понял, как сделать это симпатично.
Просто писать указатель на функцию вида int(type1 param1, type2 param2, ..., typen paramn, void params). В void пихать всё говно.
И для реальных функций, использующих много разных переменных, писать что-то уровня обертки, которая будет запихивать факультативную часть переменных в params.

Вангую, такому дерьму учат на первом курсе шараги. И как меня на работу взяли с такими знаниями?
Аноним 11/08/17 Птн 12:50:50  1042482
>>1042480
void две звездочки.
Аноним 11/08/17 Птн 12:57:42  1042483
>>1042480
https://www.gnu.org/software/libc/manual/html_node/Variadic-Functions.html
Аноним 11/08/17 Птн 13:51:39  1042522
>>1042483
Это не подошло бы. Функции (значительная часть из которых написаны давно и их нельзя изменять) вовсе не обязаны иметь схожую сигнатуру и отличаться лишь последними факультативными параметрами.
Аноним 11/08/17 Птн 13:57:22  1042527
>>1042522
> Просто писать указатель на функцию вида int(type1 param1, type2 param2, ..., typen paramn, void params). В void пихать всё говно.
> И для реальных функций, использующих много разных переменных, писать что-то уровня обертки, которая будет запихивать факультативную часть переменных в params.
> Функции (значительная часть из которых написаны давно и их нельзя изменять) вовсе не обязаны иметь схожую сигнатуру и отличаться лишь последними факультативными параметрами.
Таблетки принял?
Аноним 11/08/17 Птн 14:06:36  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)
И так далее.
Это можно написать с помощью функций с переменным числом параметров?
Аноним 11/08/17 Птн 14:07:49  1042539
>>1042536
https://pastebin.com/6XLeJhRC
Аноним 11/08/17 Птн 14:31:24  1042549
>>1038245
В первом случае ты никогда не узнаешь, завершилась ли функция с ошибкой, а это первое, что хочется проверить после вызова, а результат уже дело десятое.

>>1042536
Ты, конечно, можешь передать любую из этих функций воид-поинтером, но как ты собрался их потом вызывать?
Аноним 11/08/17 Птн 14:36:18  1042556
>>1042549
Для этого приходится оборачивать функции. Вот пример: https://pastebin.com/89YB94Bx
Аноним 11/08/17 Птн 14:42:40  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, ...)
{}
Аноним 11/08/17 Птн 14:43:21  1042561
Насколько легко/сложно будет учить C++ после Си, и с чего стоит начать?
Аноним 11/08/17 Птн 14:46:21  1042563
>>1042561
http://www.ozon.ru/context/detail/id/1273565/
Аноним 11/08/17 Птн 15:13:48  1042570
>>1042563
Зачем использовать архейскую книгу со старыми стандартами?
Аноним 11/08/17 Птн 15:27:07  1042571
>>1042570
>новичок
>современные стандарты
Современные стандарты нигде не используются. Единственная реальное приложение - это Qt. Книга учит писать идиоматический код на С++
Аноним 11/08/17 Птн 15:33:18  1042574
>>1042571
Еще плюс книги - она не большего объема и без воды. А то понимаешь ли, любят они читать толстые учебники вместо писания кода.
Аноним 11/08/17 Птн 15:35:03  1042576
>>1042574
>не большего
небольшего
Аноним 11/08/17 Птн 15:41:25  1042582
>>1042571
>Современные стандарты нигде не используются
Охлол. У меня на обоих работах C11, и мои проекты C11, и опенсорс выбираю, который не застрял на C89.
Аноним 11/08/17 Птн 15:42:00  1042583
>>1042571
>>1042574
>>1042576
Все равно придется читать про современные стандарты, вон уже 20 стандарт скоро выкатят.
Аноним 11/08/17 Птн 15:42:35  1042584
>>1042582
На чем вы компилируете? Даже gcc не поддерживает полностью С11.
И кем ты работаешь?
Аноним 11/08/17 Птн 16:42:31  1042617
>>1042583
И кому он нужен? 99% до сих пор на С99 сидят, им норм.
Аноним 11/08/17 Птн 16:50:56  1042626
>>1042563
Спасибо!



То есть, рекомендуете все же быть в курсе новых стандартов, а работать по старым?
Аноним 11/08/17 Птн 17:57:48  1042651
>>1042584
> gcc не поддерживает полностью
И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.

> И кем ты работаешь?
Говнокодером же.
Аноним 11/08/17 Птн 18:20:35  1042665
>>1042651
> И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.
А что умеет 11 из того, чего люто не хватало на 99? Без этого невозможно было жить?
Аноним 11/08/17 Птн 18:36:05  1042677
>>1042651
>И тут ты такой нам показываешь, что именно не умеет gcc, и почему без этого невозможно жить.
Ну ладно, умеет во все, но threads.h есть только в васянских библиотеках.
Аноним 11/08/17 Птн 18:43:25  1042682
>>1042665
Не хватало static_assert без извращений с массивами отрицательной длины - костылем менеьше, атомики - огромной кучей костылей стало меньше, кроссплатформенный _Thread_local.

> Без этого невозможно было жить?
Жить можно было и без этого. Но тот факт, что язык и компилятор официально знают о существовании тредов (вне зависимости от наличия threads.h), он очень радует.
Аноним 11/08/17 Птн 19:07:35  1042702
А когда в glibc добавят threads.h ?
Аноним 12/08/17 Суб 08:44:38  1042971
>>1041826
Там в каждой странице описания каждой сущности написано, какой заголовок и какую либу надо подключать.
Аноним 14/08/17 Пнд 21:47:12  1044616
>>1019934 (OP)
> Что читать:
>- ООП, например...
Но ведь полноценного ООП на Си нет
Аноним 14/08/17 Пнд 21:49:22  1044618
>>1044616
Проконсультируйтесь с предыдущими тредами на предмет срача о том, считать ли структурное программирование ООП или нет.
Аноним 14/08/17 Пнд 21:55:10  1044619
>>1044618
Структура != объект
Аноним 14/08/17 Пнд 22:14:10  1044627
>>1044618
На первом курсе что-то говорили о наследовании, инкапсуляции и полиморфизме.

Инкапсулировать можно статиком. А наследовать и полиморфить как?
Аноним 14/08/17 Пнд 22:19:10  1044632
>>1044627
Будет считаться наследованием, если создавать структуру потомка просто копируя поля родительской + добавляя свои?
Аноним 14/08/17 Пнд 22:24:12  1044634
>>1044627
есть целая толстая книжка как делать ооп на сях )
но тебе это не нужно
Аноним 14/08/17 Пнд 22:42:37  1044643
>>1044632
>>1044634
>>1044627
>>1044618
>>1044616
Если нужно ООП, то лучше использовать С++ как Си с классами, чем пердолиться с чистым си
Аноним 14/08/17 Пнд 23:51:43  1044691
>>1044643
Далеко не всегда есть чисто техническая возможность использовать кресты.
Аноним 14/08/17 Пнд 23:55:02  1044692
>>1044632
Нужно еще и скопировать все функции с псевдородителем и переделать их для потомка.
Уебанство какое-то получится.

Аноним 19/08/17 Суб 00:24:41  1046593
>>1019934 (OP)
Как с кириллицей работать в C?
Вот достал кириллическую строку char *string из argv и дальше ее нужно сделать uppercase и какой функцией это проделать?
toupper(ch) - игнорирует кириллицу
Ебатся теперь с wchar_t?
Аноним 19/08/17 Суб 00:50:36  1046601
>>1046593
Да.towouuper. и сначала придётся переводить из utf-8 (mbtowc). И устанавливать локаль. Либо пользоваться icu/iconv
Аноним 19/08/17 Суб 00:52:58  1046603
>>1044632
Виртуальные методы придумай как реализовать, т.е., эмулируй vtable
Аноним 23/08/17 Срд 19:16:51  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 (получаю)


Аноним 23/08/17 Срд 19:18:49  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;
}
Аноним 23/08/17 Срд 19:25:09  1049618
>>1049614
Классическая ошибка на 1. Размер массива - 9, чисел ты вводишь 10 (у тебя диапазон включает и 0, и 9). Ты выходишь за пределы массива, и последняя девятка в выхлопе, видимо - значение переменной i или просто какая-то временная переменная.
Аноним 24/08/17 Чтв 19:56:30  1050322
кто нибудь обьяснит как это работает
Аноним 24/08/17 Чтв 19:57:00  1050323
Screenshot48.png (113Кб, 1411x598)
Аноним 24/08/17 Чтв 20:31:01  1050351
>>1050323
Что "это"?
Аноним 24/08/17 Чтв 21:57:03  1050423
Programming in C Дейтейлов это хорошая книга на первый раз?
Аноним 24/08/17 Чтв 23:28:02  1050453
>>1050323
У тебя llvm есть же, куда ещё мингв.
Аноним 25/08/17 Птн 01:53:35  1050545
Аноны, читал K&R, дропнул на средине т.к. мне подогнали бумажного Стивена Прата, которогоя только что дочитал. Есть ли смысл продолжать K&R? Заранее благодарю.
Аноним 25/08/17 Птн 02:53:52  1050564
>>1050545
> K&R
параша
Аноним 25/08/17 Птн 09:38:49  1050615
Нужно работать с питуном через C api, сишечка на уровне laba3, можно просто начинать все сначала учить или из-за специфики задачи часть можно опустить?
Аноним 25/08/17 Птн 17:22:42  1050833
>>1050615
Ну нам-то откуда знать, что именно ты там делаешь, и насколько глубокие знания тебе понадобится. В части взаимодействия с питоном все просто, и примеров овердохуя, но ведь тебе еще и что-то полезное нужно делать?
Аноним 25/08/17 Птн 17:39:26  1050844
>>1050615
> Нужно работать с питуном через C api
Что-то удивительное. Я понимаю нужду в работе с си через петухон, петухон обеспечивает пользователеджружелюбность, си - скорость. Получается быстро и удобно.
Но если поменять их местами, как хочет антоша, разве не получится медленная и сложная в написании программа?
Аноним 25/08/17 Птн 17:46:03  1050849
>>1050844
Посмотри на блендер или саблайм - если написать ядро на C или C++ и скриптовать плагины для него питоном, получается весьма годно.
Аноним 25/08/17 Птн 19:46:21  1050933
>>1050849
Я почему-то решил, что анон выше хотел сделать наоборот. То есть ядро на питоне, остальное на си.
Так (ну, почти так) и в моем говнонии делают: пишут библиотечки на си, вставляют в питон и потом тестируют, рисуют графенчики и прочее.

Но зачем для этого "Учить все сначала или часть опустить"? Вроде достаточно узнать одно слово на C и один пакет для питона.
Аноним 25/08/17 Птн 19:49:18  1050934
>>1050933
Или в промышленном погроммировании сложнее? Черт его знает, никогда им не занимался.
Свалю, пока мне не пояснили, что я долбоеб
Аноним 25/08/17 Птн 21:42:11  1050995
1387042156429.jpg (47Кб, 521x500)
>>1019934 (OP)
Господа, что вы имеете сказать за rust. Капец сям уже не за горами? Вообще стоит его учить/не забывать (если не под встроенные системы пишешь, конечно)?
Аноним 25/08/17 Птн 22:31:41  1051016
>>1050995
https://benchmarksgame.alioth.debian.org/u64q/rust.html
Аноним 26/08/17 Суб 00:22:43  1051046
>>1050995
>Капец
хохол?
Аноним 26/08/17 Суб 08:04:48  1051129
>>1050995
> Капец сям
> rust
try harder
Аноним 26/08/17 Суб 09:09:54  1051138
>>1051016
Справедливости ради, скажу, что Rust станет быстрее, когда завезут оптимизации, некоторые невозможны в C из-за системы типов.

Примеры оптимизаций, которые ожидаются:
1. SIMD(конец этого года)
2. https://github.com/rust-lang/rust/issues/31681 это уже от llvm зависит
Аноним 26/08/17 Суб 09:58:48  1051148
>>1050995
Ну сишке конечно ещё очень долго не капец, но вообще Rust медленно но верно приближается к мейнстриму. И вот чего после Rust делать не хочется, так это прикасаться к C или C++.
Аноним 26/08/17 Суб 10:32:53  1051163
>>1051148
ты и так ни к чему из этого не прикасаешься, только шиллишь на бордах
Аноним 26/08/17 Суб 10:36:03  1051164
В Rust слишком большие бинарники. На си вирмейкеры в нулевых писали программы размером 800 байт. В расте так можно делать?
Аноним 26/08/17 Суб 10:51:22  1051170
>>1051164
Можно. Там по умолчанию jemalloc используется, из-за этого хелловорлды жирные, но можно заюзать системный аллокатор.
Аноним 26/08/17 Суб 11:48:49  1051189
У раста никогда не будут сравнимые с C бинарники, это не является целью языка
Аноним 26/08/17 Суб 16:30:57  1051299
>>1051164
Так ты приплюсуюй стандартную библиотеку сишную динамически линкованную, которая в системе предустановлена и для любой нехелловолдной программы получится совсем не 800 байт.
Аноним 26/08/17 Суб 16:41:18  1051301
Говорят, что прежде чем изучать шарпы всякие и джавы, то лучше начать с простого Си. Так ли это? Или это заблуждение?
Аноним 26/08/17 Суб 16:44:42  1051303
>>1051301
Начни с ассемблера наркоманской выдуманной машины Кнута )
Аноним 26/08/17 Суб 18:19:39  1051377
>>1051303
>наркоманской выдуманной машины Кнута
есть же специально для петухов от Белоснежки Тюринга
Аноним 26/08/17 Суб 19:19:38  1051423
>>1051301
Начни с Хаскеля.
Аноним 26/08/17 Суб 20:42:33  1051492
>>1051163
>только шиллишь на бордах
Пиздюк, поясни батьке значение слова, а то я стар стал для вашего сленга молодёжного.
Аноним 26/08/17 Суб 21:33:45  1051514
>>1051492
Зазывала ты
Аноним 26/08/17 Суб 22:50:40  1051588
Котаны, в некоторых вакансиях значится удивительный язык C/C++. Что это значит? Их устроит человек, знающий только натив си?
Имею 3 месяца опыта. После испытательного срока повысили зарплата АЖ НА 5 ТЫЩ. Охуеть теперь, моя зарплата 30450 рублей.
Начал гуглить схожие вакансии (цос), везде написано либо C++, либо C/C++ а еще питон или матлаб, но это для прототипирования. На таком уровне освоить питон и матлаб можно за 3 дня.
Аноним 26/08/17 Суб 23:24:28  1051624
>>1051588
>На таком уровне освоить питон и матлаб можно за 3 дня
Ошибаешься. Матлаб как язык - унылое говно. Ценность его в тулбоксах (стандартных и сторонних). И вот их грамотно использовать ты не научишься за три дня. А уж тем более не поймешь матана, на котором эти тулбоксы основаны.
Аноним 26/08/17 Суб 23:27:44  1051628
>>1051588
Это может значить что угодно. Может описание вакансии писла безграмотная тупая пизда HR, которая одно от другого не отличает, а может им таки правда специалист по крестам необходим. Пока не прособеседуешься или еще как-то не провентилируешь вопрос - не поймешь.
Аноним 27/08/17 Вск 00:32:42  1051662
>>1051624
В питоне в данном случае аналогично. Он нужен только из-за нумпая, скайпая, матплотлиба и еще пары библиотек.
Аноним 27/08/17 Вск 01:51:47  1051687
>>1049618
Видимо значение переменной i на стеке...
Аноним 27/08/17 Вск 09:55:18  1051808
Чё про MinGW скажете?
Аноним 27/08/17 Вск 10:04:42  1051811
>>1051808
А что тебе тут должны сказать?
Аноним 27/08/17 Вск 17:12:58  1052109
>>1051808
Скажем, что работает. Что тебе еще нужно?
Аноним 27/08/17 Вск 23:19:22  1052307
>>1051811
>>1052109
Какие вы душные ребята тут
Аноним 28/08/17 Пнд 01:44:31  1052346
>>1025376
PVOID
Аноним 29/08/17 Втр 12:55:28  1053219
Пацаны, хочу получить общие знания о языке. Поэтому вопрос такой, че читать - книгу которая у ОПа или взять Дейтелов лучше? На самом деле прохожу cs50 и там советуют ту, что у ОПа почитать начальные главы, а в гайде на лурке пишут про Дейтелов. В общем, какую взять? Где примеры лучше? Актуальность?

А еще такой вопрос, куда пропал фак со ссылками на все языки в начале борды? Или я просто с утра нихуя найти не могу?
Аноним 29/08/17 Втр 13:29:24  1053246
>>1051808
кривая ссанина от васянов, которая выполняет функции компилятора
Аноним 29/08/17 Втр 14:57:27  1053299
>>1053219
> хочу получить общие знания о языке
Керниган и Ритчи
> Актуальность
Журнал "Птюч". Если верить Пелевину, об актуальностях пишут именно там.
Аноним 29/08/17 Втр 15:45:03  1053326
Как понять из таких объявлений:
> char strtok(char str, const char delim);
Что char
str требует массив char str[], а не указатель на строку char *str?
Аноним 29/08/17 Втр 15:46:02  1053327
>>1053326
Аноним 29/08/17 Втр 15:47:13  1053328
>>1053326
строку правильно указывать как const char *str
Аноним 29/08/17 Втр 15:48:06  1053329
ну тоексть строки - const
а массивы - не const
Аноним 29/08/17 Втр 15:49:52  1053330
>>1053329
Понял тебя! Это просто условность, или правило языка?
Аноним 29/08/17 Втр 16:14:08  1053341
>>1053330
Тут скорее правило, чтобы не было неявных ошибок.
Вот например ты передашь строку не как const, а потом захочешь ее изменить. А строки в си неизменяемые, и не каждый компилятор может отследить такую ошибку.
Аноним 29/08/17 Втр 16:39:43  1053347
>>1053326
Никак. С чего ты взял?
Аноним 29/08/17 Втр 17:37:01  1053366
>>1053219
K&R однозначно.
Аноним 29/08/17 Втр 21:42:55  1053553
>>1053219
Я параллельно читаю, шоб пропорционально было. В Дейтейлах по 40 упражнений на главу, что солидно, а K&R легко читается и более информативная и сжатая. Всегда так делаю -- книга, где про всё самое нужное + грузный, аки справочник, учебник с кучей упражнений.
Аноним 29/08/17 Втр 21:58:43  1053579
>>1053553
Не понял, где ты у Дейтеллов упражнения увидел? Вот в K&R да, есть в конце каждой главы + ещё примеры кода, а вот у Дейтеллов только примеры, да и то не очень.
Аноним 29/08/17 Втр 22:04:18  1053591
>>1053553

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

http://index-of.es/Programming/C/Vine,_Michael_-_C_Programming_for_the_Absolute_Beginner_-_2nd_Edition.pdf
Аноним 30/08/17 Срд 01:07:52  1053763
asdasd.PNG (160Кб, 1000x634)
>>1053579
Аноним 30/08/17 Срд 01:08:42  1053764
Пиздец, парни. Пытаюсь писать коротенькие проги в разных IDE и хочу вам сказать, что я за весь день столько говна поел с популярными IDE(VS, Eclipse, NetBeans), что пиздец. Ни в одной нормально не получилось обычный Привет, мир написать. Но тут я установил CodeBlocks и все заработало с первого раза. Почему все так сложно то?
Аноним 30/08/17 Срд 01:10:26  1053768
>>1053764
Потому что это уже для крутышек. КодБлокс для хеллоувордов самое то, потому что "из коробки". Хотя вкатать какой-нибудь компилятор в какой-нибудь Sublime - дело пяти минут, гугл ит
Аноним 30/08/17 Срд 01:13:10  1053771
>>1053764
Всегда знал, что IDE-дкловны весь день только тем и занимаются, что едят г-но со своими IDE.
А мог бы поставить vim и просто писать код.
Аноним 30/08/17 Срд 01:13:15  1053772
>>1053764
Если сложно настроить компилятор в IDE, учить Си рановато. И вообще, на время изучения языка IDE желательно выкинуть, писать в любом блокноте с подсветкой синтаксиса (ну или всякие Sublime тоже подойдут), а компилировать исключительно вручную (заодно будет повод Makefileы осилить).
Аноним 30/08/17 Срд 01:15:25  1053775
>>1053772
>Makefileы осилить
Што там осиливать? Создал Makefile с одной строчкой
CFLAGS=-Wall -Wextra (тут по желанию опции оптимизации/дебаг символы)
и пишешь
make shit
И тебе из shit.c создастся исполняемый файл shit.
Аноним 30/08/17 Срд 01:17:14  1053780
>>1053775
Ты хотел сказать:
CFLAGS=-Wall -Wextra make shit
А вот когда у тебя дерево, да с зависимостями, да с библиотечками, да еще и новые файлы периодически появляются, а ты по-прежнему хочешь олдскульные мейкфайлы, а не cmake, тогда нужно осиливать.
Аноним 30/08/17 Срд 01:24:24  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')
Аноним 30/08/17 Срд 01:41:21  1053815
Снимок.PNG (14Кб, 644x499)
>>1053763
Сделал, кстати, задачку 4.26. Уже минут 20 жду, пока он выловит первый 3.14159. До них получилось сравнительно быстро. У меня алгоритм получился такой, что результат для ряда из n требует (n^2 + n)/2 операций т.е. сумма арифметической прогрессии до n с шагом один (пикрелейтед). То есть, порядок роста у алгоритма полиномиальный, потому что он много лишних вычислений при новом j внешнего цикла. Говно, конечно, но мне лень переписать пару строчек, чтобы хранить последнее состояние ряда и я хочу спать.
Аноним 30/08/17 Срд 01:54:08  1053820
Снимок.PNG (28Кб, 1116x454)
>>1053815
Хотя, мне стало интересно, что там получится, поэтому я тупо убрал верхний цикл, переписал переменные внутреннего под него и таким образом получил линейный порядок роста, посчитав результат за секунду.
А вы говорите, SICP не нужен
Заёбно было эти приближения ручками считать в каком-нибудь V A.D., наверное.
Аноним 30/08/17 Срд 02:09:39  1053824
>>1053815
> А вы говорите, SICP не нужен
Мы говорим. Потому что никому в голову не придет делать решение, как в твоем предыдущем посте. Это элементарный здравый смысл, для этого даже про О-большое знать не нужно.
Аноним 30/08/17 Срд 02:12:39  1053825
>>1053820
>А вы говорите, SICP не нужен
Там даже про call-with-current-continuation не рассказывают.
Аноним 30/08/17 Срд 02:13:05  1053826
>>1053824
Там было ещё задание на вывод таблицы с рядом из одного элемента, двух, трёх, etc. Мне это понадобилось, чтобы отслеживать и выводить изменения переменных для наибольшей детальности, верхний цикл был до 10. Так что ну зря ты так.
Аноним 30/08/17 Срд 10:45:12  1053923
Анчоусы, минуточку внимания.

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

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

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

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

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

2) Парсить symtable elf-файла на наличие функций с заданным параметром name. Этот вариант видится мне лучше, ибо загрузчик будет точно знать, есть ли обработчики прерываний или нет. И если нет, можно просто отключит прерывания. И не будет слепого перехода туда, где возможно ничего нет.
Но я замучаюсь парсер писать на асме.
Аноним 30/08/17 Срд 17:46:32  1054194
>>1053763
Так, кажись я начинаю догонять. У тебя же издание книги старое, там где в конце плюсы рассматриваются? Если я опять не угадал, напиши год и издательство.
Аноним 30/08/17 Срд 18:12:22  1054216
>>1054194
Угадал.
Аноним 30/08/17 Срд 21:45:17  1054402
>>1053923
> Но я замучаюсь парсер писать на асме
Кто тебя заставляет писать на асме?

> как сообщить бутлоадеру адреса этих функций обработки прерываний
А цели у загрузчика какие? Загрузить твой собственный образ и только твой? Тогда фиксированные адреса в тему. Чужие бинарники поддерживаются? Можешь сделать по образу и подобию UEFI: передавать в точку входа загружаемого файла аргументом список сервисов загрузчика, в числе которых функция установки кастомной таблицы векторов прерываний.
Аноним 31/08/17 Чтв 00:01:22  1054461
Котаны, нашел программу с таким прототипом:
int func(бла-бла-бла, double date0, double date1, бла-бла).
Мне сказали, что date0 и date1 -- это просто разбиение одного времени на 2 числа для большей точности. И якобы это более-менее стандартная операция.
А как именно разбивают? На целую и дробную части? И для того, чтобы все работало, отдельно арифметику писать?
Если это на самом деле стандартное действие, не подскажете, где про это прочесть?
Аноним 31/08/17 Чтв 00:15:48  1054466
>>1054461
Впервые вижу, чтобы разбивали плавающую точку, да и точности в double овердохуя для дат, да и long double завезли. Вот при передаче double на x86-машинах, он как раз разбивается (компилятором, а не вручную!) и передается в качестве двух 32-битных (целых!) значений, т.е., используются два push. А что конкретно происходит в твоей библиотечке, нахуя так сделано, и какой там формат у каждой части, можно узнать, только посмотрев в код. Это никаким местом не стандартная операция.
Аноним 31/08/17 Чтв 00:49:37  1054491
>>1054466
Благодарю. Буду спрашивать у человека, написавшего эту хуету.
Аноним 31/08/17 Чтв 10:32:40  1054640
>>1054402
>Кто тебя заставляет писать на асме?
Хм, в действительности пожалуй никто не заставляет.
>А цели у загрузчика какие? Загрузить твой собственный образ и только твой? Тогда фиксированные адреса в тему. Чужие бинарники поддерживаются?
Да, хотел сделать так, чтобы чужие файлы тоже поддерживались. А теперь даже хуй знает, как лучше сделать. Оставить обработку прерываний и исключений только в бутлоадере. Ведь по идее юзера вообще не должно ебать, как там они обрабатываются.
>Можешь сделать по образу и подобию UEFI: передавать в точку входа загружаемого файла аргументом список сервисов загрузчика, в числе которых функция установки кастомной таблицы векторов прерываний.
Слишком сложна. Но в любом случае спасибо, попробую почитать про принцип работы UEFI.

Мне вообще интересно, как всю эту ёбань с загрузчиками и программами делают нормальные люди. Так как понимаю, что изобретение велосипеда с квадратными колёсами - хреновый и сложный путь.
Аноним 31/08/17 Чтв 10:35:39  1054641
>>1054640
>>1054402
Забыл добавить, что на асме пишу, потому что бутлоадер находится в ридонли области. В итоге для временного хранения данных использую регистры в основном, реже стэк. Но, наверно, в сишечке так тоже можно делать.
Аноним 31/08/17 Чтв 14:20:46  1054756
Привет, котоны. Интересует такой вопрос: можно ли снять дамп памяти во время выполнения программы и извлечь из него значения переменных?
Аноним 31/08/17 Чтв 18:53:52  1054982
>>1054756
Можно. gdb/windbg умеют дампы открывать. Тебе под какую ос?
Аноним 01/09/17 Птн 09:03:03  1055316
>>1054982
Под линукс.
Аноним 01/09/17 Птн 09:28:09  1055334
>>1055316
Вы здесь будете или в докер завернуть с собой?
Аноним 01/09/17 Птн 10:17:27  1055376
>>1055334
Не понимаю о чем ты.
В общем, для теста я сделал следующее:
1. Написал простую программу на C
2. Скомпилировал с флагом -g
3. Запустил
4. Снял дамп с помощью gdb -q - <pid>
5. Открыл в gdb core file
Как дальше смотреть содержимое стека я не знаю. Если запускать программу сразу через gdb и ставить брейкпоинты, то через info locals все переменные видны, но как их посмотреть в дампе я без понятия - на команду info locals отладчик говорит что таблица символов не загружена.
Аноним 01/09/17 Птн 11:47:33  1055429
>>1019934 (OP)
О, шикарно мой тред!
Учусь по книжке Брайана и Ритчи(англ версию, русские сосут хуй), я решил самостоятельно все задачки до той, где нужно подменять несколько пробелов одним. Первую задачку в теме, где нужно вести счёт табов, пробелов и символ новой строки решил сразу же, вторая пошла по пизде, сидел писал разные типы псевдокода, пытался спагетти-кодом придумать что-то, но в итоге залез в стэк и увидел решение, от которого у меня загорела жепа, однако у меня голова уже не соображала, поэтому думаю тут тупость простительна. Ничего страшного в том, что не можешь решить какую то задачку? Как поступать в таком положений? Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?
Алсо, что стоит знать об GCC? В первый день потратил часы читая вики по компиляции на винду, в итоге залез на вики Линукса и ввел в cmd просто gcc и название программы как было написано и все заработало. Вот хотел спросить, что нужно о GCC знать?
Аноним 01/09/17 Птн 12:17:02  1055451
>>1055429
> Вот хотел спросить, что нужно о GCC знать?
Ты имеешь в виду ключи?
Аноним 01/09/17 Птн 14:02:02  1055496
>>1055451
Я блять, искренне извиняюсь, но я имел ввиду компилятор. В первый раз я его, блядь, пытался запустить, нихуя не понял, а ведь это лучший компилятор даже в сравнений с любой IDE, да и как новичок я обязан знать эту базу. Полез в вики читать, а там много всего.
https://sourceforge.net/projects/mingw/?source=navbar
Стоит ли полностью наворачивать вики?
Аноним 01/09/17 Птн 14:36:19  1055513
>>1055429
>Ничего страшного в том, что не можешь решить какую то задачку?
Ничего страшного.
>Как поступать в таком положений?
Сначала подумать, если все равно не получается, то внимательно изучить решение и попытаться понять его.
>Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?
Можно и так
>Просто скипнуть и вернуться потом, или все же можно посмотреть решение когда совсем уже заебался?
Ставь mingw-w64 и просто компилируй в gcc как на линуксе. Или можешь украсть/купить CLion
Аноним 01/09/17 Птн 15:17:17  1055527
>>1055496
>лучший компилятор даже в сравнений с любой IDE
Ты не понимаешь чем компилятор отличается от IDE?
Аноним 01/09/17 Птн 15:19:53  1055528
>>1055513
>попытаться понять его.
Так и сделал.
>>1055513
>Ставь mingw-w64
Я его и поставил лол! Там дают туеву хучу эмуляторов GNU-like терминалов и обычную версию MinGW64 для винды. Я ее установил, но не мог додуматься как пользоваться, в вики каша, а я и так заебанный.
>>1055527
IDE представляет сферу разработки, со встроенным библиотеками, компиляторами и графическим интерфейсом, а комплилятор преобразовывает его язык в низкоуровневый. Если, блядь, я правильно понимаю.
Аноним 01/09/17 Птн 15:24:07  1055529
>>1055528
О, надо бы еще вики почитать по всей этой хуйне, база же. Алсо либо в силу своих припизднутых глаз, либо это действительно так - Не вижу эту самую базу, которую должен знать погромист. Ну, типа этого
https://en.wikipedia.org/wiki/Compiler
https://en.wikipedia.org/wiki/Programming_language
https://en.wikipedia.org/wiki/Executable
Ребят, кто нибудь знает, где можно почитать про все это?
Аноним 01/09/17 Птн 15:37:00  1055536
Есть ли хорошие гиды по различиям между С++ и С для плюсовиков?
Аноним 01/09/17 Птн 15:41:29  1055542
>>1055536
Да, в шапке.
Аноним 01/09/17 Птн 15:46:35  1055547
>>1055528
Так я понять не могу, что ты хочешь знать про компилятор?
Аноним 01/09/17 Птн 15:51:09  1055559
>>1055547
Я прошу прощения за ебаное мозгоебство, но меня смущает вот это:
https://sourceforge.net/p/mingw-w64/wiki2/FAQ/
Я должен знать все, что написано здесь? Типа: How do I compile multilib toolchain?
Аноним 01/09/17 Птн 15:52:26  1055561
>>1055528
>Я ее установил, но не мог додуматься как пользоваться
Добавить в PATH и юзать как обычный gcc из командной строки
Аноним 01/09/17 Птн 15:59:43  1055565
>>1055559
Мультилиб может и не нужен, но как подключать сторонние либы, хедеры, линковка, флаги компиляции скорее всего должен знать.
Аноним 01/09/17 Птн 16:30:46  1055581
>>1055561
Спасибо.
>>1055565
Ну я так понял, когда в этом нужда появится.
Аноним 01/09/17 Птн 16:44:12  1055590
14788938129490[[...].jpg (31Кб, 317x372)
>>1055496
>блять
>блядь
ПЕРЕКАТ Аноним # OP  01/09/17 Птн 20:06:00  1055735
ПЕРЕКАТ

>>1055733 (OP)
>>1055733 (OP)
>>1055733 (OP)
>>1055733 (OP)

ПЕРЕКАТ
Аноним 01/09/17 Птн 20:16:44  1055748
>>1019934 (OP)
>ООП, например
А что, в С (не С++) завезли ООП?
Аноним 01/09/17 Птн 20:19:04  1055751
>>1055748
ООП может быть хоть на асме, но для некоторых ООП == классы.
Аноним 01/09/17 Птн 20:29:27  1055761
>>1055751
То есть в С классов нет
Так почему в треде C ссылки на книжки по C++?
Аноним 01/09/17 Птн 20:32:20  1055763
>>1055761
Где ссылки на C++?
Аноним 01/09/17 Птн 20:38:04  1055772
>>1055763
>ООП
Аноним 01/09/17 Птн 20:38:38  1055773
>>1055772
Попробуй открыть книгу и прочитать хотя бы название.
Аноним 01/09/17 Птн 20:43:04  1055782
>>1055773
В ней нет названия.
Аноним 01/09/17 Птн 20:54:49  1055798
ooc.png (14Кб, 415x248)
>>1055782
Заебал. Это ООП на Си с помощью макросов, магии и извращений. Поэтому книга в шапке.
Аноним 01/09/17 Птн 21:18:09  1055835
>>1055798
А зачем вторую копию скачивал - она же у тебя уже есть на диске?
Аноним 02/09/17 Суб 22:11:22  1056298
92122071largepo[...].jpg (90Кб, 900x600)
>>1051016
И чего? Сайт этот заставляет всех решать задачу одним и тем же алгоритмом. В реальной жизни такого ограничения нет. И даже в таких условиях почти на всех задачах только чуть-чуть медленнее. Потора-два раза это именно чуть-чуть. Это не в десятки раз. Сейчас чтоб дрочить на порнуху в инете закупают домой пеки эквиваленые по производительности мейнфреймам недавнего прошлого. Купить больше или более дорогое железо для кода на rust дешевле и проще, чем писать, отлаживать и сопровождать "крестовый" код. Мало кому в не-embedded мире действительно критически необходим каждый процент производительности.
Аноним 02/09/17 Суб 22:11:49  1056299
92122071largepo[...].jpg (90Кб, 900x600)
>>1051016
И чего? Сайт этот заставляет всех решать задачу одним и тем же алгоритмом. В реальной жизни такого ограничения нет. И даже в таких условиях почти на всех задачах только чуть-чуть медленнее. Потора-два раза это именно чуть-чуть. Это не в десятки раз. Сейчас чтоб дрочить на порнуху в инете закупают домой пеки эквиваленые по производительности мейнфреймам недавнего прошлого. Купить больше или более дорогое железо для кода на rust дешевле и проще, чем писать, отлаживать и сопровождать "крестовый" код. Мало кому в не-embedded мире действительно критически необходим каждый процент производительности.
Аноним 03/09/17 Вск 22:39:54  1056822
Парни, а чего в VS теперь на C писать нельзя? Или чего не так с ней? Кст кто-то может ссылку дать на Кочана на английском 3е издание или 4е, если есть. Чет в гугле найти не могу живых ссылок. Только на русском.
Аноним 03/09/17 Вск 22:52:17  1056832
Как вообще пользоваться ебучим терминалом? Я так понимаю его придумали просто, чтобы программы запускать и все? Там же ничего написать нельзя?
Аноним 04/09/17 Пнд 03:40:56  1056889
>>1056822
Можно. Создай новый Win32-проект, добавь C++ файл с расширением .c. Если книжку не найдешь - читай Прату.

>>1056832
Да, терминал нужен, чтобы запускать программы. Писать код удобнее в текстовом редакторе, но если ты упорствуешь, загугли всякие ed/vi/vim, edlin и edit в винде есть опять же.
Аноним 04/09/17 Пнд 15:12:55  1057017
>>1056889
Допустим я поставил терминал и в книжке, которую я читаю пишут, что надо выполнить программу. Я выполняю и терминал пишет, что не может ее найти. Это значит, что бинарника нет в PATH, который я указал, так? У меня стоит cygwin. В нем же ниче не написать?
Аноним 04/09/17 Пнд 16:17:55  1057048
>>1057017
Перекат: >>1055733 (OP)
Аноним 04/09/17 Пнд 20:06:23  1057139
>>1057017
А зачем тебе cygwin вообще? Это мерзкие костыли, с которыми можно смириться лишь заради компиляции некоторых программ, завязанных на POSIX. Если тебе никсовое окружение нужно - возьми MSYS или лучше MSYS2. Если тебе компилировать - поставь отдельно mingw или clang+mingw.
Аноним 07/09/17 Чтв 11:25:13  1058503
>>1029086
Гугли RTTI и как его отключить.
Аноним 07/09/17 Чтв 19:02:19  1058737
>>1058503
Умный самый? RTTI я отключал. Мало того, я пытался компилировать .c-файлы, в которых RTTI не может быть по определению - результат тот же. Мало того, RTTI не имеет никакого отношения к отладочной директории, RTTI хранится в секции данных, рядом с таблицами виртуальных функций. Мало того, со включенным RTTI в предыдущих версиях VS отладочной директории в бинарнике нет. Такие дела.
Аноним 08/09/17 Птн 23:04:19  1059257
Как бороться с лимитом на размер чисел?
Простой пример
1/243 = 0.0041152263374485596…

long double a = 1.0/243.0;
printf("%.24Lf\n", a);
Результат:
0.004115226337448560020582…
Складывается впечатление, что 855 округляется до 856, а дальше сплошной рандом идет
Аноним 09/09/17 Суб 00:17:26  1059288
>>1059257
> long double
> 1.0 / 243.0
Ты считаешь в даблах, а не в long double. Используй суффикс lf хотя бы у одного из операндов. И да, точность ограничена, ничего ты с этим не поделаешь.

Алсо, у нас >>1055733 (OP) НОВЫЙ ТРЕД ДАВНО.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 531 | 28 | 218
Назад Вверх Каталог Обновить

Топ тредов
Избранное