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

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

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

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

Что читать:

- Классика от Отцов: http://www.cypress.com/file/56651/download
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

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

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

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

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

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

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? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

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. Kochan "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

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

- №16: https://arhivach.org/thread/235327/
- №17: https://arhivach.org/thread/237852/
- №18: https://arhivach.org/thread/243867/
- №19: https://arhivach.org/thread/248880/

Шапка: http://piratepad.net/bJ1SdmkZyu
1345 Кб, 1000x1400
#2 #959645
>>959643 (OP)
Освятил
#3 #959653
#ifdef НОВЫЙ_ТРЕД
освятил_тред(959643, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
#endif
959655959660
#4 #959655
>>959653
#include <stdarg.h> сцуко!
#5 #959660
>>959653
Хуевое проектирование.
sage #6 #959661
>>959643 (OP)
Имхо, вот эта книга неплохая для вкатывальщиков: http://shop.oreilly.com/product/0636920015482.do
Осиливал в оригинале, про качество перевода не знаю.
Хотя обложка и оформление слегка ебанутые
959667959746
#7 #959667
>>959661
Нет, лучше всего Прата, а затем Керниган-Ритчи
959671
#8 #959671
>>959667
Судя по оглавлению, книжка, по крайней мере, лучше чем hard way.
#9 #959684
Почему в шапке до сих пор не было книги по указателям?
http://shop.oreilly.com/product/0636920028000.do
959699
sage #10 #959699
>>959684
Книга? По указателям? Следующей будет книга по булевой логике, хотя подожди-ка...
959903
#11 #959746
>>959661
А что там вкатываться в си то? Открываешь стандарт и читаешь, хули, это не с++
Не можешь сходу осилить стандарт, учишь сначала питон
959906
#12 #959903
>>959699
я вот такую годноту там нашел:

#define RAII_VARIABLE(vartype,varname,initval,dtor) \ void _dtor_ ## varname (vartype v) { dtor(v); } \ vartype varname __attribute__((cleanup(_dtor_ ## varname))) = (initval)

автодестпуктор для мэлока
960088
#13 #959906
>>959746
в плюсах тоже самое
960088960148
#14 #960087
Сегодня ты сосал хуи
А завтра пишешь ты на Си
#15 #960088
>>959903

>__attribute__



Это из какого стандарта?

>>959906

Стандарт плюсов в два раза толще. Чтобы из 1300 страниц выудить полезную информацию о том, как писать на языке, надо иметь недюжий ум.
960097
17 Кб, 242x257
#16 #960090
анон хэлп. как посчитать максимальную связку из нулей. у меня получилось посчитать общее количество нулей.
как мне сравнить одну последовательность нулей с другой?
960094960098
#17 #960094
>>960090
Как обычно ищут максимум: заведи max_length = 0, max_offset = -1, а когда очередная последовательность нулей закончится, сравни ее длину с max_length, и если она больше, запомни новую max_length и офсет последовательности (если нужно). Алсо, сейчас у тебя просто количество нулей считается, а тебе нужно детектить переход между ноль-неноль и обратно.
#18 #960097
>>960088

>__attribute__


из гцц

>плюсов в два раза толще


пишу все гуи на кют ложив хуй на стандарты, все отлично.

стандарты это мокрописька для хипстеров.
960122
#19 #960098
>>960090
else break;
#20 #960118
>>959643 (OP)
Ананасы, как правильно сделать проприетарную bare metal либу? То бишь нужно скомпилять код и поставлять в виде какого-нить бинарного формата + хедер с прототипами функций, доступных пользователю и всё это добро должно нормально линковаться. Очевидная статическая либа из объектных файлов не подходит, т.к. таким способом будут светиться все внешние функции/переменные из объектных файлов, что довольно некрасиво.
960124
#21 #960119
Почему когда я смотрю обычные заголовочные файлы stdio.h, например то вижу тонны дефайнов, несколько объявлений функций, а самих функций не вижу? Где они?
960120960154960750
#22 #960120
>>960119
Скомпилированы и лежат скорее всего в виде shared либы где-то в /lib
#23 #960122
>>960097

>пишу все гуи на кют ложив хуй на стандарты, все отлично.


ты какой-то даун совсем отбитый, советую рассмотреть суицид
#24 #960124
>>960118
Посмотри на sqlite amalgamation - собирай (скриптами) гигантский сорс и компилируй его (ну или инклудь .c в .c). Не делай символы внешними, используй static где только можно.
960127
#25 #960127
>>960124
Неужели это всё нельзя сделать силами конпелятора или линковщика и нужно городить костыли? Ведь shared либы для больших операционок легко чистятся от излишних экспортируемых символов, даже можно всякими __attribuute__ в gcc явно задавать, что нужно всем видеть, а что – нет.
960128960132
#26 #960128
>>960127
Может лучше просто скомпилировать либу в готовый машинный бинарник, написать функции-обёртки (т.е. обертки тех функций, которые должны эскпортироваться), которые вызывают _настоящую_ функцию по конкретному адресу, а также написать скрипт для линковщика?
#27 #960132
>>960127
Можно сделать средствами линковщика. Можно перепидорасить объектники как угодно, но подход sqlite требует меньше всего трудозатрат.
960176
#28 #960148
>>959906

>в плюсах тоже самое


Только стандарт си++ никто толком даже из комитета не читал. Была же история, что какой-то чувак в стандарт по шаблонам написал стишок и его никто не заметил, т.к. никто не читал. В итоге так и приняли стандарт вместе с этой хуйней
960167
Dmitry #29 #960154
>>960119
Мне тоже нудобно, хотел на реализацию глянуть и обосрался.
960155
Dmitry #30 #960155
>>960154
*неудобно
960161
sage #31 #960161
>>960155
Ну наконец-то признался, что все эти твои имаксы говно.
960183
#32 #960167
>>960148
Даже не поленился и нашел: страница 362 стандарта 2013 - пункт 14.7.3 Explicit specialization, подпункт 7, самый конец абзаца:

When writing a specialization, be careful about its location; or to make it compile will be such a trial as to kindle its self-immolation.
960754
#33 #960176
>>960132
В общем-то всё получилось намного проще: нужно всего-то сделать
ld -r куча_объектных_файлов -o yoba.o
strip yoba.o --strip-all --discard-all (или какой-либо другой способ избавиться от неугодных символов)

Подход с запихиванием всех исходников в один файл хоть и полезный для оптимизаций, но нахуй не нужен в моем случае по крайней мере пока хватает места на флешке, лол
#34 #960183
>>960161
Neosilator please.
960200
sage #35 #960200
>>960183
Я? У меня никаких неудобств из-за хедеров не возникает.
960215
#36 #960215
>>960200
Тупорылый петухевен, у тех двух ньюфагов тоже нет никаких неудобств с просмотром хедеров. До них не доходит, что реализации функций в хедере уже скомпилированны и не доступны для просмотра.
этот дебил у вас тут - местный клоун?
961662
#37 #960420
https://arhivach.org/thread/248880/#959007

Я вчера ночью придумал решение.

Короче: http://www.stanford.edu/class/ee398a/handouts/papers/WittenACM87ArithmCoding.pdf

Длинее: Хранить выборки в массиве ты не сможешь, если число будет слишком большим (число выборок - примерно N! ). Тебе нужно закодировать упорядоченную выборку из набора числом, и потом по требованию разворачивать выборку в строку или ещё во что (то есть, у тебя массива не будет. У тебя будет функция).

Упорядоченная выборка некоторого размера M из набора N - это вектор из M чисел (индексов в наборе) от 1 до N-k где k - номер числа в векторе (число оставшихся вариантов зависит от того, сколько элементов уже выбрано, и каждое число обозначает номер выбранного продолжения в списке оставшихся).

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

Например, выборка {1,7,4,8,9} из {0 ... 9} будет представлена дробью
1/(101)+6/(910)+3/(8910)+5/(78910)+5/(6789*10)
10 - размер набора.

EOL-символ тебе не нужен.
960422
#38 #960422
>>960420
P.S. Если тебе нужно объединить выборки всех размеров в одну, то EOL-символ тебе понадобится.
#39 #960426
>>959643 (OP)
На вашем говне еще что-нибудь пишут? Кроме корявых драйверов к какому-нибудь линуксу?
960449960460
#40 #960449
>>960426

>вашем говне


на нем написано ваше говно
Dmitry #41 #960460
>>960426
Все программы от А до Я на C99/C11 пишутся.
#42 #960661
Кто-нибудь ковырял MetaC? Годная штука?
#43 #960711
>>959643 (OP)
Аноны, у меня сортировка данных, вывел сам процесс в функцию, нужно посчитать кол-во обменов и перестановок. Можно задать цикл со счетом обменов/перестановок в самой функции, чтобы потом вывести это кол-во в консоль?
#44 #960750
>>960119

>Где они?


Можешь купить у майкрософт.

>Source code for runtime libraries is included in Visual C++[15] for reference and debugging (e.g. in C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src).


Как это устроено у красноглазиков не знаю, но думаю надо будет сделать apt-get install libc6-dev или нечто подобное.
960792
#45 #960754
>>960167
В голосяндру.
#46 #960764
Фолкс, где искать работу? Пытаюсь учить всякие джавы, пхп... такая залупа хз.. не нравится мне всё это. С/С++ ближе, но работы чёт мало (или я просто не там ищу). Если и есть вакансия, то требуется кулхацкер со стажем пицот лет, и чтоб пришёл и порядок навёл без помощи. А где взять работу совсем зелёненькому, как я? Я вот недавно откинулся с универа. Не нуб, но и не чел, который придёт и возьмёт всё под свой контроль. Как быть? Нахуй идти не хочется.
#47 #960779
>>960764
Обычно у вуза тем более технического есть программы содействия трудоустройству выпускников, в твоем нет?
960818
#48 #960782
>>960764
Дрочи электронику и иди пилить прошивки или ищи более нормальные языки. С поиском работы на Си в России все крайне хуево, всем нужны веб-макаки.
960818
#49 #960785
>>960764
Ну щас тенденции такие. Байтоебство осталось в 90-нулевых, сейчас в рашке онли тырпрайз, делать сайты или писать приложения под ведроид. Но ты всегда можешь завести трактор и работать в нормальной ит компании, где еще пишут на плюсах/си - разные интол(интернет вещей), геймдев компании и тд
960818961219
#50 #960792
>>960750
In any linux stdlibc installed by defaul in /lib64 headers in /usr/include
#51 #960818
>>960779
>>960782
>>960785

Спасибо, посоны, за эдвайсы. В вузе вроде были приколюхи в виде летних школ, курсов там каких-то, но я всё проебал, занимаясь полезными (нет) делами. Теперь вот чекнул вакансии, а там всякие модные слова и ваще всё то, что я не знаю и не умею. Прикольно вышку получил, хех. Не гоню на вуз, что типо зря учился, но кушать тоже хочется.. вот и думаю - что делать и куда идти.
#52 #960906
Я правильно текст из файла в строку пидорю? https://a.vidga.me/sgeyey.c
960911
#53 #960911
>>960906
1) Закрывать-то файл зачем? Сделай rewind или fseek(file, 0, SEEK_SET) после ftell().
2) Ты уже знаешь размер, но читаешь посимвольно. Делай сразу fread всего файла, пусть рантайм разбирается и читает так, как ему там удобнее читать.
3) Выделяешь n байт, читаешь n байт. В результате строка у тебя останется не завершенной нулем (если в файле нулевой байт не встретится). Выделяй n+1, явно делай str[m] = '\0' после чтения, где m = количество прочитанных байтов.
5 Кб, 501x239
#54 #960935
>>959643 (OP)
Добрый вечер, могу ли я в функцию ввести цикл для подсчета количества сравнений и обменов?
960945960957
#55 #960945
>>960935
Хуй знает, что это и зачем, но либо считай руками (для сравнений счетчик можно прямо в сравнении увеличивать: if (compare_counter++, foo < bar) { ...), для обменов тем более никаких проблем. Либо сделай отдельные фукнции compare и exchange, и увеличивай счетчик в них.
#56 #960955
Хочу изучить с++ чтобы делать игры. В 2017 он еще актуален для гейдева?
960963960964
#57 #960957
>>960935

> Кол-во сравнений


Это же просто обмен двух элементов местами. К чему этот комментарий? Массивы чтоль сортируешь?
#58 #960963
>>960955
В 2017 он единственный язык, на котором пишут игры.
#59 #960964
>>960955
Актуален, но лучше бери Unity и C#, быстрее вкатишься, а не погрязнешь в хелловорлдах и движкостроительстве. Алсо, тут тред не про кресты, вообще сходи к детям в /gd/ лучше.
960967
#60 #960967
>>960964

> лучше бери Unity и C#


Попробовал сначала на жаве, но 90мб в озу на перемещение спрайта меня как то оттолкнуло. Юнити тоже выдает много мусора. Схожу в общем посмотрю что в /гд говорят.
960972960973
#61 #960972
>>960967
В юнити и вообще готовых движках ты нормального потребления не добьёшься, да и производительности нормальной тоже. Зато программить на этом сможет даже ребёнок, всё максимально просто.
Если же хочешь, чтобы ресурсов мало выжирало и летало, то пердоль OpenGL/Vulkan на Си/Крестах, но на этом ты само-собой ультра йобу в два клика не сделаешь, тут думать нужно.
960978
#62 #960973
>>960967

> 90 мб


Дай угадаю, а без спрайта хелловорлд ты не мерял? А чем всякие commit/reserve/heap отличаются не знаешь? Ничего плохого в 90 мб нет, если это не 90 мб на каждый спрайт. Тот же майнкрафт на моем старом 2 ядраодин целерон-2 гига середины 2000х упирается в проц, а не в память.
#63 #960978
>>960972
Вооот, уже начинают советовать делать свой движок... да еще на вулкане. Ты сам свой движок закончил? Ты представляешь, сколько нужно итераций "сжечь и переписать", чтобы у человека без предыдущего опыта в движке появилась архитектура? Сколько человекочасов, чтобы добиться современного уровня графики? Сколько соломки нужно подстелить для legacy-дров с багами? Сколько времени можно было бы потратить на разработку самой игры?
Сам пилю йобу на С в свободное время, но я старый и глупый, не повторяйте моих ошибок.
960983961043961078
#64 #960983
>>960978
Если у него есть желание, то не вижу проблемы. В любом случае я сказал как есть:
Движки — быстрая разработка, тормоза, высокое потребление памяти.
Велосипеды — долгая разработка, высокая производительность, маленькое потребление памяти.

Алсо, если он хочет пилить 2D игорю, то тут всё просто.
#65 #961043
>>960978

>Сам пилю йобу на С в свободное время


Покажи скриншоты или что у тебя есть. Интересно.
мимо-крокодил
#66 #961078
>>960978

>legacy


Ненужно совершенно.

>дров


mesa-vulkan твои дрова, сам движок под wayland пили.

>человекочасов


Ты же не йобу собрался разрабатывать, сделай простую либу чтобы импортировались .blender файлы и все.
961086
sage #67 #961086
>>961078

> legacy Ненужно совершенно.


Поэтому удел линукса - сервера.

> mesa-vulkan твои дрова, сам движок под wayland пили.


А почему это плохой совет, читай двумя строчками выше.

> сделай простую либу чтобы импортировались .blender файлы


> простую либу


> простую


> .blender файлы


А чего не .mb сразу?

Неа, совсем не палишься
#68 #961203
Про типы с точной шириной типа int16_t, uint32_t вики говорит, что не все системы их поддерживают. Кто-нибудь навскидку назовёт в пример подобную систему?
961217961314
#69 #961217
>>961203
Системы, где байт не кратен 8 битам
961223
#70 #961219
>>960785
Живу в рашкованском миллионнике и байтоёбствую под эмбедед и не только в продуктовой компании. ЧЯДНТ?
961241
#71 #961223
>>961217
А много таких систем-то? Из популярных я имею в виду.
Не, ну я предполагал, что Сетунь-70 не поддерживает подобное, но из современных, есть какие-то значимые примеры?
Avr могу предположить, но там только в силу размера же.
#72 #961241
>>961219
Что за компани? Или это типичная оборонка?
sage #73 #961314
>>961203

> Кто-нибудь навскидку назовёт в пример подобную систему?


DSP, где память адресуется 24- или 32-битными словами?
#74 #961315
>>960764
У нефтянки и прочих недрокопателей софт до сих пор пишется и поддерживается на с/с++.
#75 #961662
>>960215
Насколько я помню этот дебил бородатый и самый скилловый тут, а ты можешь пройти на хуй
9 Кб, 549x302
4 Кб, 235x140
#76 #961674
Помогите написать генератор, типа питоновского/шарповского yield как на пикрелейтед. Код ниже почему-то вылетает с ошибкой:

#include <stdio.h>
#include <setjmp.h>

jmp_buf env_generator;

int range_generator(int max)
{
int val = setjmp(env_generator);
while (val < max)
{
val++;
return val;
}
return -1;
}

void main()
{
for (int result = range_generator(10); result >= 0; longjmp(env_generator, result))
{
printf("Result: %d\n", result);
}
}
961696961790
#77 #961696
>>961674

>генератор, типа питоновского/шарповского yield


нахуя? если нужно нечто подобное, используй итераторы, а не такие кривые велосипеды
961698
#78 #961698
>>961696
Какие итераторы? Мне нужно на чистом Си.
Генератор, который выдавал бы значения внутрь цикла for и while (например, числа от 1 до 10) без хранения их в памяти.
#79 #961709
>>961698
Всё равно тебя не понимаю.

1) НАХУЯ тебе этот генератор в C??

2) setjmp - эту ебанину крайне редко используют в очень узких задачах. Ты уверен, что это надо в твоём проекте? Что ты пытаешься сделать?
961735
#80 #961711
>>961698

>без хранения в памяти


Манямирок, отдельно функция и переменная не подойдет?
Если цикл один то и функции не надо.
Но вот итераторы раз они тебе нужны.
http://stackoverflow.com/questions/4961860/iterator-in-c-language#4962050
961723
#81 #961712
>>961698
В С так не делается, не переноси свои ебанутые привычки с первого языка на все остальные, учи C и как на нем пишется код, а не переводи в своей голове с питона.
961714
#82 #961714
>>961712
как хочет так пусть и делает. зато быстрей вкатится.
#83 #961723
>>961711
Есть подозрение что он хотел отложенно вычислять массив по мере итерации.
961725961736
#84 #961725
>>961723
Не соснет ли такое решение по сравнению с обычным последовательным? Вычисли сразу все а потом делай что хотел.
961727
#85 #961727
>>961725
Соснет, этот дебил хочет функциональщины в насквозь процедурном языке. Для этого и изобрели пайтон.
961736961741
#86 #961728
>>961698

>Генератор, который выдавал бы значения внутрь цикла for и while (например, числа от 1 до 10) без хранения их в памяти.


Освобождай вручную и передавай ссылки, но это все хуита.
961736
#87 #961735
>>961709
Библиотеку для коллекций с ленивыми вычислениями.
#88 #961736
>>961723
>>961727
>>961728
проиграл с тупорылой школоты
#89 #961741
>>961727
На С можно функционально писать. Но меру всегда надо знать ато бутет сосо в производительности или даже стековерфлоу. Лучшего кода за функциональный нет, писать удобно, никакого дублирования, маленькие исходники, но вызов функции сам по себе потребляет ресурсы.
#90 #961790
>>961674
longjmp предназначен для переходов внутри функции, или для "выпрыгивания" по стеку вызовов наружу. Если функция, которая вызвала setjmp, завершилась, можешь считать, что jmp_buf содержит мусор.
#91 #961828
printf("Введите a кок-пок и т.д. и т.п.\n");
success=scanf("%d", &a);
printf("Введите b и с\n");
uspeh=scanf("%d %d", &b, &c);
Не могу заставить scanf считывать с новой строки b.
Просто пользователь может после первого сообщения ввести два числа, в переменную a попадёт первое введённое, а вот scanf-ить числа b и с уже надо со следующей строки.
А у меня если юзер введёт после первого сообщения "14 88", а после второго "13 37", то
а=14
b=88
c=13
А надо:
a=14
b=13
c=37
success=scanf("%d\n", &a) не помогает
Dmitry #92 #961832
>>961828
Считывай сугубо по одной переменной.
961841
#93 #961841
>>961832
Дак лол, не могу же.
Энивэй, если я попрошу вводить по одной цифре, то пользователь может ввести две по описанию задания. Алсо, он может ввести N переменных. Надо считать только первую, а потом заставить следующие scanf считывать с другой строки.
putchar('\n') не помогает
961842961843
#94 #961842
>>961841

> по одной цифре


По одному числу, фикс.

> он может ввести N переменных


N чисел, фикс2
Dmitry #95 #961843
>>961841
Почему не можешь?
Программа должна писатся для трезвого пользователя.
Можешь все за один scanf считать.
961844
#96 #961844
>>961843

> Программа должна писатся для трезвого пользователя.


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

> Можешь все за один scanf считать.


Не могу. Там дальше в программе надо будет считать разные данные в зависимости от хода программы, это и мешает, причём ужасно.
961848
#97 #961848
>>961828
>>961844
Решил так.
Добавляю переменную char trash;
while(trash!='\n')
scanf("%c", &trash);
Переменная сама никому не нужна, просто для прокрутки.
961889961896961973
#98 #961889
>>961848
fflush? стандартных путей нет, кроме да, считывания.
961899
175 Кб, 500x480
#99 #961896
>>961848

> scanf для одного символа

#100 #961899
>>961889

> стандартных путей нет, кроме да, считывания.


Это и есть стандартный путь после scanf failure. Вычитать остаток строки и запросить данные заново.
Dmitry #101 #961903
>>961896
Пыня плиз.
Железо все стерпит, процессоры с каждым годом все мощнее, 5GHz, дохуя ядер, scanf это ничто.
#102 #961973
>>961828
>>961848
Сожрать остаток строки можно самим scanf-ом: scanf("%∗[^\r\n]"). Взять число и выкинуть остаток строки можно, чуть исправив формат: scanf("%d%∗[^\r\n]", &n) (звездочки только на нормальные поменяй). С чтением одного числа из одной строки (а также нескольих чисел из обязательно одной строки) сложнее: самый простой подход - использовать fgets+sscanf, самый правильный - fgets+strtok+strtoul и прочие strtoX.
961989
#103 #961987
>>961896
Дак чтоб под строку не выделять память
961995
#104 #961989
>>961973
Спасибо, годно
#105 #961995
>>961987
он наверно про то, что getc (или как оно там) менее тяжеловесен.
962006
#106 #962006
>>961995
Дак да, но блин, я уже сталкивался с таким, что позиция, с которой будет считан следующий getchar() не совпадает с позицией, с которой будет считан следующий scanf().
Или у меня тогда проблемы были не с этим. Но приходилось писать scanf("%d\n") - только тогда всё работало В общем, я осторожничаю с этими вот читалками.
#107 #962019
>>961896
В прочем, ты был прав. С гетчаром всё работает, я не смог сбить его с толку
#108 #962115
Ладно, поцоны, как вы парсер пишите? Например, заголовка ip пакета. Для мeня пока бeст таeр это сдeлать структурку с битовыми полями и обeрнуть ee в #pragma pack. Или как-то так. Ну и входной массив привeсти к типу.
Минусы: eбиная дирeктива компилятора, что шатаeт кросплатформeннсть, и нeвозможно динамичeски описать поля структуры, eсли парсятся извeстной формы набор байт.

Какиe ваши прeдложeния?
#110 #962121
#111 #962123
>>962115
а, кстати, не ебу о чём ты там, но структуру можно объявлять динамически внутри функции.
типо как

f(a,b) {
struct a {
c[a];
d;
}
}
962126
#112 #962126
>>962123
У мeня гцц трeбуeт обязательно числа в квадратных скобках
962148
#113 #962148
>>962126
ну чё, перестал, требовать? типы проставь
962456
#114 #962183
>>962115
В прошлом треде (или позапрошлом, не помню) дохуя об этом срали, сходи почитай - ссылки в шапке.
#115 #962205
>>961828
Диванный нуб залетает в тред. Вылечил проблему банальным fflush(stdin); перед втором сканфом.
962245962368
#116 #962245
>>962205
А я и не отрицаю.
Тот самый диванный нуб
962342
#117 #962281
сисюны, реквистирую алгоритмы разбиение текста на строки типа Knuth-Plass Line Wrapping
#118 #962342
>>962245
Лол, диванный это я. 3-й курс шараги еще.
#119 #962368
>>962205

> fflush(stdin);


UB
962397
#120 #962397
>>962368
И это еще раз иллюстрирует нам, насколько сильно комитет злоупотребляет UB. Здесь вполне можно было бы обойтись unspecified behavior.
962399
#121 #962399
>>962397

>И это еще раз иллюстрирует нам, насколько сильно комитет злоупотребляет UB.


Не дорос ты определять, злоупотребляют или нет.
#122 #962456
>>962148
Удивитeльно, но да. Но крeстах совeршeнно нe хочeт так дeлать. Совeршeнно нe понятно, почему в сишкe работаeт
962457
#123 #962457
>>962456

> Совeршeнно нe понятно, почему в сишкe работаeт


Потому что в C99 есть VLA, а в C++ их не взяли
74 Кб, 372x246
#124 #962528
>>959643 (OP)
Как посчитать эти ёбаные числа?
962531962534962537
#125 #962531
>>962528
8ll 1024 1024 * 1024
962532
#126 #962532
>>962531
8ll x 1024 x 1024 x 1024
#127 #962534
>>962528
Ну или long long gigs
#128 #962537
>>962528
Рофл size_t это саный int чем же считать память??
962538
#129 #962538
>>962537

>size_t это саный int


штобля
962540962542
sage #130 #962540
>>962538
Он второй тред уже срет своими гигабайтами, которые у него не выделяются.
962542
61 Кб, 339x309
#131 #962542
>>962538
Пик
>>962540
Я разобрался, кароче когда пофиксил число и оно стало не ноль выяснилось что винда тратит половину свободного места в никуда, я в итоге выделил но меньше.
962547
sage #132 #962547
>>962542
Если у тебя size_t - unsigned int, значит у тебя 32-битная система, и выделить 8 гигов ты не можешь никак. И в закомментированной строчке на пике у тебя именно 8 гигов, а не 1. Память мы считаем в байтах, а не в битах.
962549
#133 #962549
>>962547
Это я понял, но я также слышал что-то про pae и я не врубаю что это тогда если с ним всё равно ничё нельзя на 32битной
962561962563962591
sage #134 #962561
>>962549
Я тебе уже пояснял за PAE (в винде это AWE). Выделяешь кусок адресного пространства, сколько не жалко - это "окно", и когда тебе нужно что-то положить в память или прочитать, просишь систему в это "окно" показать кусок оперативки. Выделить так можно более 4 Гб, но видно одновременно будет только столько, сколько размер твоего окна. Т.е., при желании ты можешь несжатую картинку 65536655364 байта (16 гигов) положить в память, но не можешь без дополнительных телодвижений обращаться к рандомному пикселу внутри нее. В 64-битной системе ты можешь делать банально bitmap[y * width + x]), а с PAE ты сосешь хуй: чтобы что-то прочитать или записать, тебе придется "отобразить" регион, содержащий пиксел в твое "окно", и потом внутри этого окна с пикселами работать, по необходимости сдвигая окно (т.е., отображая на него различные страницы физической памяти). Гугли AllocateUserPhysicalPages/MapUserPhysicalPages, только нахуя тебе это надо - непонятно.
962570
#135 #962563
>>962549
причём тут язык c?

ты не как не можешь иметь на 32битной машине больше адресов чем 4к. это по стандарту невозможно.

не знаю как работали всякие виндовс сервисы - наверно также, на один процесс 4к адресов, просто сумма реальных больше.
#136 #962570
>>962561
вот интересно, в компиляторах нет таких расширений?
962574
sage #137 #962574
>>962570
В компиляторах Си они нахуй не нужны. Это достаточно низкоуровневый язык, чтобы извращениями занимался не компилятор втихомолку, а ты сам и явно. У тебя задача-то какая? Почему ты не можешь воткнуть 64-битную систему, если есть потребность в огромном адресном пространстве?
962577
#138 #962577
>>962574
я не он. просто подумал что это же реально эмулировать.
962579962585
#139 #962579
>>962577
хотя нет, как же тогда системные библиотеки с их типами. да, это уже вопрос ос а не компилятора, наверно.
sage #140 #962585
>>962577
Смысла нет. Это был переходный механизм, когда 64-битные наборы инструкций еще не существовали (или были мало распространены), а возможность воткнуть более 4 Гб уже была. Да и юзкейсов, когда тебе нужно, много гигов на один процесс, не так уж много. Гораздо чаще хочется иметь много гигов для разных процессов - вот эту задачу PAE, в общем-то, и решает.
#141 #962591
>>962549

>я также слышал что-то про pae


Сходи посмотри на расшифровку это аббревиатуры, довен.
#142 #962625
Господа, вопрос скорее даже не по С, а по линкусу и сетям.
Пытаюсь сделать через raw-сокеты отправку пакетов с спуфом ип-адреса источника. Трабла в том, что софт запускается на роутере с включенным NAT и этот NAT заменяет в отправляемых пакетах любой адрес источника на внешний ип-адрес роутера, т.е. спуф идет по пизде.
Если ли способ может через установку какой-либо опции для сокета или может твик ядра линукса через /proc/sys/net/ipv4/ или еще как-то заставить блядский NAT не подменять адрес источника в пакетах, которые были сгенерированы на самом роутере?
#143 #963023
>>961896
А число без scanf как считать?
963027963071
#144 #963027
>>963023
Тебя ебёт это, что ли?
#145 #963071
>>963023
getchar() считывает символы, число можно собрать по цифрам
#146 #963141
Аноны, тут такое дело, курсач нужно запилить, исходные условия: "шоб использовал С/с++ и шоб с базами данных, ну и не совсем простое.
Таки вопрос:
Что б такого написать? не совсем нуб, но и сверхъестественное не надо, сроки как-никак. Думаю что-то типа библиотеки замутить, но выглядить слишком просто.
963195
Dmitry #147 #963195
>>963141
sqlite+C
Слелай телефонную книку
963229
#148 #963229
>>963195
Как усложнить можно?
P.s. Спасибо)
963233
#149 #963233
>>963229
Учет доходов и расходов семейного бюджета?
963238
#150 #963238
>>963233
О.о
Ладно, енижка так книжка.
963240963242
Dmitry #151 #963240
>>963238
Усложни, один человек может иметь несколько номеров.
963275
Dmitry #152 #963242
>>963238
Можешь еще мыльце или вк добавить к записям.
#153 #963275
>>963240
Окай, спасибо за идеи, няш :3
7 Кб, 499x264
#154 #963574
>>959643 (OP)
Как после каждого занесения элемента в массив увеличить a на один, а потом вывести эту a в консоль, ничего не работает, выводиться всегда ноль.
963575
#155 #963575
>>963574
Самый глубокий цикл не выполняется ни разу скорее всего.
963577
#156 #963577
>>963575
Вся функция работает правильно, мне нужно только посчитать a и b.
963579
#157 #963579
>>963577
А где ты "а" в консоль выводишь?
963580
#158 #963580
>>963579
Ну не стал весь код кидать.
Через printf("%d",a);
Возможно в выводе ошибка, первый раз с функцией работаю
963582
#159 #963582
>>963580
Вывод в теле функции происходит?
963585
20 Кб, 843x599
#160 #963585
963587963588
#161 #963587
>>963585
Они же у тебя локальные. Ты выводишь какие-то другие "а" и "b"
#162 #963588
>>963585
А как вывести? Ну ту a которая в функции считается?
963589
#163 #963589
>>963588
В конце функции написать вывод, либо сделать функцию, возвращающую значение
963595
11 Кб, 724x299
#164 #963595
>>963589
Спасибо, анон, что-то не дошло, что проблема в выводе
45 Кб, 1050x458
#165 #963797
Ребятки,имеется массив 4х4, нужно найти минимальный элемент среди положительных ниже главной диагонали, подскажите как это сделать пожалуйста. Пока что вот что имею.
Там дальше два счетчика для i и j должно быть как я понимаю,потом if(i<j),дальше без понятия как действовать.
963799963887
#166 #963799
>>963797
Привет, лабодаун. Разевай ротешник, будем в него ссать всем тредом.
963866966044972390
#167 #963866
>>963799
А, это у вас тут такие правила , я понял. Больше не буду значит тут помощи просить. А в ротешник сам себе нассы ,дядя.
#168 #963887
>>963797

>дальше без понятия как действовать.


учись маршироавать
#169 #964021
Ужас тут что одни школьники сидят?
964143
#170 #964143
>>964021
Вообще нет, походу дохуя в крестотред перебралось.
#171 #964248
Задался вопросом, а как обычно нормальные люди реализуют так сказать динамическое создание указателя. К примеру есть у меня список односвязный, указатель на голову я создаю в мейне или делаю глобальным. Ну и заполняю список и работаю с ним. А если понадобится еще один список? Получается нужна отдельная функция создающая указатель, потом этот указатель таскать за собой везде и нигде не потерять. Или нужно сразу создавать динамический массив указателей?
964263
#172 #964263
>>964248
Делай массив, указатели не забывай освобождать.
Конечно лучше все на перед статически инициализировать.
964432
#173 #964432
>>964263
Спасибо
#174 #964457
>>959643 (OP)
Ньюфаг ворвался в тред.Собираюсь начинать.Как настроить чертов visual studio под C?
964459964471
sage #175 #964459
>>964457
Ставь vim
964461
#176 #964461
>>964459
вместо visual studio?
964462
sage #177 #964462
964463
#178 #964463
>>964462
спасибо,антон
sage #179 #964471
>>964457
Никак, ничего настраивать не нужно. Ставишь Visual Studio, создаешь пустой C++-проект, добавляешь новый файл, сохраняешь как .c.
#180 #964631
В Си есть что-то вроде "static typedef int myint;"? Не хочу, чтобы этот тайпдеф вылезал за пределы .h файла.
964632965248
#181 #964632
>>964631
Нет и не может быть. Препроцессор, встречая #include, просто заменяет эту директиву на указанный в ней файл, поэтому для компилятора "пределов .h файла" просто не существует, существует только единица компиляции, а уж из чего ее препроцессор собрал, компилятору насрать.
964633
#182 #964633
>>964632
Бля, и с функциями та же хуйня. А я почему-то думал, что static функция за пределы своего файла не выползает. Пизда.
964634
#183 #964634
>>964633
static-функция не выползает за пределы юнита. Если ты пишешь header-only либу, то во-первых, сделай дефайн, чтобы различать включение для деклараций (многократно в проекте) и включение для реализации (однократно, с дефайном), а во-вторых, используй неймспейсы для бедных - добавь уникальный префикс или суффикс ко всем используемым символам. MyYobaLiba_ вполне подойдет. И похуй, что там будет торчать после этого.
964636
#184 #964636
>>964634
Да я наверно просто от .h-only откажусь, так логичнее будет.
Это нужно будет создать .h файл с хедерами функций либы, скомпилять сошку "gcc -shared -o lib.so -fPIC lib.h", и для использования моей либы придётся просто инклюдить .h файл и компилять с -Llib.so, я правильно понимаю? Ни разу так не делал, всегда .h файлами обходился.Тайпдефов либы тоже видно не будет?
964897
#185 #964897
>>964636
Header-only место в аду. Ты ведь не набиваешь параметры компиляции в командной строке руками, ведь правда?
965236
#186 #965041
такс такс, пивасик есть, осталось решить, за кого болеть то?
#187 #965042
это я не вам. лаба-петухи.
#188 #965153
>>959643 (OP)
Собрал на visual studio проект.Поменял разрешение в c..Запустил через конфигурацию решения release.Пишет.что не удаётся найти указанный файл
965200965204965207
#189 #965200
>>965153
Антивирусы есть? Какая студия? С нуля ставил? Есть ли файл на диске? Есть ли русские буквы в пути?
sage #190 #965202
Проверь, что у тебя рантайм нужный стоит. Он ставится автоматически, но мало ли. Скачай dependency walker, посмотри какие .dll получившийся .exe хочет.
#191 #965204
>>965153
Ану-ка попробуй собрать в Fedora GNU/Linux
#192 #965207
>>965153
Спермопроблемы-спермопроблемушки
#193 #965235
мда, уровень тредика падает на глазах, местные уже не могут скомпилировать программу и не знают что такое точки компиляции.
965243
#194 #965236
>>964897

> Ты ведь не набиваешь параметры компиляции в командной строке руками, ведь правда?


Вчера осваивал Makefile, было больно.

Прошу немного пояснить мне за либы. В моей либе есть структуры, много структур. И, допустим, мне нужно, чтобы пользователь либы мог работать с одной из них, например со структурой "type". Если я просто слинкуюсь с либой и начну использовать эту стуктуру как тип, то компилятор ругнётся. В структуре много вложенных структур, например "type->str", но в .h файле либы, который я создал во избежания еггогов просто написано:
typedef struct {
void *str; // Хотя в либе это большая структура
} type;

При таком варианте можно обратится к элементам структуры "type->str"? Сам проверить сейчас не могу, да и долго это, ответь же ты, тредик.

> Header-only место в аду.


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

Может кто доставить, так скажем, туториал о оформлении своей библиотеки? Вчера искал, не нашёл.
965249
#195 #965243
>>965235
это не местные, это залётные
#196 #965248
>>964631

>тайпдеф


>вылезал за пределы .h файла


че ты высрал, как ты этим пользоваться будешь тогда
0 Кб, 320x320
#197 #965249
>>965236

>туториал о оформлении своей библиотеки


man so
965251
sage #198 #965251
>>965249
Стикероблядок, съеби. Мне нужны общие принципы а не технические подробности.
965252
255 Кб, 512x512
#199 #965252
>>965251

>общие принципы


man shared library
965253
sage #200 #965253
>>965252
Пиздец, чего только обезьяна не надобавляла в эту анонимную социалочку. Пойду лучше на возрождённую мяту. Сажи этой помойке.
965254
#201 #965254
>>965253
Да-да, пиздуй на свой парашный 0-чан, вкатывальщикю Там тебе будут радынет.
#202 #965307
>>959643 (OP)
Какая же годнота С, по сравнению с жавоскриптом.
Сейчас дочитываю первую книгу, с синтаксисом разобрался, подскажите что можно написать на С?
#203 #965310
>>965307
Сегфолт
#204 #965311
>>965307

Ядро линукса
#205 #965312
>>965307

> подскажите что можно написать на С?



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

В первый раз я написал небольшую чит-программу которая использовала драйвер для скрытия от античит систем, банальные хуки в таблице SSDT ядра Windows.
965329965356
#206 #965329
>>965312

>сложные хуитки


>хуки


Школьник, плес.
965331
#207 #965331
>>965329

Я уже не школьник, когда впервые этим занимался тогда был школьником, дико доставляло копаться в ядре. Всяким JS макакам вряд ли такой адреналин доставляет их макакинг, верно?

>хуки



в usermode довольно сложно реализовать правильные Inline хуки, т.к требуется дизассемблер длинны функций, иначе можно испортить все.
965334
#208 #965334
>>965331
Системное программирование немногим сложнее веб-параши.
Вот такую штуку:
https://ru.wikipedia.org/wiki/Apache_Spark
на Си не напишешь.
965340
#209 #965340
>>965334

>Системное программирование немногим сложнее веб-параши



Найс манямирок
965362965363
#210 #965356
>>965312
В том то и дело, что это совсем другой мир.
Тут уже залетный из жс отписался, но как по мне, веб быстро надоедает. Даже несмотря на "обилие" языков, по сути все одно и тоже. А фронт-енд это такая хня, что лучше туда не лезть вообще. И дело не в сложности, как раз сложного там мало, но все приедается быстро.
Поэтому и пал выбор на С.
#211 #965362
>>965340
манямирок тупых байтоебов, не знающих алгоритмов и J-нотации и считающих, что выучить набор инструкций процессора сложнее, чем набор классов и методов в веб-фреймворке
965368
#212 #965363
>>965340
манямирок тупых байтоебов, не знающих алгоритмов и O-нотации и считающих, что выучить набор инструкций процессора сложнее, чем набор классов и методов в веб-фреймворке
965368
#213 #965368
#214 #965373
Байтоёбство включает в себя:
1. Императивный стиль программирования как начало байтоёбского пути.
2. Дрочка на машинно-ориентированные типы данных (собственно, основной симптом байтоёбства) и последующее за ней закономерное возмездие байтомудакам в виде big endian vs. little-endian, особенности обработки чисел с плавающей точкой и.т.д.
3. Предтерминальные стадии байтоёбства - интринсикоёбство и его более тяжёлая форма - инлайн-ассемблероёбство. Подсадка начинается с убеждённости поциента в необходимости ручками использовать SIMD -инструкции.
4. Терминальная стадия, как итог п.3, тру-ассемблероёбство и "хроническая низкоуровневая оптимизация головного мозга"
965481965510
#215 #965375
В нашем мире, к счастью, подобные симптомы с распространением java, C# и прочей "замещающей терапии" встречаются реже, однако остались две отрасли, входящие в зону риска:
1. Гейдев. Байтоёбство в гейдеве берёт своё начало в 70х-80х, поскольку именно тогда зародилась традиция байтоёбства в геймдеве. Обязаны этим, в основном, восьмибитным соснолям и домашним компьютерам, которые, обладая малым объёмом ОЗУ и имея скудные средства программирования, требовали делать на них ёба-игры. Эта традиция продолжилась и далее, всё благодаря тем же консолям, на которых консолерабы должны были выпускать игры 5 лет, задрачивая их убогие байтоёбские архитектуры по полной. К сожалению, подобная практика перешла и на ПК, где байтоёбство, в общем-то не так оправдано. К слову байтоёбам-игроделам дали шанс выбраться из этой трясины в 2002 году, когда майкрософт запилила дуднет и менеджед дайректикс к нему. Но байтоёбы остались верны своим указателям, плюсам и байтоёбской оптимизации. Зашоренность, верность привычкам, безыдейность, десу.
2. Эмбеддед. Причины почти всё те же, что и в гейдеве. Маломощное железо, пара сотен байт озу, деревянные игрушки, прибитые к полу и.т.д. К этому прибавляется огромное количество разных железок разномастных архитектур, для которых нет толковых тулчейнов. Из хорошего - в последние годы байтоёбство в этой сфере потихоньку излечивается, спасибо дядям из ARM co ltd, сделавшим свою архитектуру более менее распространённым стандартом среди всех архитектур и огромному количеству появившихся фреймворков и компиляторов языков для этой платформы.
965481965510
#216 #965376
Так же распространено ложное утверждение что байтоёбство крайне необходимо в системном программировании. На самом деле этого легко избежать. Рассмотрим среднестатистическую аппаратную платформу. Краеугольными камнями любой аппаратной платформы являются:

1. Процессорная архитектура
2. Memory map - адресное пространство, в которое отображаются RAM, ROM и внешние устройства
3. Протоколы управления этими самыми внешними устройствами.

Так вот, всё вышеперечисленное вполне можно вполне декларативно описать обычным конфигурационным файлом, не прибегая к программированию вовсе. Затем, скормить этот файл генератору платформ и на выходе получить готовый фреймворк-скелет нашей операционной системы, доступ к которому можно получить из любого языка программирования. Вот так вот просто, если бы байтоёбство гологного моска не мешало.
965419965481965510
#217 #965411
Чувствую себя дауном. Тут всякие системеные штуки делают, а мой уровень - Laba_1 и кривой консольный тетрис.
965438
#218 #965419
>>965376
так зделой, кукуретик хуев
965425965555
#219 #965425
>>965419
Это слишком просто для него, его ждёт смуззи и очередной круд.
#220 #965438
>>965411
Все с чего-то начинали.
#221 #965481
>>965373
>>965375
>>965376
Господи, какая же ссанина. Кучка терминов в ничего не означающем словесном поносе.
#222 #965510
>>965373
>>965375
>>965376
ты забыл начало:

Машина должна и будет служить людям, она не шлюха, чтобы люди исполняли её прихоти. Отсюда ба йтобляди (а так же сочувствующие им императивные пидорасы, надрачивающие на показатели clock() - start) - пиздолисы, которые опускаются до полного говноедства, лишь бы ублажить её регистры и микросхемы.
Альфапрограммисты, как и положено альфам, если машина не выполняет положенных ей задач и требует пресмыкаться перед ней и ублажать её байтами, просто берут и за патчкорды, ебашат с вертушки по передней панели и списывают машину на мороз, купив взамен ту, которая не будет выёбываться и выполнит код в сроки и без выебонов, будь там хоть 1000% неоптимизированного оверхеда. И настоящего программиста не волнуют вопросы выдрачивания и быстродействия - он решает важную задачу из предметной области гораздо более сложной, чем низкоуровневое дрочево, и отвлекаться на всякую подзалупную хуету вроде осоьбеннойстей какой-то там архитектуры ему некомильфо.
Байтоёбство включает в себя:
sage #223 #965555
>>965419

> так зделой


На самом деле некоторые шаги в этом направлении есть. То же FDT, например.
965600
#224 #965600
>>965555
некоторы шаги есть в любом направление. высер того анона напоминает кукарекание петухатиков где у них есть еба теории в которых все заебись но на практике абсолютно не реализуемы да и оторваны от реальности
Dmitry #225 #965741
>>965307
Портируй на Vulkan и Wayland самую лучшую в мире читалку - mupdf
#226 #965748
Нету желающих сервер в SAMP на Pawn поковырять по фану?
965764
Dmitry #227 #965764
>>965748
Есть
#228 #965769
Аноны, я тот аноны который после веб макакинга начал изучать С.
Очень нравится язык, наскачивал книг, одну уже осилил для нубов, одну даже планирую купить, очень охуенно там все разложено, плюс примеры интересные.
Но вопрос такой: есть ли с С работа? Например со знанием пхп/жс ее порядочно, даже выбирать можно. Что вообще пишут на С? Только драйвера и ядро линукса? Что еще параллельно подтягивать вместе с самим языком?
#229 #965810
>>965769
У нас в основном на С пишут что-то связанное с железом. Не сколько драйвера, сколько прошивки микроконтроллеров. Но в этой отрасли зп ниже, чем в веб.

А крутые чуваки, да, пишут всякие СУБД, Highload-бекенды и подобное. Но это в долине
#230 #965829
>>965769
Писать на нем можно то-же что и на плюсах пишут.
#231 #965831
>>965769
Если ты PHP-шник.
То знание C выводит тебя на новый уровень знания того-же PHP и сервера.
ТЫ можешь сам писать патчи и расширения к языку.
#232 #965832
>>965769
нет
#233 #965915
>>965769
Какую книгу собираешься купить?
40 Кб, 387x312
#234 #966040
Помогите разобраться с вводом-выводом.
Есть 2 файла: данные и результат.
хочу считать данные с одного тхт файла и чтобы результат был напечатан в другом.
966044966065966469
sage #235 #966044
sage #236 #966065
>>966040
На fprintf() посмотри.
212 Кб, 1080x1920
#237 #966469
>>966040
Погугли немного.
#238 #966484
Я новичок.
Поставил Clang.

Пишу:
clang hello.c

А он мне:
hello.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.

Как сделать, чтобы работало?
#239 #966485
>>966484
А вот код из CS50:
#include <stdio.h>

int main(void)
{
printf("hello,world\n");
}
#241 #966489
>>966488
я читал, но всё равно не понял что делать
966497
#242 #966490
>>966488
и зачем мне опция "только фронтенд"?
966497
#243 #966493
Кланг не работает без сторонних библиотек что ли? Тогда нахрен я это говно вообще ставил :(
966497
#244 #966497
>>966490
>>966493
>>966489
Чето в голос
Сделать форк репозитория ллвм и самому собрать компилятор религия не позволяет?
#245 #966507
>>966484

>Поставил Clang.


Юзай cmake, а там через env уже легко компилятор настроить, чтобы он генерил правила сборки без гемора.
#246 #966511
>>965769

>Что вообще пишут на С?


Практически все. Модули ядра для разных осей, реалтайм ос, гуишный софт, веб серверы, плагины для веб серверов, базы данных, интерпретаторы (хотя тут и на C++ благодаря темплейтам с генериками наркоманы любят обмазываться и грамматики разбирать), компиляторы, проще сказать что на С не пишут.
#247 #966519
Решил вкатиться в это ваше програмирование на с++. Какие мануалы и литературы курить полному ньюфагу?
966599
#248 #966599
#249 #966634
Всем привет. Вкатываюсь с таким вопросом. Вывожу в файл содержимое массива структур. При выводе в файл куча приписок, меток, форматирований непосредственно для более упрощенного восприятия человеком. Очень старался запарился, но прилетела задача - обратно такой файл грузить в программу и работать с данными. Другого варианта кроме как скурпулезного считывания нету?
966677966703966782
#250 #966677
>>966634

>Другого варианта кроме как скурпулезного считывания нету?


json/xml де/сериализация
966703
#251 #966703
>>966634
>>966677
yaml еще.
И да, изобретать велосипед не стоит, хранение данных это хранение данных, а генерация отчета для человеков это генерация отчета.
Dmitry #252 #966782
>>966634
Для машины файл ничего лишнего содержать не должен, а отчеты отдельно генерируй.
#253 #966830
>>959643 (OP)
Анон, подскажи.
Почему в топовых вакансиях (с/с++) требуется знания си?
Я понимаю, что си - фундаментальный язык, очень приближен к работе с железом. Но, разве все то, что используется в си, используется в с++. Если не брать в расчет базовые вещи вроде типов данных, циклов и т.д.?
966854
sage #254 #966854
>>966830
По большей части кресты - это надмножество си. Соответственно, зная кресты, ты можешь кое-как писать на си. И тебе может понадобиться использовать или исправить сишную либу, например.
966859
#255 #966859
>>966854
Знания си помогают в работе с плюсами?
966865
sage #256 #966865
>>966859
Со знанием си кресты учатся быстрее (ну или си со знанием крестов). Знания си мешают писать в "крестовом стиле" на первых порах - получается то, что называется "си с классами". С опытом проходит.
#257 #966876
Можно ли как-то по бинарнику узнать для какой ОС и под какую архитектуру он был скомпилирован? Точнее, можно ли узнать calling convention(используя иду, или другой дизасемблер)? т.е. хранится ли где-то какая-нибудь метаинформация и тд

Варик просматривать дизасемблированные листинги и гадать - не оч
966884
sage #258 #966884
>>966876
Тут есть отдельный тред >>960640 (OP)

> Можно ли как-то по бинарнику узнать для какой ОС и под какую архитектуру он был скомпилирован


Да, можно. readelf/objdump/dumpbin/различные PE-редакторы. В целом зависит от формата бинарника.

> можно ли узнать calling convention


Нет. Если явно не указать calling convention, современные компиляторы могут менять ее от функции к функции и от билда к билду, передавая аргументы в разных регистрах, выкидывая неиспользуемые аргументы нахуй и т. д. Если было явно указано при компиляции - можешь посмотреть дизасм, это не гадание, там все очевидно после двух-трех функций. Иногда из бинарника торчат декорированные экспорты (или есть отладочная инфа, например), тогда в там кодируется и конвенция.
966921
#259 #966915
Обсуждаем грядущий блевотный синтаксис атрибутов, бугуртим от slice-нотации, которую пытаются притащить из питона, гадаем, будут ли замыкания:
https://developers.redhat.com/blog/2017/02/01/october-2016-iso-c-meeting-report/
972079
#260 #966921
>>966884
Мне надо знать calling convention чтобы собственно и определять аргументы функции. Причем не заглядывать самому каждый раз в бинарь, а написать такой парсер, который будет говорить где лежат параметры(т.е. названия регистров или смещение в стеке) для каждой функции. Такое вообще можно реализовать?
966940
#261 #966940
>>966921
Ну смотри, для x86 у тебя есть: регистры, стек, fpu/sse для floating point. Это на вход. На выход у тебя могут быть eax, edx:eax, fpu/sse, стек (для структур). Все это компилятор может смешивать в любых пропорциях. По-хорошему это "решается" написанием dataflow-анализатора, причем анализом одной функции не обойдешься (foo: add ecx, 20 ; jmp bar - какие аргументы у foo?), причем анализ все равно будет изредка лажать, как бы ты не изъебывался. Если тебе только thiscall/fastcall/cdecl/stdcall различать - тогда анализ проще, процент успеха выше (но не 100% - IDA постоянно лажает), можно использовать всякие эвристики (обращение к ecx без инициализации для thiscall/fastcall, retn N для stdcall, add esp после вызова для cdecl и т. д.). В общем и целом, проще всего взять IDA, пусть она проанализирует, потом сдампить тайпинфо скриптом, а при возникающих проблемах смотреть и руками править.
967037
повтор строк в файле -strcmp? #262 #966962
есть файл >100мб, в каждой строке 1 слово, как найти повторяющиеся строки=слова? Сделал через strcmp - каждое слово прогоняю через весь файл в поиске повтора.... в итоге 5Gb надо обработать, чет. как-то долго выходит )) Как ускорить?
966972967036967185
#263 #966972
>>966962
В хэш-таблицу загони.
967036
#264 #967036
>>966972
хеши тоже ведь проверять надо?
>>966962
Закинь сразу весь файл в оперативку.
Не перепроверяй то что уже проверил, а какой результат программы должен быть вообще?
967230
#265 #967037
>>966940

>проще всего взять IDA, пусть она проанализирует


Так а как это сделать? Собственно я и хотел писать парсер, ибо в иде такой функции не нашел
Легкий гуглеж говорит, что это можно провернуть, если пользоваться другим декомпилятором от хексрейз. Но мне бы именно в иде
967083
#266 #967040
хочу выучить свифт, я туда попал?
967051
#267 #967051
>>967040
Иди в ваш загон, он тонет.
#268 #967083
>>967037
Ну начни с чего-то типа:
import idaapi
import idautils

for ea in Functions():
ti = idaapi.tinfo_t()
if not idaapi.get_tinfo2(ea, ti) and not idaapi.guess_tinfo2(ea, ti):
print('%.8x: <error>' % (ea))
else:
print('%.8x: %s' % (ea, ti.dstr()))

Посмотри на idaapi.guess_func_cc(), посмотри на idaapi.tinfo_t(). Документация говно, но на гитхабе встречаются чужие реализации, где можно подсмотреть, как с этим всем работать.

И вообще иди-ка ты в тред по реверсингу, тут у нас няшная сишечка.
967084
sage #269 #967084
>>967083
Блядский питон, блядская макака! Пробелы сам расставишь.
#270 #967123
У меня есть typedef struct { ... } type;
Можно считать нормальным стилем ещё одно декларирование этого типа в виде:
typedef type type;
?
Никаких подводных камней нет?
Для наглядности хочу собрать все типы в одном месте и прокомментировать их.
967134
#271 #967134
>>967123
Абсолютно нормально. На таком декларировании в заголовочниках в glib например описание объекта строится.
#272 #967185
>>966962
на поиск дубликатов наверное есть с десяток оптимизированных алгоритмов (по потреблению памяти, по быстродействию, в общем, на выбор)
так сложно это загуглить...
967254
967036 #273 #967229
результат файл без повторов
#274 #967230
>>967036
результат файл без повторов
#275 #967254
>>967185
потом еще утилитка uniq есть в coreutils..
те если это не учебная программка, а реальная потребность то проще ей воспользоватся
#276 #968047
Сап такой вопрос. А указатели на функции это нормально? За такое не бьют ногами? Я вообще новенький разбираюсь со структурами данных. Решил для себя написать, как раз и разберусь лучше. И в процессе возникла такая идея.
Возьмем список. Есть структура для узла и есть структура содержащая голову и хвост нашего списка, ну и количество элементов. В структуру с головой я решил засунуть указатели на функции для работы со списком.
Т.е. по итогу я хочу получить своего рода инкапсуляцию. Все что по итогу нужно для работы будет уже в структуре. Создали, вызвали функцию инициализации ну и работаем со списком в свое удовольствие, все методы сразу видны, на первый взгляд удобно, но нигде такого раньше не видел.
#277 #968049
>>968047
Указатели на функции в структуре . Для работы с этой же структурой
#278 #968051
А зачем? Зачем хранить константу в структуре? Указатели же не меняются.
968080
#279 #968070
>>968047

> нигде такого раньше не видел


цпп?
968093968274
#280 #968075
>>968047
Да. В Linux Kernel вообще повсеместно используется.
968233
#281 #968080
>>968051
"Эмуляция" пространства имен, ну и для удобства.
#282 #968093
>>968070
Не видел в чистом си.
#283 #968098
>>968047
Более чем ок, если понимаешь, что делаешь.
#284 #968223
С чего начать изучение C#?
Где брать задачи?

навыки уровня первокурсника есть в чистом си
на с# написал прогу, которая авторизовывалась в вк в отдельном окошке, причем сам нихуя не понял ничего
#285 #968233
>>968075
лол
ну уж никак для структур данных типа списков
968274
#286 #968274
>>968070
В цпп только виртуальные функции лежат в таблицах, и даже их современные компиляторы стараются девиртуализовывать.

>>968233
Есть случаи, когда хранение указателей на функции в списках вполне оправдано. Например, у тебя список разнородных сущностей, может быть хорошим решением хранить указатели на деструкторы в элементах, а не делать гигантский свитч при удалении.
21 Кб, 356x176
#287 #968305
Подскажите гуманитарию в чём проблема. Есть одна функция которая генерирует рандомное число, и в зависимости от результата возвращает строку. Проблема в том что рандомное число генерируется один раз, и при повторных вызовах функции используется оно-же. Гугл не помог.
968313
sage #288 #968313
>>968305

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


В ДНК. Код давай.
968329
#289 #968329
>>968313
https://pastebin.com/qjwbDm0p
И раз уж на то пошло, есть какие-то более лаконичные способы "броска" кубика у которого некоторые грани повторяются?
968354
#290 #968334
https://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful

Няшный одноглазик научит тебя православной генерации случайных чисел. На крестах правда, но тебе то небось все равно.
968354
sage #291 #968354
>>968329
Очевидно, что тебе нужно бросать кубик (вызывать dice()) внутри цикла (после do), а не снаружи. Алсо, random() - это что-то нестандартное. Наверное, ты имел в виду rand()?

> лаконичные способы "броска" кубика у которого некоторые грани повторяются?


Не делать if, сделать lookup. Типа:
#define countof(array) (sizeof(array) / sizeof((array)[0]))
const char ∗results[] = { "foo", "bar", "foo", "baz", "foo" };
int n = rand() % countof(results);
return results[n];

Но как правильно заметил >>968334 вот этот анон, rand() часто реализован очень некачественно, а rand() % n добавляет еще больше неслучайности из-за особенностей реализации LCG PRNG. Можешь так делать, так слегка медленнее и слегка лучше:
// Generates int in range [n1, n2] (inclusive on both sides). n2 must be > n1.
int random_range(int n1, int n2) {
return (int) ((rand() ∗ (1.0 / RAND_MAX)) ∗ (n2 - n1 + 1)) + n1;
}

Если это лаба - просто забей. Если игра, можно спиздить генератор получше.
968381
#292 #968381
>>968354
Внутри цикла... Вот я рукожоп...
Спасибо большое! Видео смотрю уже. Досмотрю и постараюсь сделать всё кошерно.
Да, игра, для себя чисто делаю. Хобби типа.
968387
sage #293 #968387
>>968381
Я тоже рукожоп. Там должно быть 1.0 / (RAND_MAX + 1), если что.
#294 #968511
Анон, давай поговорим о оформлении кода. Вот скобочки и названия функций. Есть стандарт? Где почитать? Как много людей соблюдают стандарт?
968530968532968533
#295 #968530
>>968511

>о оформлении кода


Столько же, сколько соблюдают правила русского языка.
#296 #968532
>>968511
возьми линуксоидный кодстайл и не промахнешься
sage #297 #968533
>>968511
Вон на днях на хабре очередной высер выложили. Сходи почитай, если хочешь. Ну или на вики. Или у любого крупного опенсорсного проекта есть стайлгайд обычно. Общего стандарта нет, есть разные подходы для разных ситуаций, но в целом похуй, как писать, лишь бы одинаково во всем проекте.
#298 #968546
Господа, возможно ли scanf'ом или подобным прочитать строку вида "abc123", чтобы abc ушло в char[], а 123 в int?
968551968608
sage #299 #968551
>>968546
Частично: можно сделать %3s%d и/или %[^0-9]%i, но там куча подводных камней. Лучше делай fgets и разбирай руками.
968608968647
#300 #968608
>>968546
Позволю себе не согласиться с этим >>968551
scanf - отличный парсер
968647
#301 #968647
>>968551
>>968608
Тащемта fgets'ом я разбираю файл, а потом построчно ковыряю sscanf'ом.
Просто проблема в том, что строка может иметь вид "[1-ый символьный параметр] [2-ой символьный параметр][числовой параметр]".
И если, к примеру, второй строковый параметр отсутствует, то конструкции типа

>%3s%d и/или %[^0-9]%i


обламываются, ибо проёбывают в том числе и числовой параметр. Хотя решение хорошее, да.
В итоге забил хуй, просто считываю как две строки, а вторую потом ковыряю strtol'ом, вытаскивая число, а остатки уже ковыряю на наличие/отсутствие нужных символов strchr'ом.
В любом случае, не для атомного реактора программу пишу, и так сойдёт.
Dmitry #302 #969090
GTK4 will be rendered with Vulkan API.
969091969517
Dmitry #303 #969091
>>969090
Это победа, гудбай легаси пердолинг.
969452969456
#304 #969452
>>969091
Пиздец, какие ебанаты принимают такие решения?
969456
sage #305 #969456
>>969452
Вот >>969091 такие. Но я еще не читал. Наверняка ведь это опция, ни один долбоеб не будет завязываться на мертворожденный графический апи.
970721
#306 #969517
>>969090

>GTK4 will be rendered with Vulkan API.


ебать, они там рисовалку виджетов пилят джватцать лет. они и в 4 версии пытаются натянуть ооп?
970721
#307 #970673

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


Так разрабы GTK и есть долбоебы. Новая версия - новые правила.
#308 #970721
>>969517

>пытаются натянуть


Не осилил glib? ООП там давно уже есть.

>рисовалку виджетов


Что это такое?>>969456

>мертворожденный графический апи


Ну да, сосачерам виднее.
970991
#309 #970771
Пишу на С для STM32.
До этого на С++ писал только в вузе проекты уровня Курсач1. Помню, access violation тогда постоянно сопутствовал на практике.
Как контроллер реагирует на access violation / кривой код? Возможно ли случайно сделать из контроллера кирпич неудачным кодом? Контроллер можно перешивать много раз
970774971162
#310 #970774
>>970771
Сам по себе контроллер в вакууме - нет. Но он же у тебя куда-то воткнут.
970776
#311 #970776
>>970774
Discovery board с периферией (кнопочки, диод (должен быть), LCD дисплей). Воткнуто через USB к ПК, отладка. Как обычно, основа всего кода - бесконечный цикл. Вот там могут быть проблемы. Пока всё в порядке, но как-то тревожно
970781
#312 #970781
>>970776
Ну диод ты врядли сожжешь, кнопочки тоже обычно не горят.
#313 #970991
>>970721

> ООП там давно уже есть.


надеюсь ты объяснишь почему они не взяли кресты, а сделали все через жопу? ооп на с, кек, долбоебища, структура с кучей ссылок на подпрограммы это типа у них класс, пиздос.
971133971157
#314 #971133
>>970991

>надеюсь ты объяснишь почему они не взяли кресты


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

>ооп на с, кек, долбоебища


> структура с кучей ссылок на подпрограммы это типа у них класс, пиздос.


Первые версии твоих крестов, транслировались в сишку.
971167
#315 #971157
>>970991

> структура с кучей ссылок на подпрограммы это типа у них класс


так в крестах тоже самое почти, лол

>почему они не взяли кресты


кресты говно, да и биндить к другим языкам тяжело, а тут биндинг левой пяткой можно написать, я его для диплома к тиклю прикручивал
971243
#316 #971162
>>970771

> Как контроллер реагирует на access violation


Как любой арм. Будет фолт, будет переход по соответствующему вектору из таблицы.

> Возможно ли случайно сделать из контроллера кирпич неудачным кодом


Нет, там критичный регион залочен, разлочить его случайно невозможно.
sage #317 #971167
>>971133

> Первые версии твоих крестов, транслировались в сишку.


А сейчас сишка и кресты транслируются в асм. Это повод писать на асме? Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.
971174971243971752
#318 #971174
>>971167

>Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.


Ну, так и делают.
Только сначала пишут ядро на сишке, чтобы работало быстро и легко было портировать на другие яп. На си++ только ничего портировать не надо, все из коробки можно юзать.
971177971243
sage #319 #971177
>>971174
Щупал гайку/беос? Там изначально кресты. Попробуй.
971189
#320 #971189
>>971177

>Попробуй


В пезду. Жонглирование дистрибутивами один из видов прокрастинации.
971194
sage #321 #971194
>>971189
Это не "дистрибутив". Это самостоятельная Unix-like ОС. К сожалению, так и не взлетевшая.
971198
#322 #971198
>>971194

>К сожалению, так и не взлетевшая.


как говорится - рыночек порешал.
#323 #971243
>>971174

>Только сначала пишут ядро на сишке


пруф или пиздун, кьют изначально писался на плюсах. >>971157

>его для диплома


эгсперд ф треде, всем бояцо
>>971167

>Всецело двачую идею писать гуи на крестах или еще более высокоуровневых языках.


я про то, если мыслишь в рамках ооп то и выбор должен быть соответственным, а не как у гномопетухов.
#324 #971246
>>971243

> я щитаю што все должны, так как я себе представляю, куд ах.


нахуй иди.
971261
#325 #971249
>>971243

>соответственным


соответствующем. поправил хуесос
#326 #971250
>>971243

> я про то, если мыслишь в рамках ооп то и выбор должен быть соответственным


Ты путаешь ООП и ээээ.... классы. stdio в сишечке - ООП, куча кода ядра Линукса на сях - ООП. Просто это не классы. Посмотри ссылку в шапке.
971260
#327 #971260
>>971250

>куча кода ядра Линукса


это куча говна, а не ооп
>>971250

>ООП и ээээ.... классы.


кагбы не
>>971250

>stdio в сишечке - ООП


нет
971287
#328 #971261
>>971246
гном, не рвись
#329 #971287
>>971260

> stdio в сишечке - ООП


> нет


Обосновать ты, как я понимаю, не можешь, только обзывать все говном.
971321
#330 #971321
>>971287

>Обосновать ты, как я понимаю, не можешь, только обзывать все говном.


наркоман? или ты файловый хэндлер считаешь объектом класса?
971333971351
sage #331 #971333
>>971321

> файловый хэндлер

971345
13 Кб, 480x360
#332 #971345
>>971333
эгсперд?
#333 #971346
>>971243

>пруф или пиздун, кьют изначально писался на плюсах.


Ты даун?
971347971352
#334 #971347
>>971346
ты дмитрий?
971358
#335 #971351
>>971321

>файловый хэндлер


Шо? Дескриптор файла?
971356971357
#336 #971352
>>971346
антон, не толсти
48 Кб, 450x600
#337 #971356
>>971351

>Дескриптор файла?


какие еще слова вы в школе проходили?
#338 #971357
>>971351
Он имел в виду FILE, но он не является хэндлом (дескриптором) - это объект, который хранит дескриптор и прочие данные, необходимые для осуществления ввода-вывода.
971359971366
#339 #971358
#340 #971359
>>971357

>это объект


объект чего? какие у него методы?
971364971369
#341 #971364
>>971359
Методы посмотри в stdio, имена начинаются с f (и по историческим причинам несколько методов без f). Если для тебя методы - то, что пишется через точку после имени объекта, то я тебе сочувствую.
971378
#342 #971366
>>971357
Понял.
#344 #971378
>>971364
у объекта есть указатель на себя, который неявно передается его методу, да, fd->read() а не процедурщина read(fd) и как минимум уничтожение объекта при выходе из области видимости. когда завезут приходи.
971384971386971588
#345 #971380
>>971369
и чо? обыкновенное структуроебство.
#346 #971384
>>971378

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


Особенность реализации какого-то конкретного языка. Например, COM/DirectX - ООП, но на сишечке я вполне себе делаю obj->lpVtbl->Release(obj), и от этого оно магически не перестает быть ООП.

> как минимум уничтожение объекта при выходе из области видимости


Никаким местом не относится к ООП. Мало того, многие языки уничтожают объекты не при выходе из области видимости, а когда-нибудь. Мало того, для сишечки есть либа с подобным управлением памятью с автоматическим вызовом деструкторов.
971390
#347 #971386
>>971378

>как минимум уничтожение объекта при выходе из области видимости


т.е. жаба — не ООП. Приехали.
971392
#348 #971390
>>971384
ясно, и пронаследуешь от структуры FILE ты тоже и все это не перестанет быть ассемблером.
971398
#349 #971392
>>971386
давно у жабы деструктор?
971395
#350 #971395
>>971392

>давно у жабы деструктор?


Лол. С самого начала. Вызывается сборщиком мусора.
971403
#351 #971398
>>971390
Ну наконец-то нормальный аргумент. Да, FILE нельзя наследовать, но он не перестает быть от этого объектом. Отличия FILE от структурного программирования - инкапсуляция. Содержимое структурок тебе доступно по определению, а содержимое FILE тебе стандартная библиотека показывать не обязана (хотя в большинстве реализаций ты его и видишь, оно все равно implementation defined, и ебать его напрямую - зашквар), с FILE работают только его собственные методы.
971405
#352 #971403
>>971395

> Вызывается сборщиком мусора.


сборщиком клюквы
971404
329 Кб, 1280x957
#353 #971404
>>971403
Спорщиком брюквы
#354 #971405
>>971398

>Да, FILE нельзя наследовать


>но это все равно ООП, просто там невидно


понятно, давай более весомые аргументы, а не эти маняфантазии
971407
#355 #971407
>>971405
Ебать ты убогенький.
971408
#356 #971408
>>971407
больше аргументов нет?
971417
#357 #971417
>>971408
Из тебя прям аргументы фонтаном бьют.
#358 #971588
>>971378

>как минимум уничтожение объекта при выходе из области видимости


в objc этого нет, теперь он тоже не ООП?
971599971663
#359 #971592
Сап, есть упражнение 2.1 из K&R. Так вот, там просят не только просто вывести пределы long, short, char, int, double, float, а ещё их вычислить. Но вот зацепку, как их вычислять, K&R не дал в начале второй главы.
Вот скажите, когда я переполняю, допустим, тип int, переход в отрицательное число отвечает стандарту? У меня при любом переполнении будет как бы начинать с конца данного диапазона. Или это зависит от реализаций там каких...
971594971694971961
3 Кб, 661x93
#360 #971594
>>971592
Алсо, гуглить пробовал, ну, такое себе.
#361 #971599
>>971588
Это вообще не язык
971759
#362 #971663
>>971588
объекты должны создаваться и уничтожаться не только по завершению программы и явном удалении, капишь?
#363 #971694
>>971592

> когда я переполняю, допустим, тип int


Это UB
971951971957
#364 #971752
>>971167

>Всецело двачую идею писать


>GUI on C++


TOPKEK
Qt - buggy piece of shit.
GTK - masterpieces of code.
Qt app 2 times biger than GTK3 app, not to mention FLTK.
971753
#365 #971753
>>971752

>Qt app 2 times biger than GTK3 app


Всем похуй.
971754
#366 #971754
971758
#367 #971758
>>971754
Разве что пользователям дискет не похуй.
971780
#368 #971759
>>971599
ага, настолько не язык, что на нем зарабатывают неплохие деньги
971898
#369 #971780
>>971758
Qt - говнокод, как не изъебнись, и тормозит дай бог. Нахуй надо.
971783971820
#370 #971783
>>971780
Двачую будущее за JavaFX на кроссплатформе
971790
#371 #971790
>>971783
Будущее это GTK4, и возможно FLTK (Если тоже перейдут на Vulkan+Wayland)
971895
#372 #971820
>>971780
Не тормозит Motif. Только вот

> Нахуй надо.

971910
#373 #971895
>>971790

>Будущее это GTK4


шо, опять? с 98 года пердолят это поделие. оно же выглядит как говно, работает как говно и спроектировано как говно.
971910
#374 #971898
>>971759
Гей-шлюхи со стажем тоже неплохо зарабатывают.
#375 #971900

> 2017


> спорить об ооп


> в C треде


вы ебанутые что ли? это же моветон.
403 Кб, 1920x1080
#376 #971910
>>971820
Он не может в Wayland, нахуй не надо.
>>971895
Qt так-то куда хуже выглядит, еще и виснет.
Вот слева evince (GTK3), справа okular (QT5)
Четко видно кто в 90х застрял сука.
okular еще и виснет, охуеть просто.
#377 #971951
>>971694
Что?
#378 #971957
>>971694
в c99 возможны 3 варианта представления знака. зависит от реализации.
971969
#379 #971961
>>971592
так что, приделы для безнаковых можешь скаставать 0xffffffff к соот. типу, перед этим проверев существование LONG_MAX, иначе - 0xffff. больше ничего придумать не могу.
971962
#380 #971962
>>971961
Слишком сложно для человека, читающего вторую главу K&R. Ну ладно, не буду этим заниматься, просто выведу.
91 Кб, 1111x513
#381 #971969
>>971957
Охотно верю
971983
я просто спрошу это здесь. #382 #971972
https://pastebin.com/6Fx9dEGR
мудрый анон, что нетак с этим куиксортом? На 9 из 10 наборах дает верный результат, пытался осилить дебаггингом и в сухую, но все равно не могу понять в чем подлива.
971984
#383 #971983
>>971969
понятно что он имел в виду.
-1(uint) - не переполнение, а конвертация.
971985
#384 #971984
>>971972
1. Сделай нормальное имя массива arr.
Почему не скопипастил рабочий алгоритм?
971987
#385 #971985
>>971983

>понятно что он имел в виду.


Кто "он"? Твой МЧ?
971988
#386 #971987
>>971984
Потомучто куиксорт - это самоцель и я хочу разобраться
за имя массива извенения :с
972021
#387 #971988
>>971985
не знаю как ты будешь переполнением выводить пределы. хотя знаю, создашь для каждого типа переменную, проинициализируешь нулями, а потом в рантайме вычтешь 1?

как хочешь.
Dmitry #388 #972021
>>971987
Оно уже есть в glibc и работает там быстрее, более под железо заточено.
Чесно говоря не разбирал куиксорт, но читал, там больше кода было.
972033
#389 #972025
https://pastebin.com/Ueix2sRG
Написал подпрограммы для работы со стеком, не могу добавить с помощью нее элемент в стек. да, я даун
Где я обосрался? Хэлп плс
972027
#390 #972027
>>972025
тебе в другой тред.
972029
#391 #972029
>>972027
В какой? Я думал тут только этот по си
972032972034972036
Dmitry #392 #972032
>>972029
Библиотеку пиши.
972043
#393 #972033
>>972021
обычно свап прямо в теле делают
и оформляют все в постусловном цикле
спсы, энивей
#394 #972034
>>972029
В Си нет операторов new/delete.
972043
#395 #972036
>>972029

> delete/new


> C


выбери одно
972043
#396 #972043
>>972032
В этом и цель, тип написать библиотеку с подпрограммами для работы со стеком
Но сначала надо просто программу сделать, что бы протестировать их все, а я не могу добавить элемент
>>972036
>>972034
?
Странно, мы в универе изучаем Си и нам препод их давал, лул
Еще когда списки проходили
972047
#397 #972047
>>972043
А что такое printf("%d сообщение\n") вам препод рассказать забыл? БЕГИ ОТТУДА И вообще, непонятно, чего ты хочешь. Элементы добавляются.
972050
#398 #972050
>>972047
Разве я правильно все написал?
Ахахахаххахахахахаха, про /n рассказывал, ебать в голос чет
Просто у меня уже 4 утра, я по фасту написал то что в мэйне и сюда кинул, ибо хз
972053972056
#399 #972053
>>972050
\n* ahahah
#400 #972056
>>972050
Нет, ты всё написал неправильно. Твой код не компилируется, половина кода не выполняется. В стек ты пихаешь неинициализированную переменную. Стеком называется вся структура данных, а не один ее элемент. Пишешь ты на смеси C и C++. printf ты не осилил.
972059
#401 #972059
>>972056
Ахахах, на счет принтфа я тебе объяснил
Я не понимаю, о какой смеси Си и крестов вы говорите, что тут кроме new/delete с крестов?
972060
#402 #972060
>>972059
Например, main. Например, кривой (неработающий) typedef.
972062
423 Кб, 1080x1832
#403 #972062
>>972060
В мэйне треш, я об этом и говорю
Тайпдеф просто по дефолту пишу перед страктом, хз
Энивей он не мешает

Вот скрин из нашей методичке по Си, delete/new тут есть
Либо вы меня троллите с этим, либо я совсем уже потерялся
972063972065972068
#404 #972063
>>972062
слово объект тебя не смущает?
972068
#405 #972065
>>972062
Есть Ц и есть кресты. new/delete это штука из крестов, не из Ц. Может вас крестам учат, а ты не понимаешь этого?
972069972078
#406 #972068
>>972062

> Энивей он не мешает


Он абсолютно ничего не делает, не добавляет никаких новых сущностей. Я даже не уверен, скомпилируется ли это в Си. Программа работает только потому, что в C++ теги (имена) структур сразу являются типами, и писать struct Имя, как в Си, не обязательно.

>>972063
В стандарте Си про каждую переменную говорят "объект". Это нормально.
#407 #972069
>>972065

>Может вас крестам учат, а ты не понимаешь этого?


почему тогда принты...
972071972072972077
#408 #972071
>>972069
Потому что удобнее.
#409 #972072
>>972069
Потому что препод не шарит. Я тебе уже говорил - беги, пока не поздно.
972075
#410 #972075
>>972072
Или он считает что printf удобнее чем iostream
972076972078
#411 #972076
>>972075
Если люди так считают, они говорят #include <cstdio>.
#412 #972077
>>972069
А почему бы собственно и нет?
#413 #972078
>>972065
Ахаххаха, да нет
Я не такой даун, первый семестр неплохо закончил, и с от крестов отличить могу
И да, чекни библиотеки
>>972075
Ахахаххаха, найс рофлишь
Бля, так и знал что вы суки троллите меня
972080972081
#414 #972079
Что-то тред снова скатился. То ООП, то кресты. Вот нет, чтобы атрибуты в грядущем стандарте обсудить. >>966915
972100972109972111
#415 #972080
>>972078
http://ideone.com/nKI0jH
Что не так, отличитель ты наш плюшевый?
972082
#416 #972081
>>972078
Братюнь, толсто.
972083
#417 #972082
>>972080
Строчка начинающаяся с int* a
#418 #972083
>>972081
Бляя, не знаю, что вы творите тут
Но теперь мне еще страшнее идти завтра на пару чем без этой программы
972085
#419 #972085
>>972083
В общем так: идешь на пару, начинаешь возбухать, что вас учят крестоблядию вместо ламповой сишки. Говоришь, что из-за этого обмана не сделал программу
972088
#420 #972088
>>972085
Бля, ну правда норм рофлите тут
Но я ночь не сплю, что бы написать эту хуйню до утра и в итоге вы меня так запутали что пиздос

Хз, просто я вчера показывал преподу эти подпрограммы, он немного подредачил одну и сказал все норм, просто сделай типо, что бы они запускались по очереди и все
972090972091
#421 #972090
>>972088
Так подредактируй. Тебе уже перечислили все косяки.
972093
#422 #972091
>>972088
А у тебя есть заголовок твоих лекций? Скрин сделаешь нам?
972093
#423 #972093
>>972090
Я пофиксил принтфы, убрал тайпдеф
Но это не значимые косяки, я хз что дальше с этим всем делать теперь
>>972091
Смысл?
Ну спалите вы моего препода и
Бтв учусь не в такой уж и шараге, топ 30 вузов россии
Не думаю, что препод может путать Си и кресты блять
972095972096
#424 #972095
>>972093

> Не думаю, что препод может путать Си и кресты блять


Тут варианта два: либо всё напутал, либо ты.
972097972098
#425 #972096
>>972093
Мы хотим спалить не твоего препода, а "Курсы ЦПП для дауничей из заборостроительного, 1 час в неделю", дурашка.
972101
#426 #972097
>>972095

>либо он


фиск
#427 #972098
>>972095
Как можно их попутать?
В крестах же iostream, using namespace, cin, cout etc
А у нас такого нет и никогда не было в курсе
sage Dima #428 #972099
Хватит уже зелёного кормить, заебали.
972211
#429 #972100
>>972079

> The maybe_unused attribute


ненужно. если есть варнинг на аюзед, возьми код в #ifndef NDEBUG.

> The fallthrough attribute


блевотина. для неосиляторов switch. серьёзно? если компилятор вам выдаёт такие варнинги, то это повод прописать ему в щи с вертушки и отключить этот клятый варнинг. вы ещё побольше скобочек вокруг & лепите, вместо того чтобы выучить приоритеты.
972106
#430 #972101
>>972096
Ахахах, ой все крч
Завтра утром поговорю с преподом на счет этой хуйни всей и напишу итт
#431 #972106
>>972100

> возьми код в #ifndef NDEBUG.


У меня колбек, его вызывает либа. Что ты предлагаешь взять в NDEBUG? Как ты объяснишь компилятору и читателю, что ты не используешь аргумент намеренно?

> блевотина. для неосиляторов switch


Я пишу на сишечке уже полтора десятка лет (с лишним, если считать ньюфажество и фриланс). И все равно бывают случаи, когда я забываю break (обычно копипаст или мерж кода). И чаще всего fall-through хочется для case FOO: case BAR:. Хитровыебанная лапша с неявным goto c помощью switch не нужна и должна быть переписана.

> вместо того чтобы выучить приоритеты


Знаю приоритеты, очень долго писал foo << bar & baz без скобок. Когда с кодом стало работать большое количество людей, стало ясно, что мои знания и предпочтения не значат нихуя, читабельность гораздо важнее.

Рано или поздно все взрослеют, умнеют, перестают выпячивать знанания языка в своем коде и начинают писать читаемо.
972116
#432 #972109
>>972079

> The nodiscard attribute


ещё одна борьба с варнингами. ебанутые.

> The deprecated attribute


комментарии писать не пробовали?

диагноз: отбитые.
972114
#433 #972111
>>972079

> Attributes in C


давайте сделаем из с с++.
972117
#434 #972114
>>972109

> deprecated


> комментарии писать не пробовали?


У тебя есть код, использующий функцию сделать_хорошо() из какой-то либы. Код давно написан, работает и не требует изменений. Как разработчики библиотеки могут тебя предупредить, что они опять все сломали перепидорасили API, и скоро твой код перестанет работать? Ты читаешь документацию и хедеры каждой либы для каждого нового релиза?
972119
#435 #972116
>>972106

> У меня колбек, его вызывает либа


не понял.

>И все равно бывают случаи, когда я забываю break


не знаю как это комментировать, не допускаю таких ошибок.

> читабельность гораздо важнее


> Рано или поздно все взрослеют, умнеют, перестают выпячивать знанания языка в своем коде и начинают писать читаемо.


ты просто оправдываешь своё превращение в макаку.
972122
#436 #972117
>>972111
Давайте. Неплохо бы __attribute__((cleanup(...))) стандартизировать.
#437 #972119
>>972114

>Ты читаешь документацию и хедеры каждой либы для каждого нового релиза?


прикалываешься? что это поменяет? тебе всё равно придётся переписывать код. это вопрос в доступности информации - зачем это тащить в синтаксис?
972122
#438 #972122
>>972116

> не понял.


Ты предлагаешь что-то ифдефать. Что именно?
void handler(int unused) {
terminating = true;
}
// Где-то в main.
signal(SIGINT, handler);

> ты просто оправдываешь своё превращение в макаку


Так для меня-то по прежнему нет проблем писать без скобок, делать for без тела или еще как-нибудь извращаться. Почему я вдруг макака?

>>972119

> тебе всё равно придётся переписывать код


Увидеть ворнинг, создать тикет и переписать в плановом режиме; переписывать с горящей жопой, когда разработчики либы все сломают или, хуже того, не трогать код полгода и узнать о проблеме от кастомеров, которым, как обычно, все нужно вчера?
972131
#439 #972131
>>972122

> Ты предлагаешь что-то ифдефать. Что именно?


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

>>972122

>Увидеть ворнинг, создать тикет и переписать в плановом режиме; переписывать с горящей жопой, когда разработчики либы все сломают или, хуже того, не трогать код полгода и узнать о проблеме от кастомеров, которым, как обычно, все нужно вчера?


теперь ты оправдываешь свою лень. это твои проблемы что ты не узнал что ЛОМАЮТ АПИ - нихуя себе история.

>>972122

>Почему я вдруг макака?


ну или нет. например, потому что поддерживаешь фишки которые всем усложнят жизнь и только тебе облегчат.
972137
#440 #972133
в любом случае.

> Array Sections


вот это интересно смотрится, недавно думал об этом.
#441 #972137
>>972131

> как у тебя это получается?


Ну привет. -Wunused-parameter включается с -Wextra (ну или -Weverything в clang). И да, люди этим пользуются. И да, если у них что-то где-то для совместимости, они делают:
#define UNUSED_ARGUMENT(arg) ((void)(arg))
...
int handler(int sig) {
UNUSED_ARGUMENT(sig);
}
Классика жи. А теперь вот решили это стандартизировать, а новый синтаксис позволит не делать по хедеру на каждый атрибут, как было раньше (например, stdnoreturn.h /__Noreturn).

Вообще, когда я поднимал эту тему, я надеялся услышать мнения про синтаксис. GCC-шный вариант более вменяемо выглядит, поддерживается многими IDE и меньше ломает парсеры в тех редакторах, которые про него не знают. Или нет?
972141972142
#442 #972141
>>972137
моё мнение: всё говно и всё равно придётся прятать за макросы.
#443 #972142
>>972137

>И да, люди этим пользуются.


может я тоже буду так делать. выглядит, логично.
#444 #972211
>>972099
Двачую этого. Развели тут
22 Кб, 1190x426
17 Кб, 700x604
71 Кб, 423x423
#445 #972241
Умоляю, помогите пожалуйста.
Хочу сделать консольную задачу, установил визуал студио, и вот такая херня выскочила.
Дело в том, что если нажать да - код все равно не будет работать, я и другие пробовал, 100% рабочие - не работает ничего.
Как исправить?
#446 #972245
>>972241

>Умоляю, помогите пожалуйста.


продолжай
#447 #972251
>>972241

> код все равно не будет работать


Подробнее поясни. Покажи выхлоп компилятора из панельки Output. Скинь бинарник, если он не пашет. Проверь время и дату на компе.
#448 #972271
>>972241

>код все равно не будет работать


чет кек
#449 #972332
>>972241
Я так понимаю все дебыли перекатились из C++-треда сюда.
13 Кб, 474x45
42 Кб, 548x610
#450 #972359
>>959643 (OP)
Сап, погромисты. Пик 1 - задания, пик 2 - прога. Я правильно понял задание и сделал или хуйня?
972367972390
#451 #972367
>>972359
Под упорядочиванием видимо подразумевается сортировка.
972372
#452 #972372
>>972367
Каким образом можно её произвести? Курил интернеты, но не нашел примера на Си.
972373
#453 #972373
>>972372
Берешь обычную сортировку и применяешь к каждой строке по отдельности.
972421
#454 #972390
972392
37 Кб, 626x352
#455 #972392
>>972390
в моей такого нет
32 Кб, 598x333
#456 #972421
>>972373
Ананас, прости за мою тупость, но я правда не знаю как сортировать. Вот написал новый простой массив. Почитал про всякие методы сортировки, но непонятно, в какой момент её нужно вставить, например, в пикрелейтед?
972426972572
#457 #972426
>>972421
Пиздуй в армию, ты безнадежен.
972471
#458 #972471
>>972426
нахуй он нам тут нужен
972689
#459 #972572
>>972421

> #define + -

#460 #972652
Что-то столкнулся проблемой сейчас

void main()
{
int k, c;

while ((c = getchar()) != EOF)
{
if (c == '\n')
{
++k;
printf("%d\n", k);
}
}
}

выводит не "1" как ожидается, а 32763 может и 32768 вывести.

Что-то не стыкуется с моими знаниями о том, что int k; инициализирует k в 0
972659972830
#461 #972658
Почему сайт этого вашего LLVM такой тормозной, хотел скачать дистр, а скорость 7 кб/с о_О при этом пробовал с разных ВПН (думал м.б. рашкованские айпи зарезали).
972703972751
#462 #972659
>>972652
А оно и не инициализирует.
972674
#463 #972674
>>972659
я понял да. значение на момент объявления неопределено
#464 #972689
>>972471
Двачую майора
#465 #972690
>>972241
>>972241
поставь gcc и не еби мозг
компилируй через cc hello_world.c
972703
#466 #972703
>>972690

> компилируй через cc hello_world.c


сс - это симлинк к компилятору C по умолчанию. С тем же успехом это может быть clang.

>>972658

> скорость 7 кб/с


It's just you. Кабельный МТС - 150-200 КБ/с.
972749
#467 #972742
>>966484
Попробуй кинуть код (hello.c) в директорию llvm/bin (где лежит clang) и снова выполнить clang hello.c
#468 #972745
>>966484

>Я новичок.


>Поставил Clang.


Откуда ставил?
#469 #972749
>>972703

>It's just you. Кабельный МТС - 150-200 КБ/с.


У меня скорость 30-32 мбит/с (при скачке обычно 3.5-3.9 мб/с), так что нахуй, это сайт LLVM'а тормозит.
#470 #972751
>>972658
охуеть, а форкнуть репозиторий и самому собрать никак? Там же даже мейк есть, просто в консоли две команду прописать, ну
972769
#471 #972753
Допустим есть в winform 5-ь кнопок (button1,button2...button5)
и для одной из кнопок мы можем задать параметр TEXT путём введения команды:
i=1;
this->button1->Text = Convert::ToString(i);
в итоге мы получим кнопку с числом 1 в text'e.
Но как сделать это через цикл,ведь для каждой кнопки не будем выделать ещё 1-у строку и делать индусский код.
;#####################
for(i=0;i<5;i++)
{
this->button->Text = Convert::ToString(i);
}
не сработает...(проблему выделил) . Как в cpp можно реализовать решение данной проблемы?
972864973146
#472 #972754
this->button->Text = Convert::ToString(i);
отвалилась проблема, FIX.
972755972864
#473 #972755
>>972754
Мда, что то идёт не так в общем трабла в "button"
this->button->Text = Convert::ToString(i);
972767
2 Кб, 312x36
#474 #972757
Блять, макака походу издевается.
#475 #972767
>>972755

>Convert::ToString


пиздуй ка ты к плюсанам
972768
#476 #972768
>>972767
Нахуй нам C++/CLR не нужно.
972803972864972970
#477 #972769
>>972751

> форкнуть репозиторий и самому собрать никак?


Мне почему-то кажется, что даже скачать готовые бинарники по модему (олдскульному, через телефонную линию) будет быстрее, чем это собрать.
972857
#478 #972803
>>972768

>C++/CLR не нужно


так и пиши на си тогда
#479 #972830
>>972652
я ввожу любой символ и у меня начинается а принтует у меня "к" начинает с числа 3. это потому что не определено какое значение принтовать ? Если определить к=0 то будет с единицы печатать.
мимо начинающий неосилятор
#480 #972857
>>972769
Ну на урезанном i5-u(5 поколение) у меня собрались за ~40 минут
#481 #972864
>>972754 >>972753
Съеби в плюсотред.
>>972768
Какой ещё CLR, уёбок?
972893
#482 #972868
Поцоны, а что скажете вот по этой статье?

http://eax.me/c-vs-cpp/
972876
#483 #972876
>>972868
Правильно пишет. Надо все что можно писать на C, и даже если надо C++ большую часть кода можно написать на C и использовать.
На C++ даже компиляторы ничего не гарантируют, с горем пополам могут в последние стандарты.
33 Кб, 738x406
#484 #972885
Разбираю шаблон программы для STM32 на С.

Это вообще легально, описать static и non-static прототипы для одной и той же функции? Мне показалось, что нелегально, потому статический прототип закомментировал. Правильно сделал?
972945973146
#485 #972893
>>972864

>Какой ещё CLR, уёбок?


Совсем тупой?
972956
#486 #972945
>>972885
static Надо делать, убирай статик если будешь юзать функцию другим файлом.
#487 #972956
>>972893
Ты тупой, МБ? CLR - это что, по-твоему?
#488 #972970
>>972768
Ты что, ебанутый?
973046
#489 #972984
Здравствуйте, посоветуйте пакетный менеджер для C типа npm или pip.
972989973010973146
319 Кб, 512x512
#490 #972989
>>972984

> пакетный менеджер для C

#491 #973010
>>972984
Но нахуя?
#492 #973046
>>972970
Нет.
973093
#493 #973093
>>973046
Тогда что такое CLR, уёбок?
973146
#494 #973146
>>972885

> Это вообще легально, описать static и non-static прототипы для одной и той же функции?


Я спрашивал в одном из тредов насчет static, restrict и const. Никто не знает. В стандарте все очень мутно. Но вроде бы делать прототип без static, а саму функцию определять со static - это нормально.

>>972984
Системный пакетный менеджер (pacman, apt, dnf) - это и есть пакетный менеджер для Си, он позволяет ставить компиляторы, либы и хедеры.

>>973093
CLR - это Common Language Runtime. C++/CLR - это извращение, позволяющее писать на крестах под дотнет. У >>972753 именно оно. Использующие это идут нахуй в C# тред. Заебали срать.
973148
sage #495 #973148
>>973146

> функцию определять со static


Бля, наоборот. В общем, я имел в виду, что декларация задает тип и видимость.
53 Кб, 705x655
11 Кб, 343x182
#496 #973248
Сап анон! На связи кун который вкатывается в C. Читаю классику от отцов. Дошел до задания где надо гистограмму длины слов из входного потока построить. Подскажи анон, все ли на месте? По длине массива сделал с расчетом на 1000 слов, так как не знаю еще как динамические массивы делать в сишечке
#497 #973255
>>973248
Нахрен ты нам фак показываешь?
#498 #973256
>>973248
Нормально. Особенно, если это твой первый язык.
1) Если у тебя будет два пробела подряд, зачтется как пустое слово.
2) Выражение words[wordsCount++] = lettersCount лучше показало бы твои намерения.
3) Если в if / else у тебя хотя бы в одной ветке есть фигурные скобки, ставь их и в другой (да, синтаксис позволяет писать, как у тебя, но выглядит это неоче). Это правило обычно встречается в каждом первом стайлгайде. У некоторых принято писать фигурные скобки вообще всегда (в основном из-за убогих текстовых редакторов).
4) Второй while лучше заменить на for - лучше показывает намерения. В C99/C11 ты еще и переменную в заголовке for объявишь, и ее не нужно будет искать глазами.
5) Переменные лучше объявлять как можно ближе к их использованию, поэтому int i я бы положил внутрь второго while (даже C89 это позволяет) или в заголовок for (С99/С11).
#499 #973268
>>973248
У мейна прототип int main(int argc, char argv);
Каждое объявление переменной с новой строчки и лучше делать с инициализацией:
int c = 0;
int i = 0; и тд
К каждому ифу добавляй скобочки, даже если одну инструкцию выполняешь
Если просто инкрементишь переменную, то i++; выглядит лучше, чем ++i; (хотя в плюсах последний варик для объектов лучше из-за отсутствия лишнего копирования)
973272973279
#500 #973272
>>973248
Анон, не слушай этого >>973268 пидора, ну разве что последнюю строчку. Вредные советы.
973279
sage #501 #973279
>>973272
>>973268
Про прототип мейна - правильно. Я не заметил. Есть int main(void) и есть int main(int argc, char ∗argv[]) (он же int main(int argc, char ∗∗argv)). Других мейнов в стандарте нет.

> выглядит лучше


Это наоборот плохой совет. Постинкремент нужен для специальных случаев. Его все поголовно используют неправильно, но лучше не привыкать так делать. В свое время была шутка, которую упоминал даже сам Страуструп, что язык C++ даже назвать правильно не осилили - улучшенный C логично было бы назвать ++С.

> лучше делать с инициализацией


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

> к каждому ифу добавляй скобочки


А вот и человек с ed вместо редактора подъехал.
973281973284973289
#502 #973281
>>973279

>Других мейнов в стандарте нет.


Есть imlementation-defined.

Может ты мне ещё запретишь envp через main получать, гнида?
973285
#503 #973284
>>973279

> В свое время была шутка, которую упоминал даже сам Страуструп, что язык C++ даже назвать правильно не осилили - улучшенный C логично было бы назвать ++С.


Нет, просто «I think maybe the guy who invented C++ doesn’t know the difference between increment and excrement.»

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


А так он будет ругаться на defined but not used.
973288
sage #504 #973285
>>973281

> envp


Бля, вот все время забываю, что envp на самом деле в стандарте есть (в списке распространенных расширений). Но тем не менее, это все равно расширение, которое какбэ намекает на возможные проблемы с переносимостью. Да, оно везде реализовано, но все же.
sage #505 #973288
>>973284

> А так он будет ругаться на defined but not used.


Будет причина удалить нахуй неиспользуемую переменную. На самом деле я согласен, что инициализация при объявлении желательна. Но только если у нас C99 и выше, где мы объявляем переменные по месту, а не в начале блока, т.е., нам видно, что вот она наша переменная, и мы ее сразу инициализировали, и нам понятно, зачем мы это сделали.
973292973294
#506 #973289
>>973279

>А вот и человек с ed вместо редактора подъехал.


Дебик, даже в гугл код стайле прописано, что так надо делать. Хотя да, мане из ебеней лучше знать.
973290
#507 #973290
>>973289

> гугл код стайле прописано


Какого бреда там только не прописано. Самый бредовый — что пробелы лучше табов.
973291
#508 #973291
>>973290

> пробелы лучше табов


Боже, нет, только не снова! Давайте перекатываться лучше.
#509 #973292
>>973288

>если у нас C99 и выше


Мань, на дворе то 2017, просыпайся
#510 #973294
>>973288
Насколько знаю если все инициализировать в начале то программа должна быстрее работать.
973296973298973299
541 Кб, 480x228
#511 #973296
#512 #973298
>>973294
Абсолютно похуй, когда компилятор положит переменную в стек. Мало того, он все равно положит ее тогда, когда захочет.
Тем временем мы перекатываемся без шапки, потому что в шапке образовалось слово из спам-листа. Спасибо, Абу!
#513 #973299
>>973294
Ага, а если для названий переменных использовать только одну букву, то еще и памяти меньше отожрет
А вот и оптимизации уровня /pr подъехали
**ПЕРЕКАТ** # OP #514 #973301
>>973297 (OP)
>>973297 (OP)
>>973297 (OP)
>>973297 (OP)

Перекатываемся, но макаке не нравятся наши книжки. Пора пилить гайд куда-нибудь на гитхаб.
Тред утонул или удален.
Это копия, сохраненная 4 июня 2017 года.

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

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