Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002) Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994) "Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
>>1339857 Похоже, ошибся тредом ты. Это у соседей явно прописано, что E1->E2 это эквивалент (*(E1)).E2, так что всё просто. А вот в C со вторым может быть UB, когда с первым его может не быть. Забавно.
>>1339861 https://pastebin.com/ARxKm18y ну вот, например 8-я и 9-я строка Хоть такой каст указателей и доступ к члену несуществующей структуры и сомнителен, вроде считается что так можно. Однако, в 9-й строке, `°ps` это lvalue а про него сказано http://port70.net/~nsz/c/c11/n1570.html#6.3.2.1 > An lvalue is an expression (with an object type other than void) that potentially designates an object; if an lvalue does not designate an object when it is evaluated, the behavior is undefined.
>>1339866 > доступ к члену несуществующей структуры и сомнителен По-хорошему так нельзя, потому что типы разные.
> объекта типа struct S нет Так чего ж ты кастил указатель, если объекта нет? Ты определись, либо кастить можно, и объект есть, либо у тебя все сломалось еще при касте.
>>1339874 То есть, нельзя кастить, если объекта нет? Тогда, например, integer aliasing (разрешение читать int через lvalue типа unsigned int и т.д.) теряет всякий смысл, т.к. по-твоему нельзя кастить указатель на int к указателю на unsigned int.
>>1339880 > integer aliasing Это разрешено явно до сих пор не понимаю, нахуя, как и чтение байтиков инта через указатель на char. В остальных случаях тебе нужны совместимые типы. Структура с интом несовместима. На самом деле в моем мире бегают розовые пони, помахивая -fno-strict-aliasing, поэтому у меня нет никакого UB при чтении интов через структуру. Чего и тебе желаю.
>>1339890 > Это разрешено явно до сих пор не понимаю, нахуя, как и чтение байтиков инта через указатель на char. В остальных случаях тебе нужны совместимые типы. Лазать через структуру явно разрешено в том же списке http://port70.net/~nsz/c/c11/n1570.html#6.5p7 > An object shall have its stored value accessed only by an lvalue expression that has one of the following types: > … > — a type that is the signed or unsigned type corresponding to the effective type of the object, > … > — an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union), or > — a character type.
>>1339893 > an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union), or Там просто формулировка говно, смотри сноску, это про алиасинг. Имеется в виду, что int будет алиаситься не только с char или каким-нибудь unsigned интом, но и со структурой, у которой один из членов int или совместим с ней.
Классика. Это UB: void test(float ∗a, int ∗b) { ∗a = 1.0; printf("%g\n", ∗a); ∗b = 0; printf("%g\n", ∗a); // Компилятор может не перечитывать a. } float foo; test(&foo, (int ∗) &foo)
Это нет: struct s { float x; }; void test(float ∗a, struct s ∗b) { ∗a = 1.0; printf("%g\n", ∗a); b->x = 0.0; printf("%g\n", ∗a); // А вот тут компилятору придется перечитывать a. } float foo; struct s bar; test(&foo, &bar);
>>1339904 Ну так и почему кастить к указателю на unsigned int можно исходя из тех правил, хотя объекта типа unsigned int нет, а кастить к указателю на структуру нельзя?
>>1339905 > почему кастить к указателю на unsigned int можно исходя из тех правил Я уже говорил, что не знаю, почему сделано исключение для signed/unsigned. Вот с char все понятно, это в свое время завезли для memcpy и прочих fwrite. Какие проблемы может решать чтение signed инта через unsigned, я не понимаю. По мне, оно только ломает alias analysis еще больше.
>>1339915 > совместимости со старым кодом Неужели так много говнокода, в котором путаница со знаком у указателей? По мне, так кода, который ломает strict aliasing - гораздо большая куча, которая к тому же продолжает расти. Вон даже целый линукс есть. Но что-то никто не торопится убирать strict aliasing. Зато убрали gets(), убрали олдскульный стиль аргументов у функций, где же тут совместимость?
>>1339904 Твой код не демонстрирует доступ через aggregate or union type, т.к. b->x имеет тип float. Доступ через aggregate or union type это присваивание структур.
Выражения типа a компилятор заменяет на ☆(a+b), так как выражение симметрично, то с точки зрения компилятора следующие выражения идентичны: array и i[array], так как будет заменены одинаково: ☆(array+i); ===== зачем вообще понадобиться может писать i[array]?
>>1340043 > Просто мне кажется, все исправить не выйдет А ты постарайся. Можно писать даже для шланга с его -Weverything.
>>1340258 > Неисправляемый ворнинг лучше подавить Если уж совсем никак нельзя по-другому, то да, стоит отключить, но лучше локально (#pragma GCC diagnostic push, #pragma GCC diagnostic ignored "-Wshootingyourselfinthefoot", #pragma GCC diagnostic pop или аналоги). Иначе можно проебать реальную проблему в том же файле.
Как прочитать размер аллоцированого чанка? Везде вроде пишут, что предшествующий size_t хранит размер. Пытался по всякому прочитать p[-i] память, но там вроде чёто-то нето.
>>1340756 Выделяй степень двойки, храни размер сам, не лезь не в свое дело. Ты ведь понимаешь, что оно зависит от реализации - сегодня так, а завтра сломалось?
> у Винды всё по другому У какой винды? Какой компилятор? Какая версия рантайма? Например, если линковаться с MSVCRT, то перед блоком будет указатель на структуру с информацией.
>>1340756 >>1341064 Мимокрок на линии. Читаю Game Engine Black Book: Wolfenstein 3D, ну вот прям от всей души рекомендую. Хитрые изъебы с памятью в том числе весьма интересны. Я просто дохера часов убил в свое время на эту игрулю, объяснение внутренностей весьма доставляет.
>>1341259 >у тебя бесконечная память с нулевой латенси и бесконечный проц Ну бля, товарищь Тюринг, я больше не хочу с вами ебаться в жопу. Давай примеры и обоснования, епте.
>this book has only bit of text and plenty of drawings attempting to describe in great detail the Wolfenstein 3D game engine and its hardware, the IBM PC with an Intel 386 CPU and a VGA graphic card.
Автор маладца, сам Ромеро рецензировал. Я кинул ему 20 баксов, просто за слезы ностальгии.
>>1341274 >инженеры пишущие и оптимизирующие код Инженерам на тот момент было около 23х лет, мне почти в два раза больше, чемпион по проебыванию жизни впустую.
жаль, что описанные в книге подходы устарели и в современном байтоебстве и оптимизоне кододрочерство, алгоритмы и безумные асмовые вставки уступили место датадрочерству и превращению структур данных в write-only пиздец (кококо микроархитектурка порешала). И вот нихуя не понимаю, зачем они при этом на крестах пишут процедурный код.
Степень происходящего пиздеца в современном ёбастрое можно оценить в гитхабе:
>>1341675 Это откуда? Про вольфенштейн? Сейчас маллоки достаточно крутые, чтобы не пилить ничего своего (кроме, разве что, пулов объектов), но в 90х были все описанные проблемы.
>>1341857 На деле хотелось бы изучить программирование драйверов под Windows 9x 7, 8.1, 10 (насколько я знаю WDK windows 10 един для них). Меня интересует программирование драйвера фильтров.
Лиспотред либо отсутствует, либо умер давно. Скоро заканчиваю читать прату. По совпадению появится еще немного свободного времени. Хочу в сторону лиспа двигаться. Очень нравится парадигма. Пробовал Haskell, но несмотря на то, что не так уж и сложно, в целом, не зашло.
>>1341794 >Это откуда? Про вольфенштейн? Сейчас маллоки достаточно крутые, чтобы не пилить ничего своего (кроме, разве что, пулов объектов), но в 90х были все описанные проблемы.
В наше время кастомные аллокаторы поверх выделенного штатным тоже используются но по другой причине (сосноли соснули) и всего двух простейших типов - stack allocator когда коридорное кинцо, очень легко выделять и прибивать сразу весь уровень/этапы и pool allocator используют когда кинцо с опенворлдом и ГТА-подобное и в процессе движения камеры/персонажа мир постоянно загружается/выгружается. В таком случае домики и пешеходы квадратно гнездовым методом впихиваются в чанки стандартных размеров.
>>1341939 Попробуй в сторону clojure, хотя бы что-то практичное будет. Из функциональщины в проде используется только erlang/elixir (по сути одно и тоже, синтаксис просто разный, если не углубляться), scala (сидит на двух стулах) и clojure какой-нибудь. Поэтому можешь попробовать что-то из этого, но сразу скажу, что будет очень непривычно, по крайней мере, со мной это было так. Я от эрланга первую неделю ахуевал нехуйски.
>>1342169 конечно, читал, никогда не советую книги которые сам до этого не прочитал плюс еще в том, что даже последние издания есть на русском - темы, которые там затрагиваются, и так сложные, если их еще и на английском читать, то мозг вспухнет
>>1342344 >Есть же сикп-тред и кложетред. ЛОЛ, их тоже уже нет. Судя по всему, либо вопросов нет, либо у специалистов такая дикая востребованность, что нет времени здесь сидеть.
>>1342362 >А CL уже все? Уже все. >>1342361 Он есть где-то на дне, поищи получше, да откроется он тебе. >>1342370 Возможно, но не вижу смысла кому-то его использовать в проде.
>>1342398 Какой? У меня был знакомый, который этим зарабатывал, но он, когда ходил как-то странно подпрыгивал, махал руками, из еды ел только печеночные паштеты и яблоки. Он сторчался.
>>1342361 >ЛОЛ, их тоже уже нет По-моему ты просто не умеешь пользоваться двачем.
>что нет времени здесь сидеть Здесь сидят в основном школьники\студенты, мужики скорее иногда потроллить заходят.
>>1342405 Ты перепутал, это был коммон-лишпер (еще в пидорском пиджачке, розовой футболке и с противным носом, да?). Хаскеллисты за здоровый образ жизни! Только штанга, только хардкор.
>>1342413 >(еще в пидорском пиджачке, розовой футболке и с противным носом, да?) Лол, почти угадал, носил постоянно старый рваный оранжевый пиджак, но на лиспе особо не кодил, только на КЛОЖУР.
>>1342430 Он оба языка использовал в работе, как-будто ты сам подобное не делаешь. Каждый программист с несколькими языками работает, за редким исключением в виде каких-нибудь дедов.
>>1342452 >или блек Что за блек? >драйвера Их типов и подтипов дохуя, нужно во всем разбираться? >>1342502 >Форт - для лохов, правильные пацаны выбирают Фактор! Да одно и тоже по сути. У меня для форта вроде процессор завалялся, может стоит вспомнить старину. >>1342499 Язык интересный, поможет мышление развить. Бывает быстрее сишки!111 Вообщем, попробуй, но дальше чем просто увлечение - это вряд ли уедет.
int &x3 = ☆ (int☆) malloc (sizeof (int)); Что запишет эта строчка в х3? Знаю ,что маллок возвращает адрес на массив, но там еще одна звезда появляется и что выходит? х3 хранит адрес адреса этого массива?
>>1342769 >>1342766 Если это плюсы то видимо это ссылка. В общем, ты выделил память, потом разыменовал указатель, получил какое-то значение, то есть мусор, и приравнял ссылке это число, не знаю точно, как работают ссылки, поэтому не могу сказать точно, что в итоге это даст.
>>1342772 extern? >>1342769 Что за редактор и тема? >>1342840 Наверное он имел ввиду выделенный в динамической памяти. >>1342715 То есть специалист по malware? Это в сторону ассемблера, дизасма смотреть надо, наверное.
>>1342395 >>1342370 >>1342362 Смысла в этой эзотерике сейчас мало, по причине того, что практически все нужные в реальной разработке фичи уже включены в стандартные яп. После сишечки упарывай плюсы там, джаву, там есть все, что тебе может понадобиться из функциональщины.
>>1342858 >плюсы там, джаву, там есть все, что тебе может понадобиться из функциональщины. Зачем ты раздаешь свои охуенные советы, если сам нихуяшеньки не шаришь?
>>1342864 F# давно не взлетел, сдох и никому не нужен, привет. Леночка, залогинься.
>>1342899 f# и не собирался взлетать, подыхать и быть кому то нужным это просто еще одно добавление к ml-семейству на хорошей платформе и все очень полезный язык для расширения горизонтов
1) У консолей ограниченная память и без свопа. Чтобы делать ёбу им приходится экономить, а так как еба как правило кросплатформенная, то на пеку переносятся все те же подходы.
2) Как упоминается в статье - частичное избегание стрельбы по ногам с учетом предметной области путем ограничения функциональности аллокаторов.
3) Скорость работы. В тесной связке с файловым движком приобретает большой смысл в опенворлд играх, когда содержимое огромной карты (превышающее размер доступной оперативы в несколько десятков раз) необходимо постоянно кусками прогонять через ОЗУ, в идеале избегая видимых недогрузов и подгрузок.
Собираюсь изучить программирование под unix системы, но в данный момент установить на диск (или дуалбут) linuxbsd не могу, поэтому спрашиваю ответы насчет возможности изучать программирование под unix на шиндовс. Cygwin подойдет? Или надо поставить систему на флешку (не live cd, а именно поставить), or виртуалку с голой консолью (от чего-то тяжелее голой консоли на виртуализации, моя виртуалкоробка улетает к праотцам).
>>1343492 у меня старенький core2duo, 4 гига оперативы, хост - 10я винда на vmware workstation - debian, i3, консоль и vim, кодить можно без проблем, браузер и pdf-viever так же запускаю в винтуалке чтобы на хост не переключатся
могу порекомендовать сделать примерно так же как у меня удачи
>>1343497 Спасибо за совет, задумывался как раз над тайлами. А в vim каково кодить? Можно настроить кошерный автокомплит, подсветку ошибок и прочие радости зажравшихся? Насколько долго учиться кодить в этом, чтобы не сидеть неделю за манами?
>>1343502 есть альтернативный подход к кодингу в виме и в юниксах - в редакторе ты пишешь код а все остальное делаешь в командной строке и соответствующими утилитами
>>1343523 Не могу найти, где для MinGW, собственно, скачать GTK2. Под MSYS2 не вариант, винапи подергать таки надо. Или всякие юниксовые аналоги "получить список файлов в директории" заведутся?
>>1343492 VirtualBox (можно взять старую версию, которая без hardening, она гораздо быстрее стартует), разрабатывать в винде, директорию с исходниками расшарить в виртуалку, компилировать и запускать в линуксе. Виртуалку можно запускать в headless режиме, чтобы не мешалась, подключаться к ней по SSH.
>>1343552 Странно, просто по первой ссылке качаешь GTK и подрубаешь либы вместе с хэдерами, можешь это в студии сделать (только поставь компилировать как сишный код). А вообще по идее msys тоже думаю, что подойдет, но проще будет первый вариант. Также если тебе не критично плюсоватость, то есть Qt, там быстро-легко интерфейс накидай и уже функционалом займись.
Как сделать приложение под линукс на сишке? Т.е. можно было бы выбрать гуй это или в командной строке. Также чтобы это можно было установить как пакет. Не совсем понимаю как это должно устанавливаться, походу через make && make install.
>>1344070 То есть тебе интересно как оформить приложение в .deb(-ВСТАВЬ НАЗВАНИЕ СВОЕГО ЛУЧШЕГО ДИСТРА) архив? В интернете есть масса информации по этому поводу, думаю, нам тут нет смысла это рассказывать. Не из жадности так говорю, а из здравой рациональности.
Товарищи, помогите, пожалуйста, с регулярными выражениями (а именно - с библиотекой regex.h)
Надо из строки вычленить даты форма HH:MM и вывести. Регулярное выражение я составил и протестил, а вот с реализацией через regex.h - проблемы... Не подскажете, что я делаю не так?
>>1344337 Оно нужно, когда ты хочешь помимо (или вместо) куска текста, соответствующего всему регулярному выражению, доставать части в скобках. Первый regmatch соответствует всему выражению, каждый следующий — подвыражениям в соответствующих скобках, в порядке появления открывающих скобок. У тебя там 4 пары скобок + регулярное выражение целиком, итого 5 значений. 19:36 соответствует выражению целиком. Первое 19 соответствует всему подвыражению (([0-1][0-9])|(2[0-3])) так как подходит под первую часть условия "или" внутри него. Второе 19 соответствует просто ([0-1][0-9]). Далее выводится пустое место, потому что в общем тексте совпадения "19:36" подвыражению (2[0-3]) ничего не соответствует. И наконец идет 36, соответствующее последней паре скобок ([0-5][0-9]).
Таким образом нужное количество regmatch'ей в массиве зависит от того, сколько пар скобок тебе нужно анализировать. Если тебе нужно только все совпадение целиком, то можно обойтись без массива.
>>1344455 malloc просто выделяет динамическую память и всё. А ноль должен стоять не в конце памяти, а в конце строки(то-есть после нуля может быть ещё доступная память)
>>1344464 Во-первых есть стандартные функции работы со строками, во-вторых пиши остальное сам. Что тебе конкретно то нужно, вопросы совсем новичковские, почитал бы сперва по сайтикам.
Есть большая структурка, в ней элементы различных типов. Надо заполнить ее из файла, там key = value, ну и скобки иногда. Парсинг-то я сделал, но как по человечески ее заполнить? Пока у меня только тонна строк типа if(!strcmp(key,...
>>1344521 А, вот, пришла идейка накостылить hashmap (или как оно там называется?) для нужных мне типов данных и сгруппировать поля в них. Насколько плохая идея?
Правильное предсказание ветвления вообще замедляет процесс? Допустим если главном в цикле только единожды срабатывает условие. Я обернул его в макрос if(__builtin_expect(!!(x), 0)), будет ли комп после первой ошибки пролетать его не замедляясь?
>>1344665 Linux or Windows, this is not important in this question. You must: 1) Read about DJVU format documentation 2) Read about PDF format documentation 3) ??? 4) Profit Sosi huj kstati
>>1344581 > Правильное предсказание ветвления вообще замедляет процесс Правильное предсказание бесплатное. Неправильное (не важно, хинт, или процессор сам предсказывал) - десятки тактов.
>>1344665 Ty zaebeshsja. PDF dovol'no complicated shit.
>>1344809 Ну вот на винде ты использовал Windows API. Ты #ifdef-аешь функции, где ты их использовал и пишешь аналогичные реализации с POSIX-функциями и линуксовыми либами. Рано или поздно в твоем коде сама по себе выделится прослойка, которая общается с ОС, тогда ты выделишь ее в отдельный файл или даже либу, а #ifdef-ы снесешь.
Если же ты Windows API не пользовался, а обошелся стандартной библиотекой или уже кроссплатформенными либами, ты просто делаешь cc file.c -lsdelatzaebis -lanotherlibrary, все собирается и даже работает, если в твоем коде нет ошибок.
>>1344850 Во-первых, чтобы вставить в сишную строку символ \ надо писать его два раза подряд: \\. Во-вторых, posix'ные регулярные выражения не поддерживают некоторые штуки типа \d, \w и тому подобного, и вместо этого нужно писать [[:digit:]], [[:alnum:]] и всякое такое. В итоге должно получиться что-то вроде этого: "([[:alpha:]]+://)?(www\\.)?([[:alnum:]]+\\.)+[[:alnum:]]+(:[[:digit:]]+)?(/|(/[[:alnum:]]+)+\\.[[:alnum:]]+)?"
Поступила в школу 21. Через месяц будет сложное изучение С. Дайте интересных занятий для проверки своих скиллов. Хочу утереть двачеров, которые говорят, что тянки не могут в программирование.
>>1345529 Добавь после ифа ещё один иф, который печатает "только натуральныеы", если 'n' окажется меньше 1. Либо смени, чтобы if(n>1)... else printf "только натуральныеы" А вообще это обычная рекурсия. Функция вызывает саму себя, понижая каждый раз 'a', прибавля 'n' к промежуточной переменной, которую вернёт когда все рекурсивные вызовы функций завершатся и самая первая функция вызвавшая рекурсию вернёт результат промежуточных вычислений.
>>1345549 В конкретно это случае, давай я распишу. 3 умножить на а = 2 умножить на а + а = 1 умножить на а + а + а == Теперь мы попадаем в наше условия окончания рекурсии, что а на 1 это а, и подставляем. == а + а + а. Надеюсь поймёшь.
>>1345563 Я работаю системным девом по факту, пишу драйвер под линукс. Вышки ещё нет, третий курс пока что. >>1345566 Ну немного балуюсь питоном, ещё на работе всякие баш-скрипты пишу и CI на ямле пилил. В принципе плюсы я тоже более менее знаю, но на работе применять их негде, т.к. в ядро не примут драйвер написанный на плюсах, хех. 20 дал если что.
>>1345442 Я двачер, который не прошел бассейн, зачем так грубо про нас..? Могу только дать совет учить и понимать смысл, а не гнаться за очками. Потому что экзамены важнее. Не копипасти чужой код, даже если в жопе рейтинга. Да и еще, они смотрят на прогрессию, если ты получил 3 лвл, а экзамены пишешь на 0, то это тревожный звоночек. Лучше иметь 1 лвл, но сдать все экзы на 30-60 балов И ты уже проявляешь не самостоятельность, когда пишешь тут такие просьбы. А могла бы тыщу сайтов загуглить сама (в шк этот навык гугления понадобится) И желательно на инглише гуглить тоже.
И вообще я это все рассказываю, не потому что ты тян или мне понравилась ты мне уже не понравилась своим "утереть нос" А потому что я уже не поступлю в эту школу, в договоре написано что шанс 1 раз на жизнь. Так что спускаю их важные данные.
>>1343493 >А чем это обусловлено? Что за у них особенности в архитектуре, что затрудняет реализацию свопа?
Его отсутствием в операционной системе соснулей.
Можешь спиздить на русракере SDK PS4, там про все подробно. Если в кратце - на соснулях уже давно обыкновенные ОС с точно такой же хуевой тучей библиотек, времена ебания регистров на ассемблере закончились лет так 15-20 назад.
>>1345442 > Можно ли обучаться дистанционно? > Нет, вы должны лично присутствовать в Школе 21 в Москве, поскольку основная часть процесса обучения проходит в прямом взаимодействии с другими студентами. К тому же все учебные материалы хранятся в электронном виде во внутренней сети Школы 21, и чтобы получить их, вы должны прийти в школу. Ясно, хуета.
>>1345675 Что значит без фор? Если тебе нужно будет заполнить массив определенным способом ты будешь каждому элементу отдельно присваивать, не юзая for? Хуйня какая-то. базарю очередные юзлес курсы, которые ничем не отличаются от так же бесплатных курсов из инета
>>1345675 Это и означает без сложной логики. Судя по базе заданий, там дают фундамент для последующего изучения алгоритмики. Оно и понятно, новичкам ни в одном языке сложную логику не дадут, иначе они нихуя не выучат.
>>1345854 Ебучий долбоеб научившийся по хело ворлдам с /пр высирать в джейпейн параше свои дженерик проги считающие гыыы скока я ебал телок веди имя узнай знаю ли я пацана с таким иминем))) плиз завали ебало и не пиши ничего. Если ты не понимаешь почему новичкам в си даже на самых тупых курсах в стерлитамаке не дадут а первые месяцы ничего кроме вайла ну или свича с одним кейсом — просто иди нахуй тупой выродок
>>1345922 Ты че тупой? Как думаешь почему в школе треугольники изучают раньше чем призмы и функции? Или ты в шестом классе так же пиздел училкам мол где мои интегралы Мань Аркадьевна зачем мне эту хуйню учить можно же из библиотеки 1996васянлиб функцию вызвать!!!))) Ладно скажу тебе чтобы ты понял получше, очевидно они там готовят не макак-дизайнеров, а реальных программеров, по вашему терминалоебов.
>>1345934 Блядь, чем фор сложнее вайла, ты какую-то хуйню несёшь. А я могу считаться терминалоёбом ака реальным программером, если я пишу драйвер в ядро? Нам не запрещали в универе на первом курсе юзать принтфы или фор/ду вайл.
>>1345939 >Блядь, чем фор сложнее вайла, ты какую-то хуйню несёшь >>1345684 >Что значит без фор? >>1345684 >Если тебе нужно будет заполнить массив определенным способом ты будешь каждому элементу отдельно присваивать, не юзая for >>1345939 >Нам не запрещали в универе на первом курсе юзать принтфы или фор/ду вайл.
Пиздец. Это точно Си тред? Как можно не вспомнить про goto блять. Сразу видно ни строчки кода на ассемблере не писали. мимо фп господин
>>1345963 Если их научат правильно пользоваться goto, окей просто, но тыкать goto там, где можно обойтись без него полный бред, только ухудшает читаемость. да это си тред и тут есть встроенные циклы
>>1345989 Хочешь поподробнее разузнать да? Девочка? Ну спроси ,что конкретно тебя интересует. Может отвечу. А пилить гигантские пасты мне не кайф, и так много тебе дал уже подсказок
>>1345989 Проходил осенью интенсив в юнитфактори, тоже самое, но возможно от школы к школе меняются подходы. Первую неделе ебете линукс до посинения, начинаете разбирать си, собственно следующие 3 недели только сижкой и занимаетесь. В конце первой недели проект вдвоем, после второй — втроем, и на третьей впятером. Последняя неделя — несколько больших пректов, но абсолютное большинство успело сделать только один Если никогда не работала на маке, советую заранее разучить хоткеи, всякие прыгания по страницам, в конец строки, и самое полезное — control+shift+enject Не забывай проверять свои работы перед заливкой на вогсфер, не стесняйся спрашивать у шарящих ребят, ни при каких условиях не заебывай админов, даже если кажется , что они не заняты, хорошо высыпайся и не пытайся что-то сделать дома. Не общайся с одними и теми же людьми, всегда ищи новых и учись у них чему-то бтв юзание дебагеров приравнивается к читингу. Ну и само дальнейшее обучение по крайней мере в Киеве того не стоит, но бассейн это супер экспириенс.
>>1345442 О чём ты вообще? Какое ещё сложное изучение через месяц? >>1345590 Этого не слушайте. Система отбора никому неизвестна, главное стремиться поступить и усердно трудиться. >>1345989 Если до школы не программировал, то задания на бассейне не будут казаться лёгкими.
>>1346269 Я только так и умею. Получается довольно неплохо по крайней мере все работает, хотя я понимаю, что с приличной конторки меня бы выгнали ссаными тряпками. Нииблядь
Привет сигоспода. Прохожу Прату, на пике задача. В принципе, решение из вереницы if-ов приходят сами на ум. Гугление показало что практически все решили именно через простыню if-ов. Но заебавшись в 10й раз переписывать if-ы да, я тупой, решил по-своему. Ты наверное будешь смеяться над ньюфагом, а мне вот дичайше прёт что я написал понятный мне код. Просто хотел поделиться. И вопрос есть - если например железо поддерживает операцию swap как атомарную, как ее вызывать? Через ассемблерные вставки? Спасибо.
>>1346372 > если например железо поддерживает операцию swap как атомарную, как ее вызывать Компилятор и сам может сгенерировать. Но зачем тебе атомарно? Ты бы лучше в restrict поиграл, там ему самое место.
Что почитать по использованию записи "дополнение до 2" с символьной арифметикой? И вообще про операции сложения, умножения со знаковыми и беззнаковыми различной длины. Просто средства контроля переполнений и ошибок в процессорах различных семейств... А то как-то сухо везде, "вот это так делается - делайте так же". Хочется историю, мотивацию к созданию. Можно док-ва из дискретки тоже, что всё это работает, только вкратце, вводить в дискретку талмудами не надо.
Хочу придумать новый язык программирования. Высокоуровневый, мультипарадигма и без ооп. Сейфовый, сверхбыстрый и простым синтаксисом. Сверхбыстрый за счёт увеличения времени компиляции. Тогда даже Си пососет. Вопросы?
>>1346632 Пиздец, это вот этому учат в этой школе: пытаться соптимизировать код из 5 ифов? Ебать как полезно. Скоро дойдете до оптимизации кода из одного принтфахелоу ворлд Даже интересно, вас там будут чему-то реально полезному учить или вот такой хуйнёй будете все время заниматься. Лучше сами что-то немного изучили и начали свой проект пилить, любой, и то больше опыта бы было. не блядь, серьёзно? вот ето — хваленая школа 21?
Сап, анон. Брату в шарагу нужно написать на плюсах программу сортировки пузырьком одномерного массива, который вводится с клавиатуры и имеет 5 элементов. Сам я веб-макака и с плюсами не знаком, можешь накидать код, пожалуйста? Делов на 2 минуты, а я благодарен тебе буду очень.
>>1346784 грит, что у тебя в переменной miDebuggerPath должно быть что-то помимо "gdb". Найди поиском путь до gdb и впиши этот путь в переменную. Как мне кажется. Но я тут просто мимио ошиваюсь
>>1346801 А у тебя компилятор сам-то хоть работает? Потому что если компилятор не видит, то значит у тебя в environment нет переменной, в которой находится путь до компилятора и дебагера. Я к тому, что там в предыдущем пикриле должно быть, наверное, не просто gdb, а full_absolute_path/gdb.exe
>>1346801 А ещё в ошибке указано, что переменная назывется "MIDebuggerPath", но в настройках переменная называется "miDebugerPath". Я так-то хз критичен ли тут регистр, но мне кажется, что критичен. >>1346809 А разве в винде нормально, что путь начинается от корня? Я бы заменил слэши на бэкслэши. И либо вписал "C:\Programm FIles\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin\gdb.exe ", либо "${path}/gdb". Но очевидно, что тут что-то ещё помимо этого. Но на этом мои полномочия всё.
>>1346844 це не язык. це формат передачи данных json, который вытесняет xml, ну, или не вытесняет, но конкурирует с ним. А если ты про язык, на котором обычно пишут, то это английский, ну и судя по тому, что настраивался мингв под студию, то это язык программирования Си, как и тред, в котором мы находимся.
>>1346820 Пердолик поставил на винду пердовысер (даже два!) и пердолится. Что удивительного? Нормальные люди ставят студию и работают, но пердоли работать не могут, вот и ставят пердософт имитируя деятельность пердоленьем с ним.
>>1346920 Вс код тоже проект мелкомягких, как и студия, какие проблемы? Он удобный и намного легче студии. я не говорю, что студия хуже вс кода, каждый пользуется тем, чем ему удобно, нет смысла осуждать кого-то за выбор рабочего окружения
>>1346922 >какие проблемы? Твой дебилизм проблема. И мингв и вскод это линуксовые пердовысеры, какая разница кто их делал. Ни то ни другое на винде не нужно, там есть студия, в 100500 раз лучше, и всё работает без пердоленья. Но пердоля бесполезен, ему страшно когда всё работает, ведь тогда придется что-то делать - программировать, а он не может, вот и качает пердовысеры и ебется с ними, отттягивая неизбежное осознание собственного ничтожества. >намного легче студии Студий дохуя версий, качаешь подходящую к твоему железу. Всё равно любая будет бесконечно лучше пердовысеров. >каждый пользуется тем, чем ему удобно >У МИНЯ НИРАБОТАИТ, ПОСОНЫ ПАМАГИТИ, Я ТУПОЙ Такое-то удобство, азаза. Именно потому что тупой, и ставит пердософт. Как выше и обяснил, пердософн прекрасно подходит дебилам, сознавая из ничего занятие на пустом месте, как колесо для хомячков, в котором они радостно крутятся, воображая что умные и делают умные дела.
>>1346929 Бля, ты какой-то дегенерат, который дико топит за конкретное ИДЕ, хотя ИДЕ это просто инструмент, можно в блокноте код писать, правда только для лаборатории подходит, т.к. серьезные проекты писать без нормального редактора довольно проблемно. чувак, лечись в тебе слишком много злости
>>1346929 Я не ставил студию потому что там много ненужных мне на данных момент вещей. Как научусь грамотно писать проекты - поставлю. А пока функционала vs code мне хватает. Машина тянет студию, просто у меня и так дохуя тяжеловесных программ типа матлаба и прочих cad/cae. Если есть альтернатива более лёгкой (и удобной естественно) версии программы, то почему нет? К тому же будет полезный опыт настройки чтоб понять что к чему и куда идёт.
И вопрос, почему это работает for (int i = 0; i < (p2 - 1); i++) а в случае передачи значения p2 через указатель - не работает for (int i = 0; i < (*p2 - 1); i++)
Добрый вечер. Можете вкратце но аргументированно объяснить почему программист на c# или backend зарабатывает в среднем ощутимо больше, чем на c? Спасибо.
Только идиот будет писать на сишке сейчас то, что можно написать на расте. Если выбора нет (типа всяких ёба-микроконтроллеров), то ладно, пишите на сишке
>>1347063 Предлагаю тебе съебать и заняться делом. Например, выучить какой-нибудь хоть немного полезный язык, а если остаёшься то подготовь свою жопу к принятию моего трехмерного массива
>>1346978 > Это не работает. А должно? А -Wall компилятору не пробовал указать, чтобы он тебе пояснил, что по адресу N (=5), который ты передал в p2, нету размера массива?
>>1347141 > Всё равно. А какая разница, откуда ты берешь число, когда передаешь его вместо указателя? Включи ворнинги, читай ворнинги! А сделать ты хочешь вот это: int length = N; bubl(inp, &length);
>>1346832 Это франшиза топовой французской школы 42. Обучение бесплатно, требуется только пройти отбор, который тоже бесплатный. Выпускники сразу претендуют на сеньеора в гугл.
Сейчас на бассейне по приколу, пришел уже с опытом разработки, и имею щас только 3 уровень, задавайте ответы. Скажу сразу, что есть подводные камни, из-за которых на деле все сложнее, чем кажется.
>>1347203 Можно. Уровень отслеживает твой прогресс. Изучение похоже на типичный С-бугурт-тред: листы, байтоебля, массивы, компилятор. Изучи волл векстра веррор стандарты, ибо после другого языка на си будет перепрыгнуть тяжелее, у меня как у джава-хуя, например, была лютая любовь открывать тело функции в той же строке где она объявлена, из-за чего до 4 дня я получал нулевые отметки, машина даже не будет проверять твои задания, если что-то не по стандарту. Если в задании явно не написано, что определенную функцию/библиотеку/оператор можно применять в задании — значит применять его нельзя. Ну и большинство людей в твоих проектах будут дегенератами, надейся только на себя.
Задания не особо сложные. Если есть базовые знания алгоритмики и понимание типов данных, делать их труда особого не составит, тащемта проверяют они не то как ты пиздато луп с 80 условиями закрутишь чтобы он тебе судоку решил, а твой рост. Первое же про что почитай — типы данных, большинство людей, что на бассейне, что в /пр нихуя не могут именно из-за того что в первую очередь не понимают с чем работают.
>>1347198 >из-за которых на деле все сложнее, чем кажется. Поясни за камни? Был на встрече, хотел спрашивать студентов, но мне сказала Руслана, что такие вопросы нельзя задавать.
>>1347168 Выпускники претендуют? Вас там будут учить 5 лет, и вы все там будете участвовать в реальных проектах, с настоящим рабочим конвейером, CI настроите, тестеры будут отдельной командой. Или что, ты думал ты научишься писать крутойты так будешь думать код и тебя без опыта с одной бумажкой возьмут на сеньора?боже, вы такие наивные
Какой смысл от указателей, кроме их использования в массивах? Часто вижу функции, которые на входи принимают именно указатель, даже если там всего-то одна переменная. Зачем?
>>1347301 В функцию всегда передается копия аргумента. ТО указатели нужны: 1. Чтобы копировать только указатель вместо большой структуры. 2. Чтобы изменения сделанные внутри функции отразились на переданном объекте. 3. Передача колбеков.
>>1347303 Если передавать указатель вместо переменной, это значит что он создаёт копию этой переменной и будет занимать больше места в памяти? Значит надо всегда оперировать указателями, даже если нет необходимости менять аргумент? Просто хочу понять когда имеет смысл использовать указатель, а когда нет.
>>1347338 >вижел Я пока не досмотрел почему, но мне кажется, что последние числа при делении 1/10 это просто данные с соседней ячейки памяти, не связанные с самим результатом деления.
Сап, анон. Возник такой вопрос. Например, я задал структуру, например слова с переводом. Ввожу слово в консоли и перевод через '-', все эти строки записываю в файл. Потом хочу прочитать этот файл и найти перевод нужного мне слова или наоборот. Как организовать поиск нужной строки по файлу без всякой лишней хуйни и динамической памяти(потому что еще не изучил, если она, конечно, в таком роде заданий нужна)?
Реквестирую небольшие программы на Си, написанные хорошим стилем. Ибо чую я, что костылить ООП в стиле map_get(mymap #m, const char #key, char #value) - хуевый путь.
>>1347507 Основная проблема стандарта не в количестве страниц, а в языке, которым он написан. Вон мы в самом начале треда обсуждали дереференс, и если бы формулировки были четкими и ясными, да еще не размазанными по половине стандарта, а сгруппированными по смыслу, обсуждать было бы нечего.
>>1347542 > как организовать поиск нужной строки по файлу без всякой лишней хуйни и динамической памяти Делаешь на стеке буфер достаточно размера (килобайт, например), читаешь строки по одной с помощью fgets, попутно разбиваешь их на слово и перевод с помощью strtok, strcmp проверяешь совпадения (или используешь какую-нибудь нестандартную _stricmp, чтобы не учитывать регистр).
>>1347588 Совершенно нормальный подход, так все и делают. Разве что я бы для удобства чтения привел в соответствие тип и префикс имени: mymap_get(mymap ptr map, ...).
>>1347598 > с использованием WinAPI, и являющиеся редактором конфигов Винда кэширует полупрожеванные .ini на некоторое время, когда ты делаешь GetPrivateProfileString/Int, поэтому можешь не заморачиваться и читать напрямую, не изобретая никаких внутренних мапов.
>>1347708 scanf() читает из stdin (пользовательский ввод из консоли). sscanf() читает из сишной строки в памяти. Можешь считать, что scanf() - это что-то подобное fgets(buffer, ..., stdin), после которого идет sscanf(buffer, format, ...) хотя на самом деле оно не так реализовано.
Объясните мне, почему в 2019 году не убивают сразу за консольные приложения под Windows, все эти printf и scanf. Я понимаю линукс, там консоль юникодная, но под виндой, писать под этот артефакт DOS и не сдохнуть от позора, как так можно жить вообще?
>>1347839 Да, ведь как охуенно натягивать сову на глобус юниксвей на винду, попутно обсирая оконные приложения в системе которая называется "Окна", и при этом думать что ты не дебил.
>>1339788 (OP) есть какие то книги или примеры по функциональному программированию, как правильно писать функции как струтурировать и тд или это все с опытом приходит ?
>>1347838 > линукс, там консоль юникодная В винде тоже юникодная, в том смысле, что ты можешь выводить и UTF-16, и UTF-8, и все будет норм, только отобразится не все. Да и зачем тебе эмодзи и хангыль в консоли?
>>1348082 Сам так сперва ставил unsign, где типо положено; но стали возникать возникать трудноуловимые проблемы с приведением типов при арифметических операциях, теперь везде стараюсь ставить просто int.
Пишу glsl шейдер, хочу провести препроцессинг, но gcc, что только расширения .c переваривает, можно как-то свой .vert сунуть? ..Такие флаги: gcc -E -C -P PRE.c -o RESULT.c .
>>1348192 >>1348251 Ну я хотел поизящнее. Уже нашёл "-<" gcc -E -C -P -< shad/test.vert -o shad/test.vert_, препроцессинг есть , но только когда делаю #include он не влезает, почему-то файл остаётся того же размера, наверное должен быть флаг для разрешения переразмеривания. Вообще как прочитал это UB кормить gcc не .c файлы, но glsl похож синтаксисом так, что.. надо ещё поковыряться.
>>1348257 >Вообще как прочитал это UB кормить gcc не .c файлы, но glsl похож синтаксисом так, что.. надо ещё поковыряться. Поищи тогда в тулзах от производителя видюхи. В glsl должен быть свой препроцессор же.
>>1347726 >Делаешь на стеке буфер достаточно размера (килобайт, например), читаешь строки по одной с помощью fgets, попутно разбиваешь их на слово и перевод с помощью strtok, strcmp проверяешь совпадения (или используешь какую-нибудь нестандартную _stricmp, чтобы не учитывать регистр). Создал 2 массива строк через *, в цикле(пока не конец файла начал считывать строки через gets, сразу же делил через strtok_s, на всякий случай выводил в консоль 2 массива строк, все хорошо выводилось, но с поиском не получилось, потому что в следующем цикле введенная мной строка и эти массивы через strcmp не сравнивались. Теперь такой вопрос, как все строки в этих массивах сохранить, чтобы использовать их для сравнения в следующем цикле с введенной мной строкой?
>>1348360 Так как тогда блять делать нормальную кросплатформенную залупу для консоли? У меня уже агрессия какая-то, я не думал, что на винде все так злобно с этим.
>>1348082 > Стоит ли везде юзать unsigned int unsigned int не стоит, из-за него компилятору на 64-битной системе придется генерировать лишние 1-2 инструкции (но если собирать с -frapv, то и для int тоже!). А вот size_t использовать можно и нужно, если итерируешься по индексам.
>>1348360 > Смена локали ВНЕЗАПНО может сломать всякие atof Внезапно локаль - это не только и не столько про кодировки, а как раз про всякие десятичные точки. Меняй не LC_ALL, а только LC_CTYPE.
> Так как тогда блять делать нормальную кросплатформенную залупу для консоли? Не бывает кроссплатформенных программ сложнее хелловорлда. Страдай и портируй.
>>1348433 Попробуй вдуматься в то, что ты делаешь.не работает, потому что и не должно, попробуй осмыслить, что происходит, когда ты передаешь в свою функцию адреса переменных
>>1348424 >А вот size_t использовать можно и нужно, если итерируешься по индексам. То есть for (size_t i = 0; i < size; i++) ... И чем этот сайз отличается от unsigned int?
>>1348424 >Не бывает кроссплатформенных программ сложнее хелловорлда А у меня программа уровня хелловорлда. Она берет текстовый файл и с указанной частотой выводит слова в середине консоли (чтобы быстро читать). И даже на такой нупской задаче сосу с кроссплатформой.
>>1348468 > И чем этот сайз отличается от unsigned int? На 64-битных машинах unsigned int 32-битный, unsigned long как получится (привет, Microsoft), а size_t везде 64-битный. Если компилятор положит 32-битное значение в 64-битный регистр, ему нужно заботиться об арифметике с переполнением, а вот положить 64-битный size_t в 64-битный регистр можно без дополнительных сложностей. К тому же, size_t - это хорошая подсказка читающему, что речь идет о размере объекта или индексе.
>>1348472 > Но жавабляди... if (osName.startsWith("windows 9"))
>>1348481 Так не получится. У тебя каждый следующий fgets затирает массив c новой строкой, а по-отдельности ты сохраняешь только указатели внутрь этого массива. Я тебе предлагал не совсем такой вариант. Я предлагал вводить искомую строку до чтения файла, потом читать построчно и сравнивать, храня в памяти только текущую строку, а не весь файл. Вот как-то так: https://ideone.com/MsdkUO
Но если ты очень хочешь читать файл в память, и тебя устраивает захардкоженное максимальное количество строк, то просто сделай двумерный массив со строками: char c[20][200]; // 20 строк максимум, по 200 символов каждая. и читай не в c, а в c[i], ну и strtok тоже делай для c[i]. Алсо, чтобы заработало, надо убирать \n в концах строк, их fgets оставляет.
>>1348676 1 КБ. Чтобы упростить вычесления, можешь задефайнить 1кб размер и прибавлять один для конца строки, если много чарстрингов то читать их так будет намного удобнее
>>1348939 Что именно тебе непонятно? От тебя требуется написать программу, которая на вход получает текст с переносами и прочими вещами, но выводит на экран символы перевода строки видимыми. Простая софтина. Можешь несколькими путями сделать. Я б через регэкспы сделал.
>>1348942 Я понял. "tab" и "\t" — два разных термина. Просто не самым понятным языком написано.
Буду писать на ифах, потому что в книге, по сути, ничего больше не представляли. Решил оставить все предыдущие знания всех предыдущих языков программирования и изучить Си с нуля.
>>1348951 > Просто не самым понятным языком написано.
Это английский.
> Буду писать на ифах, потому что в книге, по сути, ничего больше не представляли.
Ни в чём себе не отказывай. В книге скорее всего и подразумевается данным примером на практике проверить как ты усвоил материал. Если окромя ифов и циклов ничего не было, значит задачу совершенно точно можно решить уже пройденным матералом.
> Решил оставить все предыдущие знания всех предыдущих языков программирования и изучить Си с нуля.
Если раньше говнокодил на скриптовых языках, то правильное решение, но ломка будет страшная.
>>1348955 Если с 3-го раза не понял, стоило бы отложить чтение на пару часов доя прогулки на свежем воздухе. И, да, пожалуйста.
Как решить? И где можно онлайн записывать код? Хочу попробовать свои силы. int N; scanf("%d", &N); x +=2; for (int i = 0; i <= N; i++){ printf("%d", i x); x = x + i N; } printf("%d", x);
Как программист на Си я специально посетил сей тред, чтобы недвусмысленно и решительно высказать своё "фи" так называемому компилятору ШЛАНГ. Надеюсь это говно никогда не взлетит и все так и будут сидеть на GCC и VC.
>>1348964 Адрес указывает на байт. В памяти хранятся байты, других ячеек не бывает. Если тип указателя больше чем байт меньше не бывает, то указывает на начало - первый байт.
Затем, что мне нужно много числовых последовательностей, но нахуй не нужно плодить в каждой строчке новые имена для них. Видишь на пикче всего одна переменная n для всего.
>>1349263 >Ты же в курсе, что Алё, кто знает про указатели, тому не нужны картинки. Такие картинки предназначены тем кто не понимает, чтобы они посмотрели и поняли. Но тут мы видим, что картинка - говно нарисованное жопоруким дебилом. В результате не помогает понять, а только еще больше путает.
>указатель это отдельная переменная ссылающаяся на другую переменную Неправильно. Указатель ссылается на память, какую угодно, а вовсе не на переменные.
>>1349477 ну, он же циклически печатает -5,-3,-1 изначальный -1 будет каждую итерацию инкрементироваться, а изначальный 4 будет каждую итерацию декрементироваться. Доходят до {1,2} и после этой итерации условие перестаёт выполняться.
Я опять с тупыми вопросами. Только начал изучать С, а мне сразу структуры пихают. Пиздец. Седьмая строка - typedef struct rect_tag rect_t; Тридцать четвертая строка - rect_t intersection(rect_t r1, rect_t r2) {
Что за тайпдеф стракт? Почему рект_т нужен? Короче, я только новичок в программирование, а курс сразу кидает на амбразуры. Нахуй так жить.
>>1349691 >typedef struct rect_tag rect_t; сам нубас, но чутка понимаю структуры и кажется, что это какая-то мусорная строка. Зачем вообще объявлять структуру rect_tag, а потом тут же её переопределять как rect_t. Или так типо не нужно будет к её полям каждый раз прописывать доступ?
>>1349277 У тебя во время присвоения значения произойдёт ошибка мисматч. Ты с типами данных разберись, у тебя каша в голове какая-то. Либо ты жирная зелень что скорее всего так и есть
>>1349748 Если ты просто обьявишь структуру то тебе потом везде прийдеться писать struct rect_t, а с тем дерьмом можно писать просто rect_t. Почитай что такое typedef или просто игнорируй (пока) ту хуйню. Это чисто для удобства сделано, чтобы код почище был.
>>1349756 Но для задачи по поиску пересечение двух прямоугольников это может быть удобно. Собственно моя задача об этом и была. А что почитать? Не могу найти инфу доступную.
>>1349219 >>1349221 В C99 и выше можно так: int ∗n = (int []){1, 2, 3}; Но у тебя там кресты, а в стандартных крестах этого нет, но возможно, что твой компилятор это поддерживает в качестве нестандартного расширения.
>>1350006 >>1350121 >[BCC32 Error] : E2188 Expression syntax Понятно, спасибо. Напердолил через строки, хотя лишние нули в конце раздражают, да и сам пердолинг тоже. Чем эти петухи занимаются в своих комитетах, наверное шлюхами и коксом, что не могут в байтоёбском языке сделать определение байтов.
>>1350208 Объясни, кто тебе мешает сделать static const uint8_t data1[] = { ... }; Литералы, которые тебе предложили, практически ничем от этого не отличаются. Это ведь протокол какой-то, неужели сложно имена переменным придумать? Ну или если компилятор умеет в __COUNTER__, можно обернуть в макрос и генерировать серийные номера.
>>1349175 > Как программист на Си я специально посетил сей тред, чтобы недвусмысленно и решительно высказать своё "фи" так называемому компилятору ШЛАНГ. Надеюсь это говно никогда не взлетит и все так и будут сидеть на GCC и VC.
С разморозкой. Вынуждены вас огорчить, за время вашего криосна это поделие с байткодом таки хайпануло по-крупному и уже вот овер 5 лет как стало кококорпоративным стандартом в кресто-няшно-мейнстриме, а мелкомягкие таки сдались и поддержку оного шланга у себя в студии запилили.
Один только линус пока держится и еще пара красноглазых.
>>1347588 > Реквестирую небольшие программы на Си, написанные хорошим стилем. Ибо чую я, что костылить ООП в стиле map_get(mymap #m, const char #key, char #value) - хуевый путь.
>>1348424 чел откуда ты столько знаешь, опыт или книги есть спецальные просто вот про unsigned int удивило , ты просто в компиляторе разбираешься круто или где то инфу взял ?
>>1350078 Какой же у тебя лютый говнокод, просто пиздец. Взять хотя бы циклы, это же потенциальная база для выполнения операции переполнения буфера.
Если ты заранее знаешь размер массива, то на какой хуй ты не указываешь его длинну? Если ты знаешь длинну массива, то на какой хуй ты её вычисляешь в цикле? Идиота ты кусок ебаный. Делай цикл с отчётом от последнего элемента в массиве, это заодно примитивная оптимизация, которая требует меньше машинных операций и защита от переполнения массива.
Блядь, животное ты ебанутое и ты ещё будешь давать советы нубам не читать чужой код? Ох ты и чепуха ебаная. Твоё место в ЖЭКе на получение униформы и метлы. Ебать, что за дегроды растут.
>>1350096 Анон, не слушай ты эту хуету >>1350078 ебаную, он поц пиздючный, решил тут повыёбываться.
>>1350552 > Какой же у тебя лютый говнокод, просто пиздец. Взять хотя бы циклы, это же потенциальная база для выполнения операции переполнения буфера. Если он случайно забудет изменить макрос после изменения массива при объявлении — да, если уж используешь макрос для размера будь добр при объявлении массива дать ему этот размер.
> Если ты заранее знаешь размер массива, то на какой хуй ты не указываешь его длинну? Собственно вот.
>Если ты знаешь длинну массива, то на какой хуй ты её вычисляешь в цикле? В каком месте он вычисляет длину в цикле?
>Идиота кусок ебаный. Давай без оскорблений, все когда-то начинали.
>Делай цикл с отчётом от последнего элемента в массиве, это заодно примитивная оптимизация, которая требует меньше машинных операций и защита от переполнения массива. Вот тут объясни что ты имеешь в виду.
> Блядь, животное ты ебанутое и ты ещё будешь давать советы нубам не читать чужой код? Ох ты и чепуха ебаная. Твоё место в ЖЭКе на получение униформы и метлы. Ебать, что за дегроды растут. Опять же, успокойся, пожалуйста.
>>1350575 Во-первых, есть переменная i, которая на каждой итерации цикла прохождении от 0 до конца массива инкриминируется. В этот момент происходят операции вычисления длинны массива циклом, в условии хоть и задан предел, ро цэ переменная, значение которой можно поменять в любой момент и вот в этом проблема безопасности кода.
Во-вторых, обратный цикл от известного максимума до нуля не производит операций по вычислению длинны массива (он тупо уже не вырастет). Соответственно даже изменив на лету макс значение переменной во вреия выполнения не приведёт к чему либо страшному. Дизассемблируй оба цикла, чтобы нагляднее было.
>>1350289 Нет никаких проблем. Просто у сектантов пригорает от лицензии шланга, она для них слишком свободная.
>>1350583 > операции вычисления длинны массива Это ты так сейчас обозвал практически бесплатную инструкцию lea?
> проблема безопасности кода Какие-то фантазии. Если есть баг, позволяющий испортить my_size, то скорее всего, он же позволит испортить и i. Да, на проходе по массиву из конца в начало можно выиграть несколько байт размера кода, заодно проиграв в быстродействии, но вот на безопасность проход в обратном порядке не влияет вообще никак.
Блять смешно читать как вы, дегенераты не могущие посчитать сколько вам байт на введённый хело ворлд выделить на полном серьезе обсуждаете оптимизацию и безопасность кода. Юзаете си как входную точку для вайтивайти — не заебывайтесь по этому поводу, вам надо понять как работает, а не чтобы БЫЛА ВСЕ ПО СТАНДАРТУ Ебланы сука ощущение что вы поиграться просто хотите, а не реально чтото понять
>>1350720 Определение площади пересечения прямоугольников? Формализовать задачу. Определить закономерность, алгоритм. Разбить решение на элементарные части. Оптимизировать. И уже потом писать код.
>>1350721 Да ничего плохого в форе нет, просто старые стандарты, ну и поэтому много задач алгоритмических в задачниках задуманы для решения вайлами, попробуй, хороший челлендж
>>1350661 Не смеши. Если размер массива задан, то проход в цикле от последнего элемента до 0 безопасен тем, что динамически ты уже не поменяешь размер массива. Попробуй добавить элемент в массив во время выполнения цикла.
«Если есть баг» — не заданный размер массива и есть баг. В него динамически можно добавлять элементы.
В быстродействии обратный цикл выигрывает — это пускай маленькая, но оптимизация. И он таки быстрее, чем цикл с перебором элементов, который ты выше представил.
>>1350723 Если мне нужен счётчик и я знаю сколько раз провернется алгоритм, я всегда беру фор. Вайл только для неопределенного количества итераций и без счетчика. Можно вайлом сделать то же что и фор, но зачем? Это ведь усложняет код.
>>1350770 У меня за плечами МФТИ прикладной математики, щенок ты самообразованный. Раз папа сказал тебе пошёл нахуй, значит ты встаёшь и идёшь нахуй. Залупа ты мелкобуквенная.
>>1339788 (OP) Аноны, подскажите. Надо сделать тест на 80-100 вопросов, в каждом вопросе только 2 ответа "да" или нет". Потом сравнивать набранные баллы. Например, если по по одной шкале(для определенной шкалы, существуют определенные вопросы, например, 2, 5, 19, 44, хотя все вопросы в тесте идут по порядку, т.е. 1, 2, 3, 4, 5...100.) 10-15 баллов - это средний показатель, то что ниже - низкий показатель, соответственно выше - высокий. В итоге, прошедшему тест на экран выводятся его результаты. В гугле почитал, то что вопросы нужно грузить из файла, но в каком, собственно, виде это делать?
>>1350876 В строчке первым пусть идут номер вопроса, потом баллы за да и нет, а потом сам вопрос. В консоли или куда там пусть выводятся вопросы по порядку, а как вводить ответ уже сам решай.
>>1350903 Если хочешь с другими вариантами ответа, то тут можно поставить число после порядкового номера которое будет указывать на количество вариантов ответа, а в последующих строках, собственно, сами варианты с весом ответа. Например 1,3,Ты пидор? 5,Да 0,Нет 5,Немношк
>>1350761 > Попробуй добавить элемент в массив во время выполнения цикла Попробуй делить на ноль в цикле. Попробуй по нулевому указателю писать. Если ты захочешь сделать глупость - тебе никто не запретит.
> В быстродействии обратный цикл выигрывает Хуево дружит с кэшами и еще более хуево векторизуется.
Рейт. Считает площадь пересечения двух прямоугольников. Если пересечения нет, то площадь ноль. https://pastebin.com/vwdDTVCK Алгоритм придумал за минут 10-20, всего ушло 2 часа
Пожалуйста, пользуйтесь https://ideone.com/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №36: https://arhivach.ng/thread/407257/
- №37: https://arhivach.ng/thread/414099/
- №38: https://arhivach.ng/thread/419611/