Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.Что читать:- Классика от Отцов: http://www.cypress.com/file/56651/download- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html- ООП, например: http://www.cs.rit.edu/%7Eats/books/ooc.pdf- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт) не драфт ищем на торрентах- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)- man/Dash/zealdocsЧем конпелировать:- Очевидный GCC.- clang: оче годно, батя рекомендует.- Intel C++ Compiler: оптимизации, тысячи их.- Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.- TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.Что еще почитать: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Прошлые треды:- https://arhivach.org/thread/106153/- https://arhivach.org/thread/131949/- https://arhivach.org/thread/140570/- https://arhivach.org/thread/153698/- https://arhivach.org/thread/155908/- https://arhivach.org/thread/173837/- https://arhivach.org/thread/180461/- https://arhivach.org/thread/182958/- https://arhivach.org/thread/188294/- https://arhivach.org/thread/193780/- https://arhivach.org/thread/198868/- https://arhivach.org/thread/206632/- https://arhivach.org/thread/211714/- https://arhivach.org/thread/217128/- https://arhivach.org/thread/223224/- https://arhivach.org/thread/235327/- https://arhivach.org/thread/237852/Шапка: http://piratepad.net/bJ1SdmkZyu
Линупсовые гайдлайны - говно или заебись?
>>935768Заебись
Почему в шапке больше нет пикрила? Годнота же, актуальная до сих пор.
>>935781Потому что была, но тогда тред превращался в обсуждение ассемблеров.
>>935786При чем тут ассемблеры? Там этой темы не так много относительно общей темы и примеров именно на Си.
>>935790Hacking it's more about Ruby and python today.
>>935822Посмотреть бы, как атаку переполнения буфера на змее реализуют.Книга все-таки не о крекинге. А о безопасном кодинге на Си. Плюс внятно описаны криптография и сетвой кодинг.
>>935830For machine-specific weaknesses use appropriate tools like C or C++.
Нуб вкатился.ANSI C.Открываю файл 1.txt, чтобы считывать с него по строке. file=fopen("1.txt","r");Также открываю 2.txt для записи: filec=fopen("2.txt", "w");Ранее 1.txt был записан в этой же проге, если что, а потом закрыт.Знаю кол-во строк заранее, пишу в цикле fgets(outstr, 178, file);Размер массива outstr 180 символов, если что.Проверяю некоторое условие (оно внешнее, от содержимого outstr не зависит).Если оно выполняется, то хочу записать outstr в filec:fputs(outstr, filec);И ничего, файл filec пуст всегда. Я в этой программе удачно заполнил 1.txt, но не могу никак заполнить filec, и в консоль ничего вывести не могу, даже если написаь fclose.ЧЯДНТ?
>>935864Но вам проще будет ответить на общие вопросы, наверное. Речь о стандартной библиотеке, ОФК.1. Можно ли одновременно открывать несколько файлов и переносить из одного в другой, сравнивать их и т.п.?2. fgets где оставляет каретку после своей работы? Написано, что она считывает до первого символа след строки.Т.е. три fgets подряд благополучно заполучат три строки? Ничего между ними вписывать не надо?
>>9358691. Можно.2. Каретка - это про печатную машинку или консоль. Позиция в FILE остается там, где закончилось считывание. Считывание заканчивается, когда заканчивается буфер или встретится символ конца строки (в зависимости от того, что случится раньше). Позиция в нижележащем файле ОС может быть где-то дальше из за кэширования прочитанных данных во внутрененм буфере FILE. Три fgets могут прочитать три строки, а могут только одну, если она длиннее буфера.>>935864Выкладывай минимальный собирающийся код.
>>935877#include <stdio.h>#include <time.h>#include <stdlib.h>int main(void){...FILE file, filec;.../ Благополучное заполнение файла 1.txt. Имеем массив str размером strn с числами, где strn - число строк./ fclose(file); int strm=0; char outstr[180]; file=fopen("1.txt","r"); filec=fopen("2.txt", "w"); for (i=0; i<=strn-1; i++) if (str>=strm) strm=str; if (strm==0) return 0; for (i=0; i<=strn-1; i++) { fgets(outstr, 178, file); if (str==strm); fputs(outstr, filec); } return 0;}
>>935884
>>935884Конкретная проблема в точке с запятой тут:> if (str==strm);Но макаба съела звездочки наверняка, поэтому там могут быть и еще какие то проблемы.
>>935893Убрал, ничего не изменилось.
>>935896Да, с двоеточием я обосрался. А ты уверен, что у тебя цикл работает, и строчка читается? Что ты не вышел по return чуть раньше? Если в gdb не умеешь пока, воткни printf, да побольше.
>>935902> у тебя цикл работаетДа какой же я тупой!У меня strs занулилась в вышецикле. Ну грёбаный писец...Заработало, спасибо, анон.
>>935903strn* Фикс
философский вопрос: если искать в массиве данные, какое лучше использовать для функции имя "search" или "find"? склоняюсь к первому варианту
>>936066Find. Что функция возвращает-то?
>>936100Если найдено то структуру, если нет, то null.
>>935715 (OP)>оптимизации, тысячи их.Включая такие оптимизации, как обрезание производительносит на процессорах AMD.
>>936124Лол, ты из /hw/ сюда закатился?Каким образом?
>>935830>Посмотреть бы, как атаку переполнения буфера на змее реализуют.Атаку row hammering сбацали на ЖС.
>>936126Я сюда не из /hw/, я сюда из-за моих попыток написать что-то на Qt.В конце марта амд выкатывает процессоры вдвое дешевле интеловских при той же производительности и при меньшем энергопотреблении, вылезайте из танка.
>>936126То есть, не марта, а февраля. Уже доступны для предзаказа.
>>936130NDA до 28-го.Нет смысла предзаказа
>>936131NDA-то NDA, но результаты бенчей уже в сети, и фотка охуевающих оверклокеров тоже есть.Предзаказ - это я о том, что вот оно, уже почти свершилось, и игнорировать это не надо.
>>936139>NDAпоясни за сабж, как они дали интелу пасасать?
>>936139Я бы не советовал бы верить этим тестам.Ещё чуть-чуть, и станет видна настоящая картина
>>936129>В конце марта амд выкатывает процессоры вдвое дешевле интеловских при той же производительности и при меньшем энергопотребленииКроме геймеров, кому на это должно быть не похуй?
>>936142как боженька пизданулмимо армвкатывальщик
>>936144Давно вкатываешься? Подо что пишешь? Цели?
>>936145Хочу USB свисток на Кортексе за 5 баксов для портирования лисапеда на ядре L4
>>936150з.ы. ну или Plan9 завести
>>936140>поясни за сабж, как они дали интелу пасасать? Скоро узнаем: >>936141Если верить тестам и конференциям, они наконец-то дотянули однопоточную производительность. Перестали функциональные блоки урезать - Гипертрединг у них скелится лучше, чем у интела (тоже не факт, только циферки), и такого фейла, как у бульдозера (который даже в пределах физических ядер не скейлился даже близко к пропорциональности, пока обновы планировщиков не вышли, и при этом кушал больше, чем Интел с тем же числом ядер), быть тем более не может. И это при примерно вдвое меньших ценах.С моей диванной точки зрения видится то, что Интел сам себе дал пососать: могли бы продавать процессоры по сильно меньшим ценам и задавить x86-подразделение АМД напрочь, вместо этого выставили такие цены, что АМД сможет нагнуть их по всем практическим характеристикам и ещё и заработать на этом.Можешь почитать Анандтек:http://www.anandtech.com/show/10578/amd-zen-microarchitecture-dual-schedulers-micro-op-cache-memory-hierarchy-revealedhttp://www.anandtech.com/show/10585/unpacking-amds-zen-benchmark-is-zen-actually-2-faster-than-broadwellhttp://www.anandtech.com/show/10591/amd-zen-microarchiture-part-2-extracting-instructionlevel-parallelism>>936142Например, конпеляющим программистам.Интел постоянно пихали АМД палки в колёса своими финансовыми выворотами (можно вспомнить премию за неиспользовани АМД и бенчмарки времен Netburst), из-за них производительность дороже, чем могла бы быть в условиях честной борьбы. Когда ты будешь собирать новый ПК, ты сможешь взять себе процессор с вдвое большим числом ядер примерно по той же цене. Это может быть интересно очень многим - хотя бы тем, кто сейчас может позволить себе только двухъядерник, и при этом хочет плавную работу нескольких программ.С другой стороны, с моей точки зрения проблема современных ПЭВМ не в вычислительной мощности, но это уже другая история.
>>936154> проблема современных ПЭВМ не в вычислительной мощности, но это уже другая история.Го в /b/, там создашь и раскроешь эту тему
>>936170... в результате чего я выясню, что то, что нужно мне, никому из /b/ не нужно.
>>936177Так чего же ты хочешь? Развитие устройств ввода/вывода?
>>936154так хули, копитолизды не заинтересованны в улучшении продукта, их цель - агрессивная реклама. АМД малацы, Интел должен был cдохнуть еще на i286 параше
>>936178Я хочу-полностью опенсорсный софт в рамках одной машины,-никакого preemptive-пердолинга хотя бы на всех ядрах, кроме главного-математически-строгие стандарты обмена без ошибок и и без всякого legacy (форматы любых данных, протоколы и т.д.) с референсным универсальным кодом, чтобы один раз и надолго,-математически строгую оптимизацию компиляции без багов и распараллеливание кода (основанные на математической модели процессора),-максимально простое и прозрачное сохранение состояния всех программ в хранилище (HDD или ещё куда),-неимпераитвный язык, структура которого будет учитывать устройство современной вычислиловки и набор типичных методик работы с устройствами,-ГУЙ с развитой самодокументацией (любой достаточно сложный ГУЙ требует прочтения мануала, нужно всю справку встроить в ГУЙ), -IDE с развитой самодокументацией (конверсия между различными представлениями программы, предпросмотр дерева разбора, встроенный стандарт языка, средства автоматического доказательства)-средства языка и компилятора для обнаружения ошибок вычислений без ECC и полного дубляжа вычислений, с помощью частичного дубляжа, дешёвых проверок, хранения хэшей- изоляция костылей для поддержки разных форматовЕсли у меня всё это или большая часть этого получится, я захочу написать стек софта под несколько конкретных профессий/занятий: дизайнер, маркшейдер, доярка, студент, инженер, таксист, статист и так далее, потому что без софта ни одно благое дело, которое не тащит за собой обратную совместимость, не взлетит.Ввиду того, что никто за меня это делать не собирается, прямо сейчас я пишу то, что могу писать (на плюсах), набираюсь знаний и не живу мечтами, ведь я даже программистом не работаю.И ещё хочу 1:1 монитор, потому что даже 16:10 задолбало. Как ни странно, джве модели есть.
>>936182А почему АМД не копитолизды?
>>936200АМД тоже капиталисты, просто сейчас волею судьбы они догоняющие, и им приходится компенсировать отставание не маркетингом, а идеологией. >>936200 шутит, наверное, впрочем.П.С. Рекламу "Атлон инсайд" помнишь? Вот и я не помню.
>>936196>неимпераитвный язык>ГУЙПоделил на ноль. Окошки с кнопочками императивны, хоть ты упрограммируйся вконец.
>>936363>Окошки с кнопочками императивны, хоть ты упрограммируйся вконец. Зависит от того, как это оформить. Если ввести новые концепции в язык, то можно даже Аллаха неимперативным сделать.Что потом компилятор будет делать с этими конструкциями - разворачивать их в императивщину (процессоры императивные же) или нет - не важно.Остальное ОК?
>>936402> Зависит от того, как это оформить.Хоть ты усрись, нельзя. Интерфейс априори императивен, со своими новыми концепциями можешь в /mg/ уебывать, там тебя встретят как своего.
>>936403>императивенэто как? где вы бля таких словей набираетесь?
>>935715 (OP)Пытаюсь в эту вашу СИ, и вот проблема.Написал стронгли по учебнику код, который должен сравнивать введенные строки, потом печатать самую длинную, затем её же наоборот. Так вот, в любой ситуации печатается 661304 после вывода максимальной строки, переделанный в обраточку массив идет уже без чисел. Что это?
>>936517Надо в шапку походу уже добавить правило, что если кто-то хочет помощи по коду, пусть выкладывают минимально компилируемый код на какой-нибудь пастебин. А то почти каждый долбоёб либо сразу в тело поста копирует код, где макаба съедает все звёздочки, либо выкладывет СКРИНШОТ С ТЕКСТОМ. Первое я ещё могу понять, но второе... Блядь, ну нахуй вы это делаете.
>>936523http://pastebin.com/usgLjiF0
>>936517> %3dПолучил кусочек стэка принтфа.
>>936531sooqa, забыл почистить, спасибо. Мог бы и сам догадаться
>>936447Тi знаеш єто настолко древнея копiпаста што кажетьса што тогда энторнетов, не было:http://rsdn.org/forum/decl/794170?tree=tree
Вот затайпдефил я тип. А как его потом оттайпдефить? Не нужен мне больше он.
>>936739А зачем? Экономить память в компиляторе - это какое-то непередаваемое извращение. Нет, оттайпдефать нельзя. Что единожды затайпдефано, останется тайпдефнутым до конца текущего модуля.
>>936741А перетайпдефить? У меня не экономия а немного другая ситуация. Нужно для заголовков функций затайпдефить один тип, в тупую на void, а потом поменять void на нормальную структуру.
>>936745> А перетайпдефить?Нет, нельзя, вообще никак. Можешь препроцессором нужный вариант выбирать разве что.А вообще, расскажи, что сделать хочешь? Если ты хочешь скрыть детали реализации, делай в хедере:typedef struct SomeType SomeType;а уже в .c-файле, который со структурой работает (или в приватном хедере, если .c-файлов несколько):struct SomeType { ...};
>>936748У меня есть файл main.c, там хедеры функций, которые принимают структуру type.Также у меня есть файл func.h, в котором функции и эта самая структура.Делаю:#include "func.h" // файл со структурой type и функцией "func"typedef type low_type;void func(low_type type); // хедер функции funcИ получаю хуй, так как сначала инклюжу файл с функциями, а потом какого-то хуя идут хедеры функций. Так нельзя.Делаю:void func(low_type type);#include "func.h"typedef type low_type;и функция принимает в себя несуществующий тип low_type;Хотел сделать перед функциями "typedef void low_type", а потом, заинклюдив func.h, "typedef type low_type", но так нельзя.Единственное до чего додумался, так это просто вынести структуру в отдельный файлик func_struct.h и инклюдить его перед функциями, но это не красиво.
>>936756> main.c, там хедеры функций> у меня есть файл func.h, в котором функцииТы все перепутал. В .h кладут хедеры, а в .c реализацию.func.h:#pragma oncetypedef type low_type;void func(low_type);func.c:реализация funcmain.c:#include "func.h"компиляция:cc main.c func.c
>>936771> Ты все перепуталНет. В основной программе main.c это тоже .h файл. Я пишу библиотеку.Конкретно у меня в основном .h файле лежат все хедеры и реализация половины функций из этих хедеров, а в том "func.h" лежит реализация второй половины этих функций и структурка.Можно убрать хедеры функций из func.h в этот самый func.h, но я не хочу. У меня есть одной место, где прекрасно видно все функции и комментарии к ним. Так красиво получилось, незачем портить.
>>936775Я тут мимо походил, но разве в этой вашей няшной не действует правило - у функции моет быть одно определение и сколько угодно объявлений? Тогда я не понимаю зачем этот человек складывает определения в хэдеры, разве что чтобы потом поиметь проблем при их инклуде в два линкуемых объектника
>>936403>Хоть ты усрись, нельзя.Это в твоём мире нельзя, а в моём - можно.>со своими новыми концепциями можешь в /mg/ уебывать, там тебя встретят как своего. Могу съебать, а могу и не съебать. Кстати, ты (?) сам спросил.
>императивенаноны, нахуй вы такие пидерские слова используете?книжн., юр. не допускающий выбора, требующий безусловного подчинения, исполнения комп., прогр. описывающий процесс вычисления в виде последовательности команд, инструкцийвы же не петухатики
>>936363>Окошки с кнопочками императивны, хоть ты упрограммируйся вконец.Поддержу этого анона. Программирование ГУЯ - линейные вычислительные процессы, обрабатывающие изменяемые данные. Никакой функциональностью здесь не пахнет.>>936402>Зависит от того, как это оформить. Если ввести новые концепции в язык, то можно даже Аллаха неимперативным сделать.Любимая задача борщехлеба - на ровном месте создавать себе трудности, чтобы их героически преодолевать. Вместо того, чтобы комбинировать функциональный и императивный код, используя тот и другой там, где они нужны (как принято в Лиспе, Скале и других нормальных языках) - они выдумывают глупые концепции вроде монад и зависимых типов, удаляя гланды через задний проход.При этом полноценный фреймворк НА СТРЕЛКАХ написать им так и не удалось.
>>936127> >Посмотреть бы, как атаку переполнения буфера на змее реализуют.> Атаку row hammering сбацали на ЖС.> Эксплойт успешно сработал на на данных системах в браузере Firefox версии 39. Эксплотируется сама уязвимость в DRAM. Эксплойт, не позволяет получить права администратора в системе .Ну и нахуй оно нужно?
>>936775>Конкретно у меня в основном .h файле лежат все хедеры и реализация половины функций из этих хедеровНа кой ляд?>Можно убрать хедеры функций из func.h в этот самый func.h, но я не хочу. У меня есть одной место, где прекрасно видно все функции и комментарии к ним. Так красиво получилось, незачем портить. Съеби.
>>936889>борщехлеба Незнакомый мемес.Кто такие "они" и как "они" должны интересовать меня?
>>936934> На кой ляд?А как иначе? Я бы вообще всё положил в этот основной .h файл, и был бы у меня проект из одного файла, но реализаций func.h может быть много. Каждая для своей платформы, например. В итоге, чтобы собрать мою либу под сперму, нужно просто заинклюдить "func_win.h". Охуенно же.> Съеби. Ну ти чего.Алсо, я тут кое что вспомнил и могу оправдать эти действия: Функция func используется в основном .h файле, описывается в другом, func.h файле, но при этом должна быть static. Если шапка будет где-то в другом месте, то основной .h файл не сможет её использовать.
>>936889> 2017> при нажатии кнопки гуй зависает пока производит вычисления> если начать две кнопки одновременно, программа крашитсяДавно во всех учебниках гуй представлен конечным автоматом, для представления которых ничего лучше фп не придумали, одни императивные мудаки лепят самописные очереди событий для самописного межтредового взаимоднйствия
>>936756В инклуде у тебя уже заинклудятся и тип и функция, зачем ты их опять описываешь?
>>936974>А как иначе?Функции - в .c, объявы - в .h
>>936913> Ну и нахуй оно нужно? Реализация эксплоита не позволяет получить права. А сама уязвимость потенциально позволяет ебать компьютер как угодно.
>>936154>конпеляющим программистамЛол, у меня firefox на i5 собирается минут за 5. Максимум это в геймдеве востребована хуита будет.
typedef struct {int i;int j;} num_struct;num _struct num;Как мне эту структурку в одну строку заполнить? Что-то вроде num = {5, 10}; есть в сишке?
>>937224А ты попробовать сам не мог? Есть, именно так и заполняется. Если ты хочешь заполнить НЕ при инициализации, и тебе жизненно необходимо сделать это одной строкой, тогда num = (num_struct) { ... }; Алсо, при инициализации можно указывать конкретно, что куда присваивать: { .i = 10, .j = 20 };
>>937225> А ты попробовать сам не мог?Почему? Я попробовал.Спасибо.
>>937236чукча не читатель, чукча писатель
>>937224Ещё один вопрос на эту тему: Нет ничего плохого в забивании структуры нулями memset'ом? Т.е. "memset(num, 0, sizeof(num_struct));".
>>937270Нет ничего плохого. Но ты можешь сделать num = { 0 }, и компилятор сам решит, что выгодней: сделать несколько mov для маленьких структур, или заинлайнить/вызвать memset для больших.
>>937224@structclass Petuh(val s1: CString, val s2: CString, val s3: CString)val petuh = stackalloc[Petuh]!petuh = new Petuh(c"Kudah", c"Pokpok", c"Kukarek")
Дорогие си-погромисты. Обращаюсь к вам, первокурсник-тугодум. Задали прогу сделать, которая кодировку в тексте исправляет. С UTF этих ваших, да ASCII в windows-1251. Из аски в вин я более-менее смог наклепать, но из 2хбитового ютф ну никак не шарю... Направьте в нужном русле, пожалуйста!
>>937698Возможно, тебе стоит взять какой-нибудь iconv и не ебаться вручную (если задание позволяет). Что касается UTF-8, там в старших битах первого байта кодируется количество байтов в последовательности:(b & 0x80) == 0x00: 0xxxxxxx: 7 бит текущего байта(b & 0xe0) == 0xc0: 110xxxxx: 5 бит текущего байта и 6 бит следующего(b & 0xf0) == 0xe0: 1110xxxx: 4 бита текущего байта и по 6 бит из двух следующих(b & 0xf8) == 0xf0: 11110xxx: 3 бита текущего байта и по 6 бит из трех следующихДополнительные байты (если первый байт их требует), выглядят как 10xxxxxx, в старших битах всегда 10, чтобы можно было узнать, что это не старт очередного символа, а середина, а младшие 6 битов используются для сборки codepoint. Можешь упростить себе жизнь, выкинув последние две проверки. В однобайтовом варианте у тебя по определению будет ASCII, а в двухбайтовом, возможно, кириллица. Добавишь пару проверок диапазонов, lookup-табличку сделаешь, и будет норм.
>>937712Спасибо огромное! Я уже отчаялся. Мне говорили, что старшие биты нужно с 10 начинать, но я чет не понимал, зачем мне это. Теперь же все ясно и по полочкам.
>>937717Cаси спасиба.
>>937698>>937712На кой ляд ему биты вертеть? Пусть возьмёт самую стандартную либу с кодировками и сделает, внутренности UTF8 изучать не нужно.
Аноны, не знаю как правильно поискать стиль переноса параметров функции на новую строку.Правильно ли так делать или нет?
>>938310оставь первый аргумент на строке функции, а последующие под ним
Начал изучать С, понравилось то что охватывает и системный и прикладной уровень.Сейчас пишу фронтенд для сайта и стили, на сервере всё работает, как сделать, чтобы у клиента запускалось?
>>938330google
>>938310Как называется эта цветовая схема?
>>938389нервныйтик личныйскетчDarktooth for Visual Studio Code
>>938330>прикладной уровень>СНЕ ЛЕЗЬ, БЛЯТЬ, ДИБИЛ СУКА ЕБАНЫЙ - ОНО ТЕБЯ СОЖРЕТ
>>938329IDE не будет выравнивать аргументы под первым аргументов, это неудобно.
>>938330>ас пишу фронтенд для сайта и стили, на сервере всё работает, как сделать, чтобы у клиента запускалось? То ли тонко, то ли толсто.Гугли writing portable code.
>>938439>IDEя без ide пишу
>>938402Спасибо.
>>938456Notepad++ тоже не будет этого делать и другие редакторы тоже.Только не говорм мне, что ты ручками табы и пробелы вставляешь.
>>938488Все редакторы умеют как минимум в "тупые" автоотступы. Один раз сделал отступ - на следующей строчке он будет таким же.
>>938488> ручками табы и пробелы вставляешьзис, всегда отключаю автоиндент - бесит
>>938491Только первый аргумент совсем не всегда будет над другими аргументами.>>938494охуетъ
>>938494Как отключить "автоиндент" в Pelles C?
>>938561А, всё, отключил.
>>938557>охуетъну щито поделать, я любитель vim и geany
Как эту ебалу сократить?if(a > 0x09 && a < 0x10)a = a + 0x06;if(a > 0x19 && a < 0x20)a = a + 0x06;if(a > 0x29 && a < 0x30)a = a + 0x06;if(a > 0x39 && a < 0x40)a = a + 0x06;if(a > 0x49 && a < 0x50)a = a + 0x06;
>>938577никак, и почему ты пидор, не используешь иф елс?
>>938584аааа, сука какое это у нас число больше 9 и меньше 10?
>>938584>>938586Мне просто нужно "перескочить" комбинации A-F.Особенность компилятора - if=elseif.
>>938577Дели на 9 и проверяй остаток
>>938588А, не, хуита какая-то у тебя
иф а >= А и а <= F
Окей, похоже меня не поняли.переменная "а" - тупой счётчик, считает от 00 до FF. Шестнадцатеричная система.Нужно исключить, перескочить все НЕ десятичные комбинации. Убрать 0A,0B,0C,0D..... F9,FA.....FF.Чтобы "а" выражалось исключительно цифрой без букв.Ну хоть подскажите что гуглить мне, уже голову сломал.
>>938598Мы все равно тебя не поняли, но вычисли, сделай табличку и забудь.
>>938598ты наркоман, ну тебя нахуй, условие описал выше
анончик пилит стартап, лол
>>938600Хотя да:while (a < 0x100) { while ((a & 0xf0) >= 0xa0 || (a & 0x0f) >= 0x0a) { a++; } printf("%02x\n", a);a++; }
>>938604жесть
>>938604Спасибо, анон, реально помог.Вот так в итоге вышло: if ((a & 0xF0) >= 0xA0 || (a & 0x0F) >= 0x0A) a = a + 0x06;
>>938612Лол. Если сматчится первое подвыражение (при a = 0xb0, например), то твои цифры пойдут по пизде. Если уж тебе хочется именно скипать до следующего "правильного" числа, то разбей на два if, и при совпадении в старших разрядах скипай 0x60, а не 6.
Как по-человечески обращаться к значению указателя на переменную, по указателю на структуру, в которой она находится?
>>938695Бля, я дебил *(some_struct->some_value)
Есть тут аноны, кто в neovim пишет? У вас автокомплит по stdlib работает через deoplete?
>>938819А, разобрался, для этого еще плагин сверху нужен.
>>938614Спасибо, всё сделал, работает в железе идеально.Алсо как бы вот это ещё уплотнить (пик, макакин спам-лист вставить мешает):
А на русском есть книги?
>>938862Все эти книги настолько старые, что уже давно обзавелись переводом. Качество хз какое.
>>938839пздц.побитовые операции юзай.
>>938577Аналог твоего кода:if (a % 0x10 > 0x09) a += 0x06;Если именно "проскочить" a-f до ближайшего нуля в последнем разряде, т.е. из 0x0b надо сделать 0x10:if (a % 0x10 > 0x09) a = (a / 0x10 + 0x01) * 0x10;
>>935715 (OP)Каким образом в определении типа этой структуры используется тип PLIST_ENTRY до того, как даже определена структура? Как транслятор решает это?http://www.nirsoft.net/kernel_struct/vista/LIST_ENTRY.html
>>939069Це ж дефайн, препроцессор подложит всё что надо.
>>938577оберни это>if(a > 0x09 && a < 0x10)>a = a + 0x06;в функцию/макрос
Делаю упражнения из K&R. В 1.8 ("Write a program to count blanks, tabs, and newlines") наткнулся на какую-то НЕХ.Сам листинг довольно незамысловатый: http://pastebin.com/1vRnQ3m4Запускаю программу, пишу строку (да что угодно), завершаю комбинацией Ctrl+C. Выдаёт что-то типа:"Blanks: 2147344387, tabs: 0, newlines: 2.". То есть, табы и переводы строк правильно считает, а с пробелами выдаёт не то.ЧЯДНТ?
>>939844> long blanks, tabs, newlines = 0L;ты не инициализировал blanks и tabs
>>939847Точно, спасибо. У меня Java головного мозга.
>>939861Что ты несешь, поехавший? В Java так инициализировать нельзя.http://ideone.com/OQUJP6Как и в других языках с C-синтаксисом.
>>939871Да, ето так.
https://bugs.chromium.org/p/project-zero/issues/detail?id=1139https://blog.cloudflare.com/incident-report-on-memory-leak-caused-by-cloudflare-parser-bug/Байтоёбы соснули.
>>939953даже читать лень, гуглопараша не может в разработку по. и да, вебкит на крестах же.
>>940019при чём тут гугл, баг в Ragel со стороны Cloudflare
>>940064В том-то, блять, и дело, что в Ragel багов нет, просто это императивное говно в C транслируется и безопасность у него такая же, как у C.
>>940123ну C никогда не претендовал на статус безопасного языка, какие проблемы
>>940123просто ооп питухи не могут в байтоебство
>>940123> в C транслируется и безопасность у него такая же, как у CТо есть, если бы он транслировался в нативный код процессора, виноват был бы процессор?
бля, поясните нахуй этот Cloudflare нужен? какя то хипстерская поебота
>>940137Почитай статью, там синтаксис такого же уровня, как и в C. Пропустили fhold - получи пизды.>>940159А что, он по-твоему не транслируется в нативный код? Как ты себе это представляешь? Статью прочти, неосилятор.>>940161Он нужен для того, чтобы любой сайт мог защититься от ДДОСа и спама без пердолинга с хостером.
>>940171>чтобы любой сайт мог защититься от ДДОСаясно, эконимия на одминах
>>940171> Как ты себе это представляешь?Как делают нормальные люди - берут llvm и генерят IL, из которого генерится машинный код. Транслировать в си ненужно.> Статью прочти, неосилятор.Я проскроллил, какой-то говноязык, какие-то криворукие студенты.
>>940171> любой сайт мог защититься от ДДОСадвачу он не особо помог
>>936177Нет, ты выяснишь, что ты пидорас-байтоёб и ЭМБЕДЕД НИНУЖОН, СЪЁБЫВАЙ ОТСЮДА И ГОВНО СВОЁ ЗАБЕРИb vyjuj bynthtcyjuj ghj cdjb[ hjlcndtyybrjd^ dxfcnyjcnb ghj vfvfie
>>940192С++ говорят для эмбеддеда не хуже, часто даже лучше, иногда быстрее.
>>940202Ну если с модными JS и Lua сравнивать, то конечно не хуже.
>>940206а че, пездоглазы из самсунга свой днищелесапед джерискрипт и разрабатывают как жс ембедед. движок на си, а сверху жс и все это говно в телевизор, лол.
>>940181Если спам забивает весь твой даунлинк, ты можешь хоть бочку сделать.>>940188>Я проскроллил, какой-то говноязыкТакая же ошибка могла быть в C.>>940190Это ты про то, что двачевский скрытый IP откуда-то взяли, лол. Если одмен профукал IP сайта, это его проблемы.>>940192>Нет, ты выяснишь, что ты пидорас-байтоёбПрочитай следующий мой пост, там о байтах ни слова.
сап, анон. Подскажи вкатывальщику-неосилятору. Если я учу Си и собираюсь по серьёзке упарываться им со всеми вытекающими и прочими ништяками, то стоит ли мне гуммантираю лучше изучать электротехнику, чтобы знать как шить микроконтроллеры и для каких целей их прошивать. И вообще подскажите где вообще Си полезен, кроме таких низкоуровневых вещей. Так и не понял почему он круче ассемблера. Скажи, что почитать, анон, чтобы понять куда можно си впихнуть и куда его можно впихнуть с натяжкой.
>>940392"Язык программирования C" почитать. Он от отцов
> Если я учу Си и собираюсь по серьёзке упарыватьсяТо есть, ты учишь язык, но не знаешь, зачем? Имей в виду, что нормально ты начнешь писать года через три, не меньше.> стоит ли мне гуммантираю лучше изучать электротехникуНет. Даже если пойдешь в эмбеддед, для начала хватит понимания самых базовых вещей, которые можно за вечер прочитать в википедии.> где вообще Си полезенЛибы, сервисы.> почему он круче ассемблераСи соберется на другой архитектуре, если код писал не криворукий мудак, код читабельнее и компактнее, компилятор пишет более быстрый код, чем ты (ты можешь обогнать компилятор на маленьком куске, но ты заебешься качественно оптимизировать весь код).> куда его можно впихнуть с натяжкойПисать для веба неприятно. Писать гуи неудобно по сравнениню с высокоуровневыми языками. В остальных случаях никто не мешает писать на Си.
>>940399Есть же Прата для начинающих
>>940399бладжд там есть квест 1.13 написать гистограмы. Я так и не понял как их делать, но в консольку вывел ">" в горизонтальную гистограмму, а с вертикальной дак вообще охуел там корячиться. Четыре дня думал, так и не понял, как эти ёбанные гистограммы вертикальные запилить, не подлкючая сторонних средств. Но в книге ничего вроде не написано вообще про сферу применения языка. Тупо приходится отовсюду выискивать где и что пишут на сях.
>>940406чаю, адекват.
>>940410> так и не понял, как эти ёбанные гистограммы вертикальные запилитьА в чем проблема? Ты не можешь посчитать на основе простейшей пропорции, стоит ли выводить в консоль заполняющий символ или проблел?
>>940406На GTK написан GIMP. Точно Си тяжко подходит для гуишек? Опыт есть в этом? Я бы попробовал (времени навалом) но если это не имеет смысла, то и знакомиться с GTK не стоит.
>>940415> GIMPЯ даже говорить ничего не буду.
>>940410http://pastebin.com/MPu5mytPТо, не?
>>940412Да, я как-то криворуко это наделал. Вроде консолька что-то выводит, но всегда что-то непонятное вылазит. Типа массив создаётся, где каждый индекс номер слова, а элемент индекса - количество букв для гистограммы. Вроде правильно проинициализировал массив, но количество строк всегда разное и не поддаётся нужной мне логике.http://pastebin.com/v8Zbu0aN
>>940418А чем гимп зашкварен? Норм же, не?
>>940410А сам я сейчас сижу на квесте 1.21.http://pastebin.com/aSz4XXifДолжна делать пикрил.Но делает пикрил2.>>940425Норм
>>940429Взоржал с малалетнего дЭбила, ббгг.
>>940429А, я начинаю понимать по поводу своего 1.21. Предположение такое: каждый раз после нового getchar() место putchar() уходит в начало строки.Или как всё обустроено?Я вообще не могу представить, как C обрабатывает вводимый в консоль текст, как он понимает, когда надо начинать обрабатывать. Т.е. я нажал Enter, это вроде бы \n для C, ноон после Энтер начинает работать и Enter становится как EOF...
>>940439Это почему?
>>940440> каждый раз после нового getchar() место putchar() уходит в начало строкиДа не, бред какой-то
>>940440может шиндосовская кодировка энтера воспринимается как EOF. Я же наоборот не могу найти в Убунте сочетание для EOF ctrl-z работает как стоп-сигнал какой-то >[1]+ Stopped
>>940452Ctrl+D
>>940454игнорит. ctrl+c вырубает выполнение
>>940455>игноритEnter и только потом Ctrl+D
>>940455> игноритВвод по умолчанию line-buffered. Enter тыкай после Ctrl+Z/Ctrl+D.>>940429Таб - это не 8 пробелов. Таб втыкает нужное количество пробелов до следующего табстопа. А табстопы располагаются на каждой 8-ой колонке. Т.е., один символ и таб - 8 знакомест, два символа и таб - тоже 8 знакомест, 8 символов и таб - 16 знакомест. От этого и пляши.
>>940457чаю
>>940459> Таб втыкает нужное количество пробелов до следующего табстопа.никогда не любил из-за этой неопределённости табы, юзаю только пробелы
>>940460канчаю
Хелп, аноны! Ввод строки manager пропускается. Почему?
>>940526неактуально
>>940459А,я понял. Спасибо, я просто не знал, как работает Tab.
>>940415>если это не имеет смысла, то и знакомиться с GTK не стоит. Имеет смысл, если интересно. А так писать на С с gtk гораздо медленнее, чем на том же python или javascript. Тут тебе и хоть какая-то типизация, сегфолты, если не понимаешь как что-то работает и прочие радости.
>>940123>в Ragel багов нетЧет в голос всегда ору, когда пишут что в %youbasoftname% багов нет.
Поясните за рекурсивные структуры вида:typedef struct name {name next;name prev;} name;Как их использовать? Чтобы в next действительно лежал следующий элемент, а в prev предыдущий. Гуглом ненагуглил.
>>940670Указатели сожрала макаба, но думаю все всё поняли.
>>940670>рекурсивные структурыпроигралгугли двунаправленные списки
>>940670>Чтобы в next действительно лежал следующий элемент, а в prev предыдущий.Пока сам не положишь туда указатели на то, что тебе нужно, ничего у тебя там не появится.Если тебя это пугает, используй C++ и его std::list .
>>940762В glib есть реализации нескольких коллекцийhttps://developer.gnome.org/glib/stable/glib-data-types.html
>>940773Без шаблонов это боль: ОП будет кастовать gpointer во время каждого обращения.К тому же, ОП не про двусвязный список спрашивает, а именно о том, как обращаться с этими структурами.
>>941291Я к тому, что не обязательно ++ тащить для коллекций.
>>941293Что значит "тащить"? Оверхед плюсов в простейших задачах околонулевой.
КАКОГО ФИГА?! Я только на пару недель отлучился выучить ассемблер, выучил кое как теперь си кажется бредом шизофреника, но тем не менее я его используюИ теперь мой код не работает. Я не понимаю почему. В области обведённой синем происходит бесконечный цикл. Не понимаю почему. Я проверял через printfы wik и width и у меня через некоторое время wik был больше width. Но цикл продолжал работать как упёртый но глупый рабочий на зло всем.Из-за чего так? Уже 2 часа мучаюсь над этимhttp://pastebin.com/HrreXvdL
>>941448залей файл, на котором тестируешь
>>941448> u64 width;> u64 height;И ведь только в прошлом треде мы говорили о том, почему вредно копировать байтики поверх структур (и переменных). У тебя 64-битная неинициализированная переменная, ты пишешь значение в младшие 32 бита (на little-endian машине), а в старших битах что? - мусор. Если по счастливому совпадению мусора нет в width, значит, виснет во внешнем цикле из-за height. Алсо, нахуя тебе вообще 64-битные размеры изображения?
>>941497но это не объясняет того, откуда берётся бесконечный цикл
>>941512uint64_t n = 0xffffffff00000000ULL;while (n--) { putchar('.');}Докрутится - приходи.
>>941514но строго говоря он не бесконечный
>>941515А я и не говорил про бесконечные циклы.
>>941479этот, только у меня бмп, а он не поддерживается двачем
>>941497Очередной отсос байтослесарей. Всё через жопу.
>>941497очень громкий и высокий крик разочарования но и понимания ААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААЯ всё понял! Почему-то мой мозг принял 64-битные числа за 4-байтные. От жеж дидько, какой я не внимательный иногда. Спасибо, анон.
>>941530да уже не актуально, я просто хотел у себя запустить, было интересно, откуда там мог бесконечный цикл взяться, но походу его там не было изначально
Вот вы тут сидите конпелируете, а вот тут вот:http://www.iso-9899.info/wiki/Books— написано, что 'Learn C The Hard Way' суть негодная книжка и не стоит её на второе место в шапке вывешивать.
>>941559Негодная. Написано же - "для гуманитариев". Для нормальных людей у нас есть проверенные временем альтернативы: K&R и Прата.
Подскажите простой способ рандома поэффективнее, чем нижеследующий.void random(int mr[],int size,int min,int max){ srand(time(NULL)); int r, d; d=max-min; for (r=0;r<=size-1;r++) mr[r]=rand()%d + min;}Данной функции передаётся массив, его размер, максимальное и минимальное значения элементов.Если функцию вызвать три раза массивами разных размеров, но с одинаковыми min и max, то всё будет очень уныло, например, как на пикрил.Что заменить, что добавить?
>>941598double random(void) { return rand() / (double) RAND_MAX; } // 0.0 .. 1.0. И дальше городи эти свои (int) (random() * d) + min. Будет слегка получше.
>>941598Ах да, srand() нужно вызывать один раз в начале программы. time() возвращает время в секундах, и если между вызовами прошло меньше секунды, то получается, что ты инициализируешь генератор одним и тем же значением, и, конечно же, получаешь одни и те же данные.
>>941595А что-нибудь годное для гуманитариев у вас есть?
>>941605> double random(void) { return rand() / (double) RAND_MAX; } Это что? Функция? Её перед моей random вызывать? Т.е. ей название другое дать, да?
>>941618K&R вполне подходит. Если сложно, предварительно можно Петцольда "Тайный язык информатики" навернуть.
>>941620Разобрался.Но странно, что я ни разу её не вызываю, а она как-то работает
>>941625Лол. Нет, твоя основная проблема была >>941613 в этом. А использование RAND_MAX просто дает последовательности с менее заметными корреляциями, по сравнению с использованием остатка от деления.
>>941636Лол, я оставил srand на месте, но только теперь srand(time(NULL)_rand());Всё теперь стало довольно рандомным
>>941638> srand(time(NULL)+rand())Fix*
>>941622>K&R вполне подходит.Сдаётся мне, что у тебя слишком хорошее мнение о гуманитариях. Энивей, спасибо, попробую.
>>941598Я знаю лишь как на ассемблере такое сделать. Надеюсь там можно вставлять асм код.rdtsc ;ложит в edx:eax количество тактов, которое прошло после последнего сброса процессораmov peremennaya,eax ;в переменную с названием peremennaya ложит значение eax, которое меняется каждый тактПравда я могу где то ошибаться, может надо [peremennaya] написать или что-то такое.
>>941688>знаю лишь как на ассемблере такое сделать>Правда я могу где то ошибаться, может надо [peremennaya] написать или что-то такое. >или что-то такое. > что-то такое.
>>942084Да чего ты к нему придираешься? Необходимость писать квадратные скобки зависит от конкретного ассемблера или от чего-то такого
>>942089>Да чего ты к нему придираешься?Я просто гуманитарий-ниасилятор, который тремя постами выше от K&R охуел. Ты не представляешь, насколько таким как мы бывает в радость технаря подъебнуть, особенно насчёт ассемблера или чего-то такого.
Есть функция, в которой многократно используется переменная с длинным названием, я хочу её сократить. Как лучше делать, так:int var = ebat->long->name->var;или так:int *var = ebat->long->name->var;Кто будет работать быстрее? Как надо делать? Надо ли делать вообще?
>>942089Ассемблерщик, а ты умеешь призывать RDRAND из процессоров >= Ivy Bridge или >=Excavator?
>>941605> chislo=((double)rand()/(double)RAND_MAX);Рандомлю число таким способом.Мне может вернуться единица?
>>942106А ты умеешь? Умник, бля.
>>942102ты сломал мой мозг
>>942128Нет, но ассемблерщик же тут ты. Отличная функция, иди учи ассемблер.
>>942102>Кто будет работать быстрее? Победила дружба, оптимизирующему компилятору насрать на указатели.
>>942140Ебать ты манька.
Посоны, чо думаете за ncurses?Есть ли что пизже, если да, то в чем?
>>942107Может.
>>942145> компилятору насрать на указатели. Причем два раза. Pointer aliasing гугли.
>>942213Всё пишут на ncurses, вот и ты пиши и не выёбывайся.
>>942393Я и пишу, прост мало ли.
>>942106Думаю что для этого надо написать командуrdrand
>>942449Как ты додумался до такого?
>>935715 (OP)Анон, как понять что ты готов ногой открывать дверб в любую вакансию, где нужны Сишники? Есть ли какой-то заметный УРВОЕНЬ?
>>942573Вот тебе три вопроса. Если на каждый ответишь без гугла - то можешь скорее всего. Если же даже вопросы вызовут WTF, то продолжай учиться.1. Чем конвенция cdecl отличается от fastcall? 2. Дана структура struct { char a; int *b; double c; } x; Чему равен её sizeof? Как его уменьшить?3. В двух объектных файлах есть переменная с одним и тем же названием, в файле с main она объявлена как extern. Что произойдет при попытке собрать приложение?
Плюсаны, нужно написать некоторую программу с графическим интерфейсом игорь типа тетриса, но показать ее работоспособность нужно на университетском древнем пека. На чем там байтоебы рисовали окошки в 2007?
>>942599Да, продолжу как учиться.
>>942602GTK+
>>942599> с main она объявлена как externВсмысле? Если название такое, то оно зарезервировано под функцию объявления её в других .c файлов командой extern из хидера, или я чего-то не понимаю.
>>942612fileA.cint x = 3;fileB.cint x = 4;main.cextern int x;
>>942613Не знаю, как это компилировать, проблем не имею.
>>942614Компилируется это нормально. Вопрос на линковку причем довольно простой, на самом деле.
>>942599> Чем конвенция ... отличается1) Чем угодно. Может не отличаться.> Чему равен её sizeof? Как его уменьшить?2) Чему угодно. Удалить из нее лишние члены.> Что произойдет при попытке собрать приложение3) Сборка приложения.Правильно ответил? Меня примут?
>>942619Не-а.
>>942599Правильные ответы, если кому интересно. Но лучше попытайтесь ответить сами.1. cdecl передает аргументы на стеке в обратном порядке, fastcall - часть в регистрах, и лишь то что уже не влезет - на стеке.2. Зависит сразу же от нескольких факторов - разрядности системы (это влияет на sizeof(int *) и размеров данных (это влияет на sizeof(double) - если CHAR_BIT != 8, то размер будет не 8). Дальше в игру включается выравнивание, его уже сами гуглите. Отключить можно через #pragma pack или в gcc через __attribute__((packed))3. Произойдет ошибка линковки. Что-то вроде Multiple definition of ...
>>942599Вся та хуйня, тобой написанная, к языку C не имеет отношения. Ну разве что третий вопрос немного.
>>942633Вот правильный ответ.
>>942632> Произойдет ошибка линковки.В оригинальном вопросе про инициализацию не было ни слова, а без инициализации ошибок не будет, привет фортрану.
>>942636Глобальные переменные всегда инициализируются, привет хаскелю.
>>942637А Питону никто не передаст привет, суки.
>>942632>3...Сук, что за баг разума... Вроде понимаешь, что ответ такой, ибо это очевидно, но всё равно ищешь какой-то подвох.
>>9426331. Стандартная практика в сжатые сроки определять уровень знания предметной области - задавать несколько глубинных вопросов и экстраполировать полученные ответы. Выковыривать знания каждого аспекта - слишком долго.2. Со всеми тремя вопросами я сталкивался на практике, так что имеет. Ты не представляешь, как часто люди приводят указатель на структуру к (uint8_t *), отправляют как бинарные данные, а потом удивляются, что на другой стороне ЧОТО НИТО ПРИХОДИТ.
>>942637Я про явную инициализацию. Неявную делает линкер. Или не делает (когда программа freestanding).
>>942643Ок, если не инициализировать не-нулём, то никаких ошибок линковки.
>>942636Признаю, мой косяк. Но, собственно, ответ вполне мог был бы выглядеть "если инициализируем переменные, то так, а если не инициализируем - то так". Это был бы только дополнительный плюс тебе в карму.
>>942650Скучно. Ты бы лучше спросил, что будет, если сделать так:#include <stdio.h>static char foo[]; int main(void) { return printf("%zu\n", sizeof(foo)); }
>>942632>fastcallДа, но текущее архитектурное состояние нам же надо сохранить перед вызовом и после вызова восстановить. Один фиг оно, получается, на стек уйдёт. В чём профит? В обычном варианте ты внутри функции пихаешь на стек значения используемых регистров перед вызовом (push x R), чтобы их потом в конце функции со стека обратно в регистры записать (pop x R), плюс пушишь и попишь аргументы функции (push x A + pop x A). Итого (A + R) x 2 стековых инструкций.В fastcall -- пихаешь на стек регистры, в которые запишешь аргументы (push x A), в конце функции восстанавливаешь регистры обратно (pop x A). Между делом пушишь и попишь оставшиеся аргументы на стек (push x K + pop x K). Итого (A + K) x 2 стековых инструкций. Получается, что профит в количестве инструкций будет только тогда, когда K < R, т.е. количество оставшихся аргументов (>= 0) меньше количества используемых функцией регистров.Так?
>>942664> один фиг оно, получается, на стек уйдётЕсть функции, которые больше ничего не вызывают (leaf functions). Во многих RISC-ах даже специально существует регистр LR, хранящий адрес возврата, чтобы вообще не трогать память и работать побыстрее. Сохранять те регистры, через которые передаются аргументы, обычно не нужно, плюс часто есть еще регистры, которые сохранять не нужно. Их можно юзать и получать неплохое ускорение на коротких функциях.
>>942664Не все регистры являются callee-saved. Если, допустим, у тебя функция одного аргумента, то он передастся в eax (или rax), ты там же в рамках регистра с ним поработаешь и через eax же вернешь. Никакого стека.
>>942668Это какой такой фасткол использует eax/rax? Кроме тех случаев, когда компилятор каждую функцию вызывает по-разному, наиболее удобным ему способом, не следуя никаким конвенциям.
>>942671У меня в памяти отложилось, что фасткол в этом плане не стандартизирован и каждый компилятор (идеологически) может реализовывать как хочет. В любом случае, я привел лишь синтетический пример.
>>942676__fastcall стандартизирован на x86-64, на x86 есть распространенный стандартный __fastcall от MS и менее популярный вариант от Borland.
>>942677Не знал, прикольно. Можно ссылочку, где об этом подробнее почитать можно?
>>942677>__fastcall стандартизирован
>>942695А, значит я таки был прав. Ну и заебись тогда
>>942695Ты поехавший что ли? В стандарте си ничего нет, кроме языка. Там даже стека нет. Соглашения о вызовах стандартизируются в описании ABI процессоров.
>>942721> в описании ABI процессоров.Процессору похуй на твой C.
Бля, я прям охуел сначала. Не сразу заметил ошибку. Шланг не прощает.Есть вообще профит им компилять?
>>942765>Есть вообще профит им компилять?Есть профит использовать -Wall -Wextra
>>942767Впрочем, gcc тут молчит. Я думал он лучше справляется с неинициализированными переменными.
> ref class Work> error: 'ref' does not name a typeВ студии работает, при попытке собрать с GCC получается эта хуита
>>942784> ref class WorkЭто не С и даже не С++. Это либо С++/CLI, либо С++/CX
>>942784Линуксоеды соснули.
>>942784>В студии работаетСтудия - это IDE с кучей языков, а не компилятор.
>>942785>>942861Действительно, это cli.
Как codelite заставить запрашивать инпут?Сук, мне уже пичот
>>943019Возьми паяльник и заставь.
>>943027ХаХаУмереть и не встать.А если по делу? Вывести-то оно выводит в консольке, а запрос ввода где?Сложна. В документации к коделайту нужной инфы пока не нашёл
>>943030> заставить запрашивать инпут?> запрос ввода где?Как-то так, думаю:getchar()scanf()мимо-гуманитарий
>>943048Толсто.Но скорее всего - я не так выразился.После кнопеляции и запуска написанного кода я всего лишь вижу консоль с надписью: Press any key to continueА по идее - я должен ввести энное количество чисел, но увы
>>942765В шланге есть -Weverything, специально чтобы ты страдал. И analyze еще есть, стоит пользоваться периодически. И -fsanitize тоже.
>>943068Код покажи наконец.
>>936775> Нет. В основной программе main.c это тоже .h файл. Я пишу библиотеку.В голос. У тебя библиотека - это кучка заголовочных файлов?
>>943350.h-only либы вполне себе существуют.
>>940206Ты ска, ты че на Луа гонишь?
>>940222Таких кастрировать надо.Охуеваю от андроеда на тиви, ну блядь, ну ладно бы железо там было норм, но нет же, на самое вшывое и давлик прокручивает говнокод.5 минут нахуярить на С гуй с линукса. Написали бы приложение для арча на арм, чтобы консолька, все нормально, вейланд.
>>943416Если бы не сраные приложения для телевизоров, в эти телевизоры бы продолжали пихать ртос с мгновенной загрузкой и без тормозов, а не ублюдочный линукс.
>>943123Ололо, он мне высрал три страницы ворнингов из /usr/include/cairo/cairo.h, который я использую. Причём ворнинги довольно сомнительны.
>>943442Ну я же сказал> чтобы ты страдалА чтобы не страдать, ворнинги для системных либ стоит выключать. Я свой код стараюсь собирать с Weverything, даже если считаю, что компилятор излишне придирается. Единственное, что выключаю для всего проекта - высер столмана -Wno-date-time[/spoile]
>>943447> ворнинги для системных либ стоит выключать.Как? Нагуглить не смог. Впрочем, после того, как я внёс pkg-config в "``" вместо "$()" никогда не понимал этой прыщемагии, шланг уже на кайру не ругался.
>>943447>ворнинги для системных либ стоит выключать.И да, шлангист, подскажи такую вещь. Шланг очень много ругается на unused functions, unused parameter, как отключить эти ворнинги?
>>943456Не обращай внимания на унтера и собирай с gcc -Wall -Wextra как посоны делают.
>>943490Или clang, они совместимы на самом деле, а вот поехавшие ворнинги не нужны.
>>943472Эти ворнинги не стоет отключать, программа у тебя не годится, либо выпиливай функции либо используй. Доделывай.
>>943472Неиспользуемые параметры в колбеках затыкаются чем-нибудь типа: #define UNUSED_PARAM(x) ((void) (x)), а неиспользуемых функций у тебя быть не должно.
>>943416Пиздец как у меня горит со СМАРТ ТВ, которое на каждое нажатие пульта по 2 минуты реагирует.НЕНАВИСТЬ
>>943493>>943494Неиспользуемые функции они на будущее, ещё не реализовал части программы с ними. Тоже самое с неиспользуемыми переменными, функционал с ними просто ещё не запилен. Но зачем мне каждый раз при конпеляции видеть эту информацию? Сейчас отключу, потом включу.
>>943424Но приложения все-таки могут быть полезными. На линукс все есть, новое не сложно сделать, а вот через давлик/арт это дохуя ресурсоемко, у меня на пк столько памяти не жрет сколько на вшивом смартфоне, а у тв еще и разрешение большое.Комп может жрать меньше 100мб с загруженой графической оболочкой. Андроид почти 300 со старта жрет.>>943500У моего говно-тв реагирует норм, долго реагирует именно если начать набирать номер канала. Но утубик и все остальное совершенно не работает, вообще. Только одно приложения с говноканалами кое как тащит.А с флешки почти норм (на самом деле нет). Хорошо не мой телик, Я бы такой не покупал, лучше взять монитор хороший и отдельно приставку с хорошим железом которую можно будет заменить когда в говно скатится, а монитор - это почти всегда на порядок лучше изображение.Вот только почему андроид не понял.Годные смарт тв начинаются от 3К бачей думаю, но переплачивать за смарт не знаю зачем, лучше взять панель с HDMI 2.1 DP 1.4 SuperMHL и ебатся уже только с приставками.
>>943447> Я свой код стараюсь собирать с Weverything, даже если считаю, что компилятор излишне придирается. Кастишь unsigned int в int при, например, сложении одного с другим? Меня шланг завалил подобными претензиями, но по-моему кастинг тут выглядит плохо.
>>943515А зачем ты функции эти компилируешь?Закоментируй, скрой макросами, вынеси в отдельный файл и убери из мейкфайла.Компилятор ведь прав что ты муть компилируешь, убери, и компилируй что уже работает.
>>943520(int) перед выражением написать это каст? Надо явно указывать всегда, или перевести другую переменную в просто инт, так должно производительнее выйти, потому как никаких конвертаций не будет.
>>943526> (int) перед выражением написать это каст?А что же ещё?У меня в коде много участков с выражениями подобного типа:a = b + c;Что выглядит вполне няшно. А так:a = b + (int32_t)c;Уже начинает раздражать.
>>943520> Кастишь unsigned int в int Ты такой кастишь, а в результате у тебя отрицательное число. Поэтому, хоть язык и не требует, лучше для себя же пометочку сделать, мол, вот кастую явно, значит, и о проблемах подумал. То же и с кастами в меньшие по размеру типы.
>>943523Давай проще: Возможно отключить эти ворнинги не завезли?
>>943547> ВозможноВозможностиfix
>>943547-Wno-название-ворнинга
>>943550Добра :3
>>943532>Что выглядит вполне няшно. А так:>a = b + (int32_t)c;Не правильно пишешь, формат задается один раз перед всем выражением.А вот int+uint вернет мусор, тут и надо указывать (int) в начале выражения один раз.Или если int+float тоже форматировать надо в флоат.
>>943552man gcc
>>943553>А вот int+uint вернет С float все ясно, а вот интеджеры могут прокатить и без форматирования, например если добавляем к юинту отрицательный инт и результат не отрицательный.Поэтому лучше или один всеобъемлющий инт юзать или явно конвертировать чтобы не получить неожиданых ошибок, дебажить может быть очень трудно если пропустил.
>>943563Как быть с char и unsigned char? Строка char* скармливается конечному автомату, у которого есть потребность индексировать этим символом в массивах состояний, и отрицательные индексы ему конечно не нужны. Тут методом тыка за секунды решается, но интересно, как оно по канону.
>>943566Очевидно, что если у тебя 8-битная кодировка, то и строки unsigned char. А если 7-битная ASCII (или какой-нибудь ASCII-совместиый UTF-8, и тебе насрать на все кроме ASCII), то можно и проверить, не притащили ли лишнего в старшем бите.
>>943566unsigned юзать для ясности, конечно отрицательных значений там быть не может.static const unsigned char - так объявляется алфавит в ядре linux.Почему обычный char работает нормально стало интересно, он конвертируется наверно тоже.
>>943566Самое главное не сравнивай float и int или INT UINT.
int main(int argc, char argv[]){return 0;}Почему так пишется, а не unsigned int main(unsigned int argc, unsigned char argv[]);Ведь количество не может быть отрицательным, и возвращать отрицательный код ошибки незачем и сами строки по природе из unsigned char состоят, зачем тогда по другому принято?Было бы гораздо проще вместо unsigned int uint писать.
>>943584> Почему так пишетсяПотому что давным давно символы были 7-битными. Отрицательный код ошибки удобен (чтобы отличать невырный синтаксис аргументов от ошибок выполнения полезной части программы, например). А вот size_t argc был бы к месту, но... обратная совместимость.
>>943584>unsigned char argvэто бля что за наркомания?
>>943584>unsigned int и это что за хуйня?
Что здесь происходит вообще? Школотрон дорвался до unsigned?
>>943592Массив строк.>>943593Положительный int. Читай спеки.
>>943594Ну очень уш долго писать, uint заебись, я макросом заменяю, но выглядит как костыль, вот бы дефолт таким был.
>>943602теперь объясняй как массив vекторов и их количество могут быть отрицательными?
>>943603>uint заебись, я макросом заменяюуходи
>>943607C не имеет векторов. Это не вектор а указатель на char[].
>>943608stdint.h не имеет uint, а было бы удобно btw.Что плохого в макросе?
>>943619Вектор - это последовательность элементов, массив. В Си массивы есть. argv - это массив указателей на char.>>943620Если тебе сложно написать два слова, пиши только unsigned. Во-вторых, товарищ Шахиджанян ждет тебя. Или нормальный IDE. В-третьих, макросы для типов зло, используй typedef.
>>943619arg[v] <- что означает буква v?
>>943620>не имеет uintпотому, что он нахуй не нужен
>>943622Это не массив а указатель на массив, значения переданые не копируются, а ты получаешь только указатель, тоесть ты можешь переопределить его внутри функции.Аяаяй такгого не знать.>>943622uint короче ведь. typedef не уверен что лучше, макроса в программе уже не будет, а typedef уже в программе обрабатывается, лишние затраты, всегда проигрывал с манек брезгующих #define для констант, это ведь самая настоящая константа hardcoded в програмку, а не определяемая при исполнении с выделением памяти.
>>943630> typedef уже в программе обрабатывается, лишние затратыШизик, уходи.
>>943630>Это не массив а указатель на массив,это указатель на массив указателей. уходи.
>>943633Если уж придираться, то указатель на массив имеет типа "указатель на массив". А массивы в аргументах функции неявно преобразуются к указателю на первый элемент этого массива.
>>943636нет. уходи.
>>943638static void foo(int *x) {}int array[1];foo(&array);Собери с -Wall и прочитай сообщение компилятора.
>>943639>foo(&array);-> foo(array)уходи
>>943642Откуда вы лезете?http://ideone.com/eVc4xR
>>943643prog.c:20:17: error: passing argument 2 of ‘not_main’ from incompatible pointer type [-Werror=incompatible-уходи
>>943630> всегда проигрывал с манек брезгующих #define для констант, это ведь самая настоящая константа hardcoded в програмку, а не определяемая при исполнении с выделением памяти.Ебать дебил.
>>943656А что не так? const int a = 3 выделяет память, компилятору нужно ее читать. Удаляется такая "константа" только с -flto.
>>943657Съеби уже нахуй отсюда со своими историями
>>943657Просто интересно, а по каким причинам нормальный компилятор не подставит значения константы в местах использования константной переменной?
>>943624означает вектор, но векторов в C нет, это массив argv ты обращае>>943631Чем дефайн плох маньк?>>943660Он не подставит значения манька тупая, const можно задать во время выполнения. А дефайн это впечатано в код программы.Попробуй int s;scanf("%d",s);const int d=s;printf("%d",d);Это такипеременная которую нельзя менять.
>>943659Это частный случай. Алсо, память все равно выделится.
>>943659У тебя там какой-то манямирочек, от const можно передать поинтер, от дефайна нельзя.
>>943670> Алсо, память все равно выделится.Да похуй, хоть 100 раз. Никакого "компилятору нужно ее читать" нет и это главное.>>943671Научись следить за ходом обсуждения, прежде чем влезать, а пока иди нахуй.
>>943674>читатьЕсли знаешь значение константы зарание то #define как правило лучшее решение.const же совсем не для того, и конст будет иметь свою ячейку в памяти.
http://stackoverflow.com/questions/1674032/static-const-vs-define-vs-enum#1674459
>>943553>Не правильно пишешь, формат задается один раз перед всем выражением.блядь что
>>943675>#define как правило лучшее решение.Может быть и так, но у многих на препроцессор категорическая аллергия - и на то есть существенные причины.Это следует понимать, а не быть неполноценным аутистом вроде тебя.
>>943725У многих - это у тебя лично?Во всех сишных проектах, с которыми мне довелось работать - везде так или иначе использовался предпроцессор.
>>943741> >многих на препроцессор категорическая аллергия>везде так или иначе использовался предпроцессор. Это совершенно ортогональные утверждения.А ведь ты и правда туповатый аутист, плохо быть тобой.
Совершенное число. Как вывести сумму всех делителей совершенного числа на экран?void main() { int a, i, x1=0, cnt=0, summ=0; printf("Vvedite luboe desyatichnoe chislo:"); scanf("%d", &a); for (i=1; i<=a-1; i++) { x1=i; if (a%x1==0) summ+=i; } printf("summ=%d\n", summ); if (a==summ) printf("Sovershennoe chislo"); else printf("Ne sovershennoe chislo");}
>>943771не работает. я только начал недавно вкатываться
>>943776Для начала сделай так чтобы твой говнокод меньше походил на говно и больше на код.А теперь нахуй иди, дебил обосранный.
>>943793Поясни, что не так, или петух.Мимо
>>943895>etot translit urovnya chervya-pidora>Поясни, что не такЯсно.
>>943895Для кого шапка PR написана ? Ссылку на ебучую песочницу делай, а не гавнокод вставляй.
>>943897> транслит как признак именно говнокода>>943899> Ссылку на ебучую песочницу делай, а не гавнокод вставляй.> мимоУ меня нет кода другого анона, ибо я мимо, но я же вижу, что ты человека просто так обоссал.
>>943764А что конкретно у тебя не работает в приведенном коде?
Посоветуйте, пожалуйста, подходящее решение для моей проблемы. У меня есть простой алгоритм написанный в матлабе. Пикрил. Который там занимает 4 строчки.Хочу сделать тоже самое, но теперь на си/си++. Читал, что в крестах есть std::vector, но не уверен, что это то, что мне нужно.1. Мне нужно хранить 2d вектора. Их будет очень много. Миллионы штук.2. Отсортировать их в лексикографическом порядоке.3. Подсчитать число уникальных векторов.Больше ничего делать с ними не нужно.Есть ли уже готовые инструменты в стандартной библиотеке для этого?Алсо могу рассматривать только элементы языка по стандартам C89 и C++03 максимум. Т.к. компилятор будет MSVC 2010. И изменить это нельзя.
>>943985Вектор в плюсах - это одномерный массив. Что такое "2d вектор"? Это матрица?>1. Мне нужно хранить 2d вектора. Их будет очень много. Миллионы штук.std::vector<std::vector<std::vector<int>>> или что там у тебя вместо intЭто будет твоё хранилице всех матриц.>2. Отсортировать их в лексикографическом порядоке.std::sort, тебе нужно лишь написать функцию сравнения двух матриц.>3. Подсчитать число уникальных векторов.Сравниваешь каждую пару соседних векторов в отсортированном массиве с помощью уже написанной функции и удаляешь одинаковые.
>>942599Нахуй сишнику знание fastcall-a?
>>944015>Что такое "2d вектор"? Это матрица?Вектор в евклидовом пространстве размерности 2 (плоскости). В обычном школьном смысле.Закодировать его нужно через координаты по осям x и y.
>>944033Тогда std::vector<std::pair<int,int>> (или что там вместо int).
>>9425991. За функцией __cdecl стек чистит caller, в __fastcall некоторые аргументы передаются через регистры.2. Выравнивание, наверное, на double, поэтому sizeof будет 3 * sizeof(double). Или char будет выровнен на размер указателя, а затем будет лежать double.3. Хуй знает.
>>943927все работает. я не понимаю как вывести помимо числа совершенное оно или нет, его делители все
>>944112Клади по ходу вычисления делители в массив или делай повторно тот же самый цикл, добавив внутрь if printf делителя.
>>943755Как и случаем ранее.Видишь ли, использовать макроопределения для заранее известных констант - это классическое и повсеместно используемое решение, и на то действительно есть существенные причины. Вне зависимости от чьей-либо (твоей прим. авт.) аллергии.
>>944241>препроцессор с - мерзостный высер от дегенератов для дегенератов (тебя)>использовать макроопределения для заранее известных констант - это классическое и повсеместно используемое решениеОпять же - совершенно ортогональные и истинные утверждения.
>>944265Царь, ты?
>>944241>Видишь ли, использовать макроопределения для заранее известных констант - это классическое и повсеместно используемое решение, и на то действительно есть существенные причины. Настолько существенные, что нельзя использовать enum?>>943676
>>944304А ты сделай мне double или char * enum.
>>944304Алсо логически более правильно использовать enum для связанных параметров (список состояний, например), а не объявлять через него любую целочисленную константу, попавшую в исходный код.
>>944296Не стоит вскрывать, дурачок.
>>944311Ок-ладно. А как насчёт регистровых констант?
>>944344Ты про спецификатор register?
>>944359Иди нахуй.
>>944359Да.>>944360Нет, ты.
>>944371>Да.Пизда.
>>935715 (OP)Сап, пр, помоги нюфагу, есть файл с числами, считываю из него числа в массив и вывожу его во второй, все бы ничего, да только считывается только первая строка файла, как заставить цикл переходить и на вторую строку?
>>944386Ты считал k + 1 (0..k) элементов из файла, а пишешь k (0..k-1). Алсо, закрой file2.
>>944387Так, поставил k+1, все считало, только откуда взялись нули?
>>944371Во-первых, никто не мешает тебе написать const register int = MY_DEFINE там, где это требуется. Макроопределения вообще удобнее тем, что их можно легко расшарить, а в случае с константными переменными - это уже либо static, либо extern. К слову, объявлять регистровые переменные в global scope - это как раз не самая популярная практика, и не все компиляторы это одобряют.Во-вторых, если тебе нужно экономить на спичках, то не повод ли это отказаться от C и посмотреть в сторону ассемблера?
>>944392k-1? Два лишних значения пишешь, по-моему.
>>944392Ну и вообще: http://pastebin.com/EzbjnsPR .Нахер тебе нужны эти массивы.
>>944417Почему там два лишних? Если считалось, допустим, 6 символов, то k = 5 (0..5). Их и выводим в цикле for (i = 0; i <= k; i++).
>>944421Потому что k = 6 в этом случае.
>>944426Действительно, это я тупой.
>>944401>Во-вторых, если тебе нужно экономить на спичках, то не повод ли это отказаться от C и посмотреть в сторону ассемблера?Вот это-то я, блядь, и хотел сказать. Если так сильно жалко память, что готов пожертвовать даже скоупингом имён или писать undef, нахрен писать на C?
>>944419Сортировка данных, из файла считывать и сортировать, для этого и массивы
>>944435>нахрен писать на C? Для мультиплатформы, например.Нет, не армопараша и подобное говно.
Все тотже начинающий неосилятор.Сделал таблицу для квадратов и кубов числа но она съезжает в бок когда число становится больше. Как записать чтобы число выдавало справа налево?http://pastebin.com/kvkkDLUs
>>944450>Для мультиплатформы, например.Нипонял.
>>944453printf возвращает число символов, которое он вывел. Делаешь так: отдельно печатаешь числа и отдельно печатаешь пробелы. Напечатал число - проверил число символом - добилдо нужного числа символов пробелами.
>>944453printf("| %d | %d | %d |\n", i, ii, iii);printf("| %5d | %5d | %5d |\n", i, ii, iii);
>>944458>Нипонял. Это нормально.Макеты для cuda, например.
>>944461>>944463Ебать я тупой. Отдуши братишки.
Поясните начинающему: пытаюсь запилить строки с длинной и rc. С динамической-то частью всё просто, но как прописать это в статике? Т.е в асме я бы прописал что-то типа:hello_ref DW -1hello_len DW 11hell_data DB "hello world", 0В принципе возможно сделать без спецефических для компилятора хаков?
>>944480Тебе нужно хранить длину вместе со строкой?struct{ size_t dlinnnnnnna; char pointer string[];}
>>944484pointer лишний, лол.
>>944485Ваще лол. проста лооооооооооооооооооооооооооооолишееееелаааааааааааааааааааааааааал нахуй
>>944480Зачем rc для ro-строк?
Сап, ребят, где-то видел нерабочий код на C (кажется был прототип функции, без тела, и она в main вызывалась), который gcc при этом под O3 компилил и не жаловался.Вроде в твиттeре кто-то постил прикола ради давно еще, но это не точно, помогите плз найти
>>944484Благодарю.>>944572Для унификации же. Похоже на параною с моей стороны, но всё ж успокойте меня: Для ro строк использую структру {int rc; int len; const char data[];}, ну что бы её в неизменяемую секцию ложило, для rw - {int rc; int len; char data[];}.Тут ведь гарантирутся их эквивалентность? Компилятор ничего не соптимизирует?
>>944614> ну что бы её >в неизменяемую секцию ложилоКого — структуру?
>>944633Да
>>944634Лол.Короче, строковые литералы компилятор всегда суёт в RO-секцию и тип у них const char[<длина>], поэтому присваивать их можно только указателям на const char.К структурам это не имеет никакого отношения.
>>944635>>К структурам это не имеет никакого отношения.Ну, кроме упомянутого в предыдущем предложении присваивания. Нормальный компилятор не даст присваивать указателю на char. Ну или по крайней мере прокукарекает warning про ISO C forbids blah-blah-blah...
Алло нахуй, куда уехал мой с++ трендж?
>>944647https://2ch.hk/pr/res/916056.html
>>944659Ты ошибся, дружище. Мне нужна помощь по ёбаному MFC
>>944661>MFCmonoidal functor category? Так тебе туда.
>>944663>monoidal functor category?Нет. Это дерьмо гораздо хуже, и уроков по нему минимум.
Сука, больной уёбок
>>944672>больной уёбокващет так и есть
>>944687Это уже стало нормой?
>>944672Учить foundation classes по ютубу - это клиника.Открой MSDN или книжку найди какую-нибудь.
>>944702Книжки есть, но по MFC даже в ютубе оч мало информации
>>944672>Одноклассники
>>944726Так, СТОП. Microsoft Foundation Classes? А почему в C-треде?
>>944726https://msdn.microsoft.com/en-us/library/d06h2x6e.aspx
>>944752>А почему в C-треде?очевидно, анон считает, что здесь собрана ит элита и он прав.
>>944726читай пикрил и уебуй с нашего уютного тхредика
>>944608ну ребят, неужели никто не знает?
>>944773А ты думаешь, тут любят коллекционировать баги гцц? Могу тебе предложить какой-нибудь int main = 0xc3; но это явно не то.
>>944773Это вполне мог быть вызов функции, который никогда не могу случиться, например.
>>944748Как бута штото плахое :^)
>>944752>почему в C-треде?Потому что С++-тред проёбан, и я не могу его найти
>>944769Неактуально для новых студий
>>944804ой, иди нахуй тогда, твоя mfc уже лет как 10 протухла
>>944777это даже не то что бы баг, скорее undefined behavior там был, мне кажется
>>944847Не MFC протухла, а все руководства и книги по нейХотя и MFC уже пахнет говном из привокзального сортира. Но тогда на чём мне пилить? Qt?
>>944935> Qtда, ну или .net если ты аутист> все руководства и книги по нейmfc было тухлым изначально, даже пакистанские говноеды из мелкософта это признавали, так что книги актуальны до сих пор мимо winapi->mfc->qt господин
>>944935>QtТам уже давно C++ не пахнет. Можно все на веб стаке или qml лабать, что большинство крупных контор (близзард например) и делают
>>944951>Там уже давно C++ не пахнет. Можно все на веб стаке или qml лабатьА можно и на плюсах тоже, юзать куэмэль не заставляют.
>>944951Только Qt-говно что на C++, что на QML одинаково тормозит, в отличие от MFC, в котором хоть и абсракции, но хотя бы ничего не лагает на пустом месте.
>>944947>mfc было тухлым изначальноаргументировать ты конечно не сможешькак и все кукареки в интернетах
>>944947Так, может на WinAPI всё и делать?
>>944954>хоть и абсракциихуякции, и вот ему тоже полбу >>944955в mfc тебе придется жрать солянку из winapi и ооп
>>944951Дело в том, что я не крупная контора.
>>944958Солянка солянкой, зато всё автоматизировано
p.s. и да говноеды, хотите жрать говно, жрите, никто вас отговаривать не будет, но здесь не кресты нехуя
>>944947>>944951>>944954Ну и что выбирать?
>>944963Qt.
>>944962>нехуя Уроки-то сделал?
>>944963dlangui
>>944998проверяй за щекой
>>944963C#.
>>944671Microsoft Foundation Classes?
>>944963Haskell
Посоны посоветуйте современной литературы по C (С11 желательно). Раньше читал K&R когда был задротом, но уже подзабыл. Хочется начать снова на чем то более свежем.
>>945097скинул в личку, проверяй
>>945097>читал туториалы когда был ньюфагомПроиграл. Сдаётся мне, ты просто идиот, учитывая что в стандартах практически нихуя не меняется.
>>945086Да. Но я уже понял, что сделал не так, и как тут с чем работать.
>>944971В ближайшем будущем попробую
>>945000>>945071>>945087Ну а новые езыки мне зочем есле есть с++?
>>945373>c++>c–+
>>945097Прата из шапки, потом стандарт.
Поясните, как на си в VS 2017 прогать?
>>945730никак
>>945730>>945732почему никак? в настройках проекта же можно C выставить
>>945737vs для пидоров, поэтому никак
>>942641тоже поначалу искал подвох, но потом понял, что всё-таки ответ на поверхности
>>945743О!Уважаю братишка.
>>945730>VS 2017>си Нахуя?
>>945829Ну попердолить там настроечки
>>945730>VS 2017Нахуя?
>>945841Попердоль в чем-нибудь другом
С какой стороны обрезается память realloc'ом?
>>945730Больно.
>>945980Realloc может не только обрезать, но и переместить.
>>946057Я понял, но я только уменьшаю размер массива
Как работает memset? Циклом память забивает? Где можно посмотреть реализацию? В glibc нихуя не понятно.
>>946064Ответ тот же.>>946180>Где можно посмотреть реализацию?Я бы погуглил вместо тебя, но не буду.Знаю, что 1) Есть DMA. 2) есть специальные инструкции.
>>946303> Ответ тот же.Лол, она может переместить даже когда я не требую больше памяти из кучи? Как так-то? ANSI C
С++ тред куда-то укатился
>>946305>Лол, она может переместить даже когда я не требую больше памяти из кучи?Да.>>946321->>>>> >>931827 (OP)
>>946322> Да.Как такое возможно, немногословный ты мой друг?
>>946321И хуй с ним
напомните, malloc по стандарту выдаёт выравнивание к double?
>>946321C++ = meme lang.
>>946339пчм?
>>946354Маня абстракции, ООП. На C всегда можно написать более быстрый код.
>>946339Я лично считаю c++ мем языком из-за его плохого дизайна. В язык просто накидали рандомных фич для решения непонятно каких проблем. Вместо дженериков эти шаблоны, которые "решают" две проблемы одновременно. Но они хуже джавовских/растовских дженериков и в метопрограммировании мягко говоря сосут
>>946359Не ебу, что за абсракции. За всю жизнь написал на нём два с половиной хелловорлда и теперь дрочу FMC, как видно тут >>944661Запилил всратый калькулятор, что попробовать ещё сделать? олсо для матриц хуету, которая будет считывать определитель?
>>945730Создаешь C++ проект, добавляешь файлы с расширением .c, пишешь. Кукаретиков не слушай, они даже не пробовали.>>946180Да, memset забивает циклом память. В общем случае выбираются инструкции с операндами "пожирнее" (SSE c 128-битными, например), а адреса, не подходящие для этих инструкций (невыровненные начало и хвост буфера), заполняются с помощью инструкций с меньшим количеством операндов.>>946335> напомните, malloc по стандарту выдаёт выравнивание к double? Выдает адрес с выравниванием, подходящим для любого нативного типа. Если именно double требует наибольшего выравнивания, то да.
>>946389> с меньшим количеством операндовС меньшим размером, конечно же.
>>946324По стандарту. Это сделано для того, чтобы программа могла уплотнять выделенные фрагменты памяти.
>>946450Понятно, т.е. мне всегда для realloc подрубать второй указатель и проверять
>>946451Не надо ничего проверять, просто индексировать надо оффсетами, а не указателями. ОБЫЧНО адрес выделенной области тебе неинтенесен.
>>946452> просто индексировать надо оффсетами, а не указателямиЯ даже не знаю, что это.Просто учусь
>>935715 (OP)Бля как выделить гигабайт памяти? Пробовал и через new и через malloc нихуя не понимаю, не могу выделить нихуя, я вобще хз как так.
>>946452> Не надо ничего проверятьА что ты делаешь, когда realloc() NULL возвраащает?>>946457А у тебя он есть? Попробуй mmap().
>>946457Те смотрю в диспетчере 0 эффекта
>>946460> Те смотрю в диспетчере 0 эффектаЧто ты в диспетчере смотришь? Я так понимаю, это винда, в винде десяток колонок на тему памяти. Алсо, настоящую память тебе дают по мере использования - попробуй забить свой гиг единичками (не нулями!).
>>946463Один вопрос WHAT THE FUCK
>>9464631) На стеке ты можешь выделить не больше нескольких мегабайт.2) Целочисленные константы по умолчанию int, этот int переполняется при умножении. Добавь к любому числу в строчке с size суффикс ULL (unsigned long long).
>>946467
>>946472> суффикс
>>946603 (OP)>>946603 (OP)>>946603 (OP)>>946603 (OP)>>946603 (OP)
>>946459>А что ты делаешь, когда realloc() NULL возвраащает?Это да.