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

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

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

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

Что читать:

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

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

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

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

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

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

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены
особенности* языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

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

- 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/
- https://arhivach.org/thread/243867/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #946609
>>946603 (OP)
Почему нейроночки пишут на всяком говне а не на C?
946623946632
#3 #946623
>>946609
Потому что заебешься.
#4 #946629
Скиньте че интересного почитать из русскоязычной литературы
946630947191
#5 #946630
>>946629
Лукьяненко
946681
#6 #946632
>>946609
Потому что C не работает на GPU, а работает "всякое говно" вроде CUDA и OpenCL
946633
#7 #946633
>>946632
Дак CUDA это C/Fortran
946634
#8 #946634
>>946633
Дак OpenCL тоже much C-like
Значит пишут на C
946638
#9 #946638
>>946634
Кстати, где можно новичку найти учебники по OpenCL на русском? А то по CUDA, вон, академики из МГУ пишут книги, а по OpenCL нет такого вот всего...
946668
#10 #946644
Какую библиотеку использовать чтобы в маздае создавать окно и пересылать на него отдельные пиксели и png-картинки?
946665
0 Кб, 305x26
#11 #946661
Хелп, всё описание проблемы тут:
http://pastebin.com/Cfgis7Ds
Пикрил вот:
946663946674946682
#12 #946663
>>946661

> Ну и заполняем m[0]...m[count] элементами am[].


Я имел в виду до m[count-1]
#13 #946665
>>946644
WinAPI
946964
#14 #946668
>>946638

>на русском


Не нужно.
946670
#15 #946670
>>946668
Кек, да на аглицком-то толковых нет, просто разбросанная по интернету документация, которая целостна в голове у 1.5 пердоликов
946671
#16 #946671
>>946670
Хотя не, я обосрался
#17 #946673
Дайте, пожалуйста, учебник или руководство по WinApi. А то я из всей информации смог нарыть лишь то что devcpp предлагает. Пример окна. А в гугле эти пислоглоты предлагают мне использовать c++. ЧТО ЗА ИДИТО ПРИДУМАЛ ТАК НАЗВАТЬ ЯЗЫК?!?!
946962947264
#18 #946674
>>946661
Отбой, функция отрабатывает нормально. Дело где-то в другом месте...
#19 #946681
>>946630
Зачем вы тгавите?
947139
#20 #946682
>>946661
Короче, трабла в том, что я в функцию передаю массив int m[], затем m меняю, а в main изменения не передаются.
Как передать?
946685946850
#21 #946685
>>946682
По ссылке, дебил.
946686946850
#22 #946686
>>946685
http//::::::::::?
946689
27 Кб, 493x387
#23 #946689
#24 #946850
>>946685
>>946682

Оба ебанутые.
Во-первых не по ссылке, а по указателю.

Во-вторых:
Параметр m - должен быть указателем на ДИНАМИЧЕСКУЮ память. Т.е. ты не можешь написать

>int m[]={43 25 45 13 27 41};


Сперва ты должен сделать что-то вроде:
int m = malloc( sizeof(int) 6)
Потом проинициализировать значениями.
Да и вообщше привиди полный код с main(). У тебя там труха полная, даже лень разбирать.

Читани сначала оп-пик.
946888947084
#25 #946888
>>946850

> int m[]={43 25 45 13 27 41};


Таковым и является. В main создан динамический массив, а вот эту вот строку я написал сам, чтобы показать, какой, например, массив поступает.
946896
#26 #946896
>>946888
Короче, проблема решена.
А в догонку вопрос.
Если я передаю массив в функцию, я по сути передаю указатель на первый элемент массива.
И менять я сам указатель не могу же в функции, верно?
946911
#27 #946911
>>946896
Можешь делать с указателем что хочешь.
конечно если это не *const

Ты можешь присвоить этому указателю новое значение. Однако это значение не вернётся обраттно в вызывающую ф-цию.
Чтобы вернуть значение новго указателя из ф-ции ты должен передать указатель на указатель.
В твоём случае realloc - вероятнее всего вернёт новый указатель и ты долже вернуть его обратно.
Следовательно ты должен предевать не m[] а указатель на m[].
946914
#28 #946914
>>946911
Спасибо. Всё мне разъяснил
21 Кб, 595x842
85 Кб, 595x842
#29 #946962
>>946673
Пикрил, не смотри что 95, дает базу и многое до сих пор актуально на NT-системах, просто параллельно сверяйся с msdn.
946968947039947195
#30 #946964
>>946665
А можно что-то попроще? Чтобы я мог создать окно выбранного размера и рисовать там пиксели, линии, прямоугольники, дуги, многоугольники, эллипсы. Или хотя бы отдельные пиксели.
947025
#31 #946968
>>946962
Спасибо, аноний. То что пытался найти на всяких сайтах 2 часа и не нашёл нашёл в этой книге за первые 10 минут.
#32 #947025
>>946964

Выбирай любую C-либу для гуя: gtkmm, sdl и прочие.
28 Кб, 400x400
#33 #947039
>>946962

>Windows 95


>актуально на NT-системах

947093948245
#34 #947060
Ребят, выручайте, как работать с графикой, имею следующее:

> C (чистый, pure, бедняжка:'c)


> x64-разрядную шинду



Алсо, пытался в OpenGL и Direct3D, но ниасилил
Алсо2, работать надо с 2D, нужна будет просто статичная картинка (от расчетов)
#35 #947084
>>946850

>по указателю.


Нет такого. Есть по значению и по ссылке (в C++)
947199
#36 #947093
>>947039

С каких двух букв начинается название файловой системы винды?
947095
#37 #947094
>>947060
Вверху информация. Можешь WinApi использовать. В книге, которая выше сразу пример рисования текста. А тут http://www.codenet.ru/progr/delphi/WinAPI/ есть справочник функций.
Или sdl попробуй.
#38 #947095
#39 #947116
>>946603 (OP)
Только что узнал что в си есть goto. В курсах такого не говорили. Просто подумал, а вдруг в си тоже есть goto? И оказалось да. Оказывается си не такой уж и плохой, по сравнению с ассемблером. Это многое упростит.
947119
#40 #947119
#41 #947129
Хотелось бы увидеть примеры реальных программ. Пока смог найти только исходники старых игр (DOOM, квэйк и т.п.). Но есть ли что поновее (не игры)? Хотя бы список программ, где часть написана на чистом си не подкинете?
947134948318
#42 #947134
>>947129

>Хотя бы список программ, где часть написана на чистом си не подкинете?


Репу GNOME на github смотри
#43 #947139
>>946681
Тогда Пелевина.
#44 #947191
Написал свою первую программу на Си. http://ideone.com/FwiY3m Крутота.

>>946629
Я изучаю по "C для программистов с введением в C11".
#45 #947195
>>946962
10 прошло с моей сознательности, а это говно всю советуют. хорошо что я решил, что лучше линупс, чем отсосать фуллбловн у винап.
#46 #947196
947505
#47 #947199
>>947084

> C++


Аташол
зануда-кун #48 #947233
сап, анон, есть два сту... кхех... настольная приложуха. Динамический лексический словарь, который пополняется юзверем. Работать приложуха должна фоном. Иногда на некоторые слова приложуха тригерится и выкидывает юзверю куски си-кода. И всё это говно должно неприрывно работать и перекомпилироваться во время выполнения. Так, как во время фонового выполнения уже кодер вносит патчи и всякие фичи. Внимание, знатоки, вопрос. Сколько хуё... кхм... Как GCC заставить этот код постоянно компилироваться "на лету"? Видел, в одной статье как с помощью malloc() код сконверченный в поток байтов, запиханных в массив знаков, запускали в JIT. Или же проще искать сторонние интерпритаторы для си, которые помогут в этом случае. Короче, дайте линк на годное чтиво, особенно по компиляторам. Или лучше искать документацию GCC? И куда тогда смотреть, чтобы достичь моего эффекта?
947268
#49 #947264
>>946673
Фень Юань (GUI) и Рихтер (не GUI) все еще актуальны. Но если ты тот, кто выше про окно и png спрашивал, бери SDL2 и не выделывайся.
#50 #947268
>>947233
Для Си есть libtcc, но лучше прикрути нормальный скриптовый язык. Какой-нибудь lua, например.
947369947781
зануда-кун #51 #947369
>>947268
чаю
#52 #947505
>>947196
OpenGL ~ glut
halp mи понять это
зануда-кун #53 #947699
сап, анон. Я искренне не понимаю, почему у людей горит с сишных указателей. По-моему это чуть ли не гениальнейшая вещь, которой Си может похвастаться. Это ведь круто, когда ты должен сам контролить активные области, а не полагаться на транслятор, в надежде, что он выполнит так как надо. Хотя я сам и не до конца понимаю и не разбираюсь в указателях, но это однозначно куртая фича по моему скромному мнению. Это ведь круто, что одна переменная может иметь кучу различных имён, указывающих на неё. Если память кодера коротенькая и он просто не помнит название переменной, то просто можно вызывать её по синонимам-указателям. Хотя, это не уникальная вещь, это лишь одно из практических применений указателей. В общем, я каждый раз недоумеваю, когда кто-то бугуртит на указатели.
947775
#54 #947706
>>947060

>работать надо с 2D, нужна будет просто статичная картинка (от расчетов)


Используй SDL, вот тебе туториал: http://lazyfoo.net/tutorials/SDL/
947817947876
#55 #947775
>>947699

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

Представь себе, что ты передаёшь указатель на большой массив в процедуру, и эта процедура созраняет его в статичной переменной для вычислений в будущем (для сглаживания, например). Потом ты как-то меняешь свою программу (и она состоит из 10000 строк, например), и где-то между вызовами этой функции ты трёшь этот массив, указатель на который где-то сохранён. Потом ты вызываешь эту процедуру и получаешь Undefined Behaviour, потому что данных в этом месте хранения уже нет. Или ты делаешь realloc, и данные могут быть в другом месте.

Указатели - это гениальнейшая вещь, только в других языках они лучше и выразительнее, чем "адрес места хранения вот сейчас".
947778948056
#56 #947778
>>947775

> Или ты делаешь realloc, и данные могут быть в другом месте.



И тоже получаешь UB, разумеется.
#57 #947781
>>947268
а можно из кода делать системные вызовы для компиляции? Я так один раз сделал, у меня комп повис. Или можно оформить отдельный код, который компилирует мой изначальный код. Хотя по сути это и будет обычный скрипт.
947782947787
#58 #947782
>>947781
луа для того и нужен, чтобы ничего не компилировать динамически. везде где статика там си, если есть динамические сценарии, то можно юзать луа, которые интерпретируемый.
#59 #947787
>>947781
если изменять код на лету, это типичный морф как в вирусах, если компилить либу и подключать на лету, то придется приложение перезапускать, чтобы все в памяти отобразилось, либо лепить велосипед которые на лету будет секцию линка в памяти править на лету. Лучше интерпретатор пускать, это выбор всего геймдева даже.
947792
#60 #947792
>>947787

>Лучше интерпретатор пускать


время написать свой lisp
100 Кб, 975x913
#61 #947817
>>947706
Непонимаю. Сделал как в туториале, но какая то ошибка, которую я непонимаю.
947880
#62 #947876
>>947706
Чувак, мне нужен C, а не C++
947883948948
#63 #947880
>>947817
Ты либы не слинковал, с виду. На ворнинги похуй.
#64 #947883
>>947876
Ты ебанутый?
947903
#65 #947903
>>947883
Алеша, ты не в курсе, что крестовый рантайм спокойно влезает только в разработанное очко твоей мамаши, а всякий embed посыпется нахуй от таких раскладов?
947934
#66 #947934
>>947903

>sdl


>крестовый рантайм


Скажи мне, ты ебанутый?
#67 #947988
>>946603 (OP)
Мне кажется или легче на ассемблере написать операционную систему и там уже программировать на си, чем на WinAPI, SDL, OpenGL и тд?
947992947993
#68 #947992
>>947988
Покажется же такое. И что ты вложил в "ОС"?
948014
#69 #947993
>>947988
Тебе кажется. Если ты не осилил простые API, то ОС ты тем более не осилишь.
#70 #948014
>>947992
Загрузчик ОС, который переводит её в защищённый режим. А дальше уже идёт небольшая графическая состовляющая, позволяющая запустить одну программу, которая может повлиять на весь компьютер даже стерть загрузчик с жёсткого диска и просматривать файлы через программы и просто просматриватель файлов.
948017
#71 #948016
Наверное всё же легче научиться проектировать и создавать процессоры, которые будут использоваться под одну задачу.
948018948210
#72 #948017
>>948014
Наркоман
948023
#73 #948018
>>948016
Дак и сейчас не все же процессоры общего назначения
#74 #948023
>>948017
Я почти перешёл в защищённый режим но не получилось. И не понятно почему. x86-64 для пидоров.
Буду переходить на ARM.
>>946603 (OP)
Я похоже придумал как реализовать свою программу. Файл .msfso превращу в .bmp и выведу через функцию WinAPI. И никаких SDL не надо.
Только вот потом мне надо будет организовать вставку видео и аудио. Можно ли в WinAPI сделать так? Чтобы по нажатию в некоторой области окна воспроизвелось видео или аудиофайл.
948062948126
#75 #948056
>>947775
Ебать ты долбоеб.
Кто ж сука так делает это был риторический вопрос, ответ см выше?
948905
#76 #948062
>>948023
Лучше сразу прикрути к своему окну WebKit браузер.
#77 #948126
>>948023

>на ARM


нахуй ты здесь нужен
#78 #948210
>>948016
Или сделать универсальный процессор, конечно всегда лучше специфическое устройство, но есть устройства с широким спектром задачь, ПК например.
Вот для таких устройств ARM IBM AMD Qualcom решили разработать гибридную архитектуру, каждая архитектура для чего-то хороша, вот и решили повыкидывать мусор из amd64 POWER9 arm64 так чтобы остались только сильные стороны и объединить это в одной системе.
948260
#79 #948245
>>947039
Думаешь, там за 20 лет апи менялось? Да нихуя.
948279948418
#80 #948260
>>948210
И как сие чудо назвается?
#81 #948279
>>948245
Менялось. Появлялись новые API-функции, и в серьезных проектах ими пользуются. А вот хелловорлды можно спокойно по .hlp-файлам от Windows 95 писать, все будет работать, это вам не линукс.
#82 #948318
#83 #948354
>>946603 (OP)
uint8_t num = 0xfe; //254
uint32_t ip_v4 = 0xc0a8d301; //192.168.211.1
((uint8_t *)&ip_v4)[1] = num;
Ананасы, что скажете о таком коде? Опасно делать такое приведение или нет? знаю, что можно всё сделать с помощью битовых масок, но такой код больше нравится
948409948413
#84 #948409
>>948354
Про union не слышал? Как только сокеты сделали уже стали юнионом куски ip устанавливать вместо твоей нечитаемой каши.
948413948440
#85 #948413
>>948354
>>948409
Только с endianness будет проблема, но в твоем примере тоже самое (читай, используй библиотечную функцию).
https://ideone.com/GnlMuk
#86 #948418
>>948245
Алё, болезный, 95-ый шиндовс не на NT-ядре. И Win32 API (который кстати появился раньше Win95) там кастрированый.
#87 #948440
>>948409
Да мне-то всего лишь один октет сменить надо, поэтому объявление юниона выглядело бы излишним (насколько я понял, что юнионы, что приведения в моем коде имеют абсолютно тот же смысл для компилятора).
#88 #948622
Актуально ли учить C в 2017? Какие перспективы трудоустройства?
#89 #948640
>>948622
ну если у тебя есть вышка по специальности, плюс несколько лет опыта работы по профилю то сможешь устроится на более-менее норм работу
но получать все равно будешь примерно на 30% явашника или вебмакаки на аналогичной позиции
вкатывальщикам же абсолютно нечего здесь делать
948866
#90 #948641
>>948622
Какие задачи тебе интересны? Микроконтроллеры и ембеддед? Машинное обучение, анализ данных? Энтерпрайз? Геймдев? Веб-приложения? Ещё дохуя всего не перечислил.
Отсюда и надо смотреть.
Если хочешь именно денег, то тут нехуй делать, имхо.
#91 #948676
>>948622
Си знать обязан каждый. Поэтому учи.

Изучи только Си - ты никому не нужен.
Чтобы устроиться ты должен освоить охеренный стек соопуствующих технологий. А какие именно технологии - зависит то задач и к чему у тебя лежит душа.
#92 #948710
6 Кб, 195x153
0 Кб, 95x12
#93 #948835
А можно как-то добиться нуля в таком выражении? У меня всё пидорасит из-за этого. Сигфолты доебали.
#94 #948866
>>948640

>вкатывальщикам


А вот щас обидно было. Где же скилзы прокачать, как не выслушивая говно от анонов с двача?
#95 #948876
>>948835
Ты в начальной школе учился? Откуда в твоем выражении может взяться ноль? Если хочешь сделать saturated subtraction - сделай явным образом, через if. Какого хуя ты unsigned для отрицательных чисел используешь?
949013949016
#96 #948905
>>948056

Нет, ты.
#97 #948908
>>948835

Какого ляда ты используешь разные флаги для одной и той же переменной? Более тоо, %u - это для unsigned int, а не для uint32_t, ты обосрался два раза.
949013
#98 #948947
>>948835
Неудачный выбор языка. Попробуй JavaScript, он тебе в самый раз подойдет.
30 Кб, 591x895
#99 #948948
>>947060
Лучше SDL ничего не придумано. Бери 2 версию, она и через OpenGL, и через Direct3D может 2D графику рисовать. Первая только программно.

>>947876
Кресты там абсолютно не нужны.
См. примеры: http://www.willusher.io/pages/sdl2/
Пикрелейтед выводит пустое черное окно.
948976
#100 #948976
>>948948
Придумано- sfml
950175
#101 #948984
>>948835
через if
949013949039
29 Кб, 335x320
21 Кб, 762x363
30 Кб, 314x339
18 Кб, 716x348
#102 #948985
Какого фига в первом случае (первые 2 пика) участок кода работает некорректно, а во втором случае (последние 2 пика) корректно? Это баг компилятора или я чего то не понимаю?
Компилятор TDM-GCC 4.9.2 64-bit Release
949069
#103 #949000
Долбёбина, выучи приоритеты.

(sch & sch1) == 0

И вообще так пишут только школьники

!(sch & sch1)

sch1 = sch1/2

sch1 >>= 1
949072
#104 #949013
>>948876

> Какого хуя ты unsigned для отрицательных чисел используешь?


На то там и unsigned, чтобы отрицательных чисел не было блджад.

>>948908
Да иди ты нахуй, %u в данном случае справляется нормально, это тестовый пример. В реальной жизни я выведу stdint'овыми писечками.

>>948984
Короче ясно.
#105 #949016
>>948876
И ещё:

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


Попробуй поприсваивать разные значения переменной с типом _Bool.
#106 #949020
>>948835

>А можно как-то добиться нуля в таком выражении?


что это значит?
949026
#107 #949026
>>949020
5 - 4 = 1
5 - 5 = 0
5 - 6 = -1 0
Все отрицательные к нулю сгонять, unsigned же.
949028949048
#108 #949028
>>949026
ну и трахайся тогда со старшим битом. можно ебучую макаронину заделать, или перевести старший бит в младший и обратится к массиву
uint32 a[2] = { -1, 0 } ; b &= a[ну ты понял] ;
949030
#109 #949030
>>949028
Блядь, да мне простой способ нужен а не этот пиздец, это базовые вещи, хочу логики.
949031
#110 #949031
>>949030
какие, нахуй, базовые вещи, где это видано чтобы отрицательные числа в ноль ухуячивались?
949032
#111 #949032
>>949031
А где это видано, чтобы unsigned содержал в себе отрицательные числа? И, опять же, посмотри на _Bool.
949070
#112 #949039
>>948984
А как конкретно должен выглядить if?

Так: if(var < 0) или так: if(var <= -1) не работает.
949049
#113 #949048
>>949026

>Все отрицательные к нулю сгонять



Ебать ты колхозник по образу мысли.
Лучше на выпасе, после обеда читни что-нибудь про кампуктеры.
949082
#114 #949049
>>949039
АХАХАХАХ
Съеби нахуй с борды!
Ахахах АХАХАХА
949082
#115 #949069
>>948985

С моей башни очень похоже на ундефайнд бехавиоур где-то в коде до этого.

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

if (printf("%i",sch&sch1, sch&sch1==0), sch&sch1==0)
949072
#116 #949070
>>949032

>А где это видано, чтобы unsigned содержал в себе отрицательные числа?



1) undefined behaviour
2) ты выводишь беззнаковое через знаковый флаг
949082949085
#117 #949072
>>949069

А, уже ответили. >>949000
#118 #949082
>>949048
>>949049
Хватит меня травить.

>>949070

> ты выводишь беззнаковое через знаковый флаг


Я и через %u выводил, там мусор. Вероятно и в сравнении в if'е тоже сравнивается мусор. Нет чтобы так сразу и написать, но хуй, обязательно надо "ГАГАГА НУ ТЫ ДАУН".
949094949095949105
#119 #949085
>>949070

>undefined behaviour


нет.
949095
#120 #949094
>>949082

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

Школьник-вкатыватель?
#121 #949095
>>949085

А что? implementation-defined?

>>949082

>Вероятно и в сравнении в if'е тоже сравнивается мусор.



Слабо положить разность в больший знаковый тип?
949103
#122 #949103
>>949095

>А что? implementation-defined?


и знаковый и не знаковый полностью идентичны.
949109
#123 #949105
>>949082

> там мусор


Ааа! Оно же просто по кругу, с конца идёт. Минуса-то нет. Теперь понятно.
949115
#124 #949109
>>949103

Покажи мне место в стандарте C, в котором это написано.
949112
#125 #949112
>>949109
ну, бинарно. значение может быть разное, в результате обеззначивания - 3 варианта, описаны в с99.
#126 #949115
>>949105
Ебать, да ты траллишь!

Съеби нахуй, школьник
949152
#127 #949152
>>949115
Третий раз за день меня называют школьником и просят съебать. Грустно всё это, я ведь просто немного туплю. Все тупят. Каждый может что-то забыть, не додуматься сразу. Сонливость, плохой день, просто не пошло, всякое бывает. Всеж мы люди, в конце-то концов, а вы так набрасываетесь на бедного ньюфага.Надеюсь это твои Семёны.
949173
#128 #949173
>>949152
Я сегодня из-за невнимательности где-то час не мог понять в чём проблема. Я делаю свой формат картинок чтобы не пользоваться чужим и непонятным png, но и чтобы не пользоваться громоздским bmp. И я забыл что вчера после сигнатуры начал добавлять 4 байта с комментарием, обозначающем версию. Но теперь понял и уже почти всё нормально.
949428
#129 #949428
>>949173
12 битные цвета?
#130 #949431
Кто придумал pass argument by value?
Какого хуя? Зачем оверхед этот нужен?
Надо на поинтерах все писать.
#131 #949433
>>949431

> оверхед


Поинтер - это 2-3 инструкции, аргумент из стека - одна.
949579
#132 #949562
>>949431

Аргумент из стека можно использовать (менять), а указатель надо
1) разыменовать
2) выделить место под переменную, на которую он указывает, если хочется менять её.
949579
#133 #949563
>>949431
3) если программа многопоточная, скопировать с тек всё равно придётся, так как может ёбнуть
949579
#134 #949579
>>949433
Асемблер не знаю, погуглю об этом.
>>949562
Обычно ведь не приходится менять, а если надо то есть пасс бай value.
>>949563
Ну да, надо учитывать все.
#135 #949587
>>949431

Дебил? Если мне не надо менять значение? Про сайд-эффекты слышал?

>Асемблер не знаю



Впрочем, все понятно.
949590
#136 #949590
>>949587
Если значение менять не надо то не меняй блядь, это же С.
А о лишних инструкциях хотел бы подробнее узнать, не гуглится, ну а структуры само собой лучше указателем передавать.
949606949635
#137 #949606
>>949590

> А о лишних инструкциях хотел бы подробнее узнать, не гуглится


gcc -S file.c или https://godbolt.org/
#138 #949635
>>949590

>Если значение менять не надо то не меняй блядь, это же С.



Ты реально собрался делать каждый раз локальную копию int/float/double-переменных, переданных в функцию?
949673
#139 #949673
>>949635
Нет конечно, можно и по значению передать.
2663 Кб, 264x240
#140 #949684
>>946603 (OP)
Пишу игровой движок с минимумом зависимостей (только OpenGL + WinAPI/Cococa/X-Window, только хардкор), базовый функционал уже готов, собираюсь переезжать на ГитХаб. Есть вопросы по стилю:
1) Зашкварно ли использование строк вместо enum-ов в качестве аргументов функций? Делаю API одновременно и для C, и для Lua, хотелось бы гомогенности в интерфейсах.
2) Зашкварно ли использование макросов-оберток над функциями?
Спасибо.
949693949778
#141 #949693
>>949684

> использование строк вместо enum-ов


Сложный вопрос. Аргументы против: с enum нет нормального контроля типов, но есть защита хотя бы от опечаток, со строками нет. Плюс тормоза при сравнении строк.

> Зашкварно ли использование макросов-оберток над функциями?


Нет, если макрос простой, ты можешь обосновать его существование, и можешь обосновать, почему это не static inline функция.
#142 #949709
На сколько я понял, в си нет типов данных занимающих меньше 8 бит т.е. 1 байта. Почему? В чём проблема запилить такой тип данных? Возможно ли это?
#143 #949736
>>949709
A L I G N M E N T
L
I
G
N
M
E
N
T
#144 #949743
>>949709
Есть битовые поля.
#145 #949778
>>949684

>OpenGL


>X


Так говно ж мамонта, ему уже сколько, 25 лет, пиши на Vulkan + Wayland diplay server protocol.
#146 #949781
>>949709
Минимально адресуемая единица - 1 байт. Хочешь ворочать отдельными битами - используй бытовые операции. Тчк.
#147 #949814

>В чём проблема запилить такой тип данных? Возможно ли это?



В архитектуре компьютера. Память адресуется побайтово.
949824
#148 #949817
>>949709

>В чём проблема запилить такой тип данных?



Нельзя будет адресовать его машинным адресом. Для адресации такого объекта придётся перепиливать указатели и каждый раз их менять перед обращением к ЦП - и они будут занимать больше места (3 бита на адресацию битов и ещё сколько-то байт на выравнивание, если ты не совсем поехал и не будешь паковать вообще все объекты с дробным размером).
#149 #949824
>>949814
Можно хоть триты запилить (в другом языке), но Сишечка создана так, чтобы быть максимально ближе к железу (при условии сохранения портабельности).
949830
#150 #949830
>>949824
Я бы посмотрел на Си в мире троичных ЭВМ.
949833
#151 #949833
>>949709
С текушими процессорами невозможно. Нет у каждого бита своего адреса, и не нужно это. Есть битовые поля.
>>949830
Троичных пока не изобрели.
949861949904
#152 #949861
>>949833

> Троичных пока не изобрели.


Ньюфаг штоле?
949862
#153 #949862
>>949861
хуефаг, если бы они были то их бы и использовали. Можно наколхозить с потерями производительности из обычных транзисторов, но смысла в этом нет. И сама информация может только в бинарном виде хранится, еще далеко до всего этого.
949878
#154 #949878
>>949862

> сама информация может только в бинарном виде хранится


Я же говорю, ньюфаг. Не позорься. Погугли про MLC флеш память чтоли, например.
949897
#155 #949897
>>949878

Либо ты можешь объяснить, где именно в MLC троичность, либо пиздобол.

Все существующие алгоритмы сделаны для двоичной логики. Их можно напрямую перенести на троичную без использования третьего состояния битов, но нахрен это?
950068
#156 #949904
>>949833
Сетунь жи есть, совок использовал. Но там троичность за счет специфичности элементной базы. Правда, она была дешевле и производительнее.
949925949931950173
#157 #949925
>>949904
Пидорахены не могут в продакшн, поэтому даже если идеи годные есть все по пизде идет. Давно пора сдать СНГ в рабство США.
#158 #949931
>>949904

>т.е. один трит записывался в два двоичных разряда, четвёртое состояние двух двоичных разрядов не использовалось.


Больше на обосрамс похоже.
949934
#159 #949934
>>949931
Работало же. Но долбоебы загубили дешевую массовую ЭВМ для предприятий.
#160 #949939
>>949934
Почитал статью о троичных ЭОМ, годнота оказывается. В 2007 последнюю сделали. Проблема то в том что эти элементы не сожмешь до 10нм, думаю начнут считать на молекулах и атомах тогда дойдет дело и до 10тичной системы счисления, если до 36ричной то идеально вообще.
Квантовые компьютеры уже пытаются делай айбиэм и дивейв, но кьюбиты это немного не то что нужно в повседневних задачах.
950064
#161 #950014
>>949934

>Работало же.



Даже если работало, получение троичной логики путём отрезания четвёртого состояния никаких преимуществ по сравнению с четверичной машиной не даёт.
24 Кб, 1424x418
#162 #950033
>>946603 (OP)
Сап, /пр, думаю тут есть те кто и на плюсах пишет, с другом один вариант, поделился кодом, только пишет он на плюсах, я же на простом си, проблема только с функцией, как преобразовать int&?
950077
#163 #950064
>>949939
Думаешь что самый умный и разбираешься в схемотехнике лучше разработчиков микросхем?
Даже если допустить, что в процессорах уперлись в двоичную логику не из соображений схемотехники, то как быть с другими цифровыми устройствами? Например АЦП, ЦАП, цифровые фильтры?

>>949934
Таким же образом можешь взять FPGA и сделать себе троичный компьютер. Цена вопроса - 100$-200$
#164 #950068
>>949897

> Либо ты можешь объяснить, где именно в MLC троичность, либо пиздобол.


Ты сказал про информацию в бинарном виде, я тебе показал реально существующий формат хранения, где более двух логических уровней, т.е., не бинарный вид. Где я пиздобол?
950113
#165 #950077
>>950033
int& - это ссылка, она же скрытый указатель на int. Все дереференсы внутри функции компилятор делает автоматически. Соответственно, тебе нужно заменить & на звездочку и проставить звездочки перед каждым использованием n1 и n2.
950427950436
#166 #950113
>>950068

Ты пиздабол в том, что уровней там 2^n, и никакой врождённой троичности там нет.
950120
#167 #950120
>>950113
Там 2^n, потому что это нужно для практического применения, и только. Если понадобится 3, будет 3, никаких принципиальных сложностей в этом нет.
950174
84 Кб, 474x342
#168 #950129
>>946603 (OP)
Блять помогите выделить 4 гигабайта памяти в программе, напишите мне простой хеллоу ворд с этим, я уже неделю ебусь, не могу выделить больше 1го. Самое ебаное что я не могу во-первых перемножить тысячи друг на друга, у меня получается ноь, НОЛЬ КАРЛ, а даже если написать одной цифрой размер то больше 1го гига система мне не выдаёт.
950141
#169 #950141
>>950129
У тебя 32-битная или 64-битная система? Ты не можешь записать цифру в 4 гига в 32-битной переменной, будет вот этот самый ноль. Ты не можешь выделить 4 гига непрерывным куском (без PAE) в 32-битном коде, тебе не хватит адресного пространства - оно всего 4 гига, и даже если предположить, что тебе доступны все 4, есть еще твоя программа, которой тоже занимает какие-то адреса, деля 4 гига на сколько-то до, и сколько-то после. На 64-битной системе память вполне выделится, если только у менеджера кучи (у реализации malloc()) нет каких-либо ограничений на размер объекта.
950176951887
#170 #950173
>>949904
>>949934
Сетунь и другие разработки закрыли из-за того что нельзя пиздить софт у пиндосов.
#171 #950174
>>950120

Там может храниться три "уровня" только в том случае, если ты выбросишь один "уровень". Никто в зздравом уме так делать не будет, это пустая трата ресурсов.

На кой ляд нужно получать троичную логику путём обрезания четверичной? КОМУ ЭТО НАДО?
950207
#172 #950175
>>948976

>C (чистый, pure


Читай внимательнее, тупой крестодаун.
#173 #950176
>>950141

Очень правильно подметил - без PAE. На 2000, емнип, можно выделять до 36 ГБ в 32-битной ОС.
28 Кб, 568x208
#174 #950207
>>950174

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


Нет. Допустим, у тебя есть минимальный сигнал 0 и максимальный n. Ты можешь разбить получившийся диапазон на любое количество поддиапазонов m. Центр каждого поддиапазона с некоторым допустимым отклонением и будет логическим уровнем. Смотри пик. Причем m не обязано быть степенью двойки или четным числом, можно сделать m=3, ничего никуда обрезать не нужно. Но с ростом m растут требования к точности, становится сложнее избегать неоднозначностей, уменьшается надежность, поэтому когда тебе нужны гарантии, MLC сосет у SLC.
950225
#175 #950225
>>950207

Спасибо, понял. Но то, что все кодеки, сжатия, кодировки и вообще всё работает с двоичными данными - это факт. Пока не будет разработан новый набор алгоритмов, которые работают быстрее на троичной логике (и они должны будут стать популярны), это всё нинужно.
#176 #950233
Списывал одну прогу. Списал, работает, но не так как надо. ДЕБАГ
@
@
@
Прошло 3 часа, это говно по прежнему не работает. Муками и болью я дошёл до одного цикла, в котором, предположительно, была неисправность. Смотрю на свой цикл, смотрю на цикл исходной проги. Мой цикл ничем не отличается от того цикла, которой я пизжу. Ладно, проблема не в нём. ДЕБАГ
@
@
@
Прошло ещё 3 часа, ничего не изменилось, это говно не работает. Код уже как-то не пишется, голова не думает, я просто лежу на столике. Волею судеб скопипастил цикл из исходной проги себе в код. Вывожу им и его функцией вывода — вроде всё норм. Но моя прога и та, которую я списываю выводят информацию несколько по разному. Предположил, что обсёр в моей функции вывода инфы. ДЕБАГ
@
@
@
Прошёл ещё час, я не знаю в чём проблема. Функция исправна, всё вроде должно быть норм. На мониторе два ёбаных цикла, я всё ещё на том же месте, хех... Смотрю на них — полностью одинаковые. Полностью. На хуй мне два цикла? Делать всё равно нечего, займусь чисткой кода. Стёр свой цикл, свою функцию вывода перенёс в скопипизженный цикл. Закрываю вим, компиляю. ДЕБА... Стоп, ЧЁ БЛЯДЬ? Всё работает как должно. Неисправность таки была в моём цикле! Но... Они же были полностью одинаковые. ПИЗДА

А самое обидное-то то, что я не могу посмотреть где в моём цикле был фейл, так как вим был закрыт и история проебланилась. Вот такая история. Исходная прога выводила информацию(изображение) в терминал, символами, а моя работала с пикселями на экране. Это так, уточнение.
950267
#177 #950267
>>950233
Ибо нехуй копипастить.
950284
#178 #950284
>>950267
Наоборот же. Написанный мной цикл не работал, а скопипасщенный работал идеально. Вывод: Всегда нужно копипастить.
45 Кб, 822x542
#179 #950427
>>950077
Если честно, я не понял, до этого не использовал int, можешь подсказать где конкретно ставить?
950428950433950440
#180 #950428
>>950427
Ебучая разметка.
Если честно, я не понял, до этого не использовал int*, можешь подсказать, где конкретно звездочки поставить?
950433
#181 #950433
>>950427
>>950428

Чтобы получить указатель на lvalue, поставь & перед lvalue.
950436
14 Кб, 676x398
#182 #950436
>>950433
Поставить &? Мне анон >>950077 про звездочки писал.
Мне просто нужно код из плюсов в обычный си перевести
950492
#183 #950440
>>950427
Ну почитай ты какую-нибудь книгу про указатели уже. Там всего два варианта. Или у тебя адрес в памяти. Или у тебя кампуктер читает значение, которое лежит по этому адресу памяти.
Угадай какое действие называется разыменование?
950463
#184 #950454
Блять, как я люблю передавать в функцию указатель на двухмерный массив. Постоянно переизобретать приходится.
#185 #950463
>>950440
Обязательно читать? Если я этот код в простому коду си приведу, то выполню 70% лабы, а я уже заебался их делать каждую неделю по новой программе, анон, помоги пожалуйста, просто покажи где мне * ставить.
#186 #950492
>>950436

void frag (int звёздочка fug) { ........ }

main()
{
int звёздочка fag;
int fig;

frag(fag);
frag(&fig);
}
950530
#187 #950530
>>950492
Дарю ЗВЕЗДОЧКИ всем ITT:
××××××××××××××××××××××××××××××××
××××××××××××××××××××××××××××××××
××××××××××××××××××××××××××××××××
××××××××××××××××××××××××××××××××
950536
#188 #950536
>>950530
Лучше бы пездочки подарил
190 Кб, 1920x1080
#189 #950715
>>947060-юзер опять вернулся

Поставил CodeBlocks, поставил на него CSFML (по этому тутору: http://www.sfml-dev.org/tutorials/2.4/start-cb.php)
Создал пустой проект, прилинковал хуйню по этому же тутору
В проект закинул этот код (http://transit.iut2.upmf-grenoble.fr/doc/libcsfml-doc/html/)
Не копмилился из-за функций со звуком, убрал, скомпилолось
И вот нихуя

Ругается на функцию sfRenderWindow_clear() перед компилом ее комментирую, ЧТОБЫХОТЬЧТОТО
После компила кода открывается ебанаяблять консоль и ошибка
950716950721
33 Кб, 732x353
#190 #950716
>>950715
Если раскомментировать
950719
#191 #950719
>>950716
а линковать?
950723
#192 #950721
>>950715
Библиотеки слинковал? Юзай SDL2 лучше
950723
26 Кб, 738x570
26 Кб, 738x570
25 Кб, 736x544
#193 #950723
>>950721
>>950719
Все, что делал в настройках проекта
Кстати, библиотеки с третьего пика он не находит, даже если указывать прямой адрес

A SDL2 годен для чистого С?
950730950732
#194 #950730
>>950723
Да, у SDL2 сишный апи.
950733
1465 Кб, Webm
#195 #950732
>>950723
Ясен хрен. Для Си и сделано.
950733
#196 #950733
>>950732
Так ты ответь, что у меня не так D:
У меня даже окно не открывается после компиляции

>>950730
Можешь подкинуть туторы по SDL2 именно на чистом Си?
Никак не могу найти, везде для С++
950737950740
#198 #950739
950742
2338 Кб, Webm
#199 #950740
>>950733
Алсо, попробовал сейчас этот SDL2 (даже на с++) и neehooя не работает
Либо я рукожоплю с линковкой (ничего в ней не понимаю, лол), либо это из-за х64-винды
950746950747950781
#200 #950742
>>950739
Так я про него и говорил, он для с++
950744950749
#201 #950744
>>950742
Лолшто? Для Си там.
950747
158 Кб, 1366x768
#202 #950746
950751
#203 #950747
>>950744
Энивей оно не запускается D:
Тут показал >>950740
#204 #950749
>>950742
Ну и да. я в глаза долблюсь и туториал для плюсов. В любом случае, в самом SDL2 ничего плюсоспецифичного нет, у меня на обычном Си нормально работает.
950751
1755 Кб, Webm
#205 #950751
>>950746
>>950749
Ну никак не получается, такое ощущение, что я где-то проебался, даже на плюсах не выходит
950758
#206 #950758
>>950751
Почему не #include "SDL2/SDL.h"?
А так в душе неебу, могу скинуть свой проект в аррхиве.
950762
#207 #950762
>>950758
Потому что прилинковал вплотную до заголовков
Да, будь добр, скинь
950767
#209 #950779
>>950767
Все просто, там используется 32-битный mingw, поэтому тебе надо 32-битную же SDL2. Помести из lib/x86 библиотеки SDL2.dll, SDL2_image.dll, libpng16-16.dll и zlib1.dll. Тогда появится окно с синим экраном.
#210 #950781
>>950740
Попробуй запустить собранный .exe без IDE, из Explorer. Попробуй докинуть DLL-ки в папку с .exe.
#211 #950782
>>950767
Хмм, а где брать SDL2_image.dll? И куда его потом класть?
950790
#212 #950790
>>950782
На сайте автора SDL, лучше скачать сразу полный комплект:
https://www.libsdl.org/projects/SDL_image/
https://www.libsdl.org/projects/SDL_mixer/
https://www.libsdl.org/projects/SDL_net/
https://www.libsdl.org/projects/SDL_ttf/
Класть в каталог с EXE-шником.
950795
70 Кб, 961x1037
#213 #950795
>>950790
Все равно блятьблятьблять
950802
3 Кб, 126x149
#214 #950802
>>950795
Ты точно из lib\x86 библиотеки положил? Такое с 64-битными будет выскакивать.
950803
#215 #950803
>>950802
Подтверждаю, закинул х32 - заработало в отдельной папке.
Автор проги
950804
143 Кб, 1368x770
#216 #950804
>>950803
Пик отклеился.
950812
#217 #950812
>>950804
Да в пизду, блять, снес сейчас всё нахой
Короче, вопрос открыт
Винда (х64), чистый Си, что юзать для 2д-графики и как, блять?
950817950829950872
45 Кб, 300x300
140 Кб, 1368x770
#218 #950817
950823
50 Кб, 587x378
#219 #950823
>>950817
Без SDL/SDL2, пожалуйста D:
#220 #950829
>>950812
ачко тваей мамашки юзай бббггеееее
950830
#221 #950830
>>950829
Что за бге? Или это типа бгееее? да блят гшщфцпждр45р
950833
sage #222 #950833
>>950830
Ебал тибя и весь твой род-урод в рот, хехе, малалетний лапоть. Иди нахуй, пицца остынет, хуйло ты.
#223 #950872
>>950812
Поставь нормальную студию вместо этого кривой недо-IDE с кривым портом GCC. В ней все успешно собирается.
950874950876
#224 #950874
>>950872
Не слушай этого пидора.
Только открытые инструменты, только голый make только молодось, только хардкор!
Можешь юзанть Эклипс, он гибче и удобнее, кодблок можешь юзать для создания скетчей или потестить чего
950879
22 Кб, 755x385
18 Кб, 755x385
18 Кб, 755x385
50 Кб, 1068x655
#225 #950876
>>950872
Какого хрена ей еще надо, непонятно.
951067951069951109
#226 #950879
>>950874
Пидор твой отец членодевка, а этот кодоблокс в очко себе засунь, хуесос.
make-то как раз все норм собирается
#227 #951067
>>950876

Стесняюсь спросить, а компилятор точно x86-64?
#228 #951069
>>950876

И инклуды ты куда дел? Они точно инклудятся?
#229 #951109
>>950876
Охуеваю с того что больше половины копротивляются с виндой, для прогинга она не годится.
951398951453
#230 #951398
>>951109
Это единственный неосилятор итт. Винда гораздо лучше годится для коденка - в винде есть нормальные отладчики и вижуал студия, а в линуксе только жцц.
951463951483
#231 #951453
>>951109
Зато для пердолинга годится. Как и С, азазахаха!
#232 #951463
>>951398

>винде есть нормальные отладчики


Единственный CDB и то в VS, в которой нет С11 и С99, а есть только кресты.
951467
#233 #951467
>>951463
Чего из C11 нет в VS?
951493
#234 #951483
>>951398
No, it's not.
GCC дает хороший вывод о ошибках, есть gdb, есть clang, есть хуева туча компиляторов, и все можно потестить с помошью make или баш скрипта.
clang часто вообще пишет как это фиксить.
В винде в отладчики не смотят, особенно утята, да и выдают выхлоп такой себе.
Ну и уебищный гуй размывает понятие о том как вообще устроен свой код.
951490951525
#235 #951490
>>951483

> есть gdb


Для тех, кто хочет потратить 5 минут на ввод команд (вместо того, чтобы быстро глазками посмотреть код прямо в студии или дизасм в каком-нибудь x64dbg) в винде есть windbg, есть упомянутый cdb, да и gdb никуда не делся. В общем, есть выбор, и есть отладчики с GUI.

> В винде в отладчики не смотят, особенно утята


В винде как раз можно без проблем что-нибудь отладить, как свое, так и чужое, с символами и без. В линуксе из-за отстутствия вменяемых отладчиков большинство отлаживается printf-ами и git bisect-ом. Мало кто умеет хорошо пользоваться gdb, еще меньше тех, кто может нормально отладить в gdb stripped бинарники.
951502
#236 #951493
>>951467
_Generic
951504951509
#237 #951502
>>951490

>GUI


вот понять не могу, нахуй вы в этот ред заходите?
951504
#238 #951504
>>951493
Ок, уел. Оно все равно практически неюзабельное. Но все нормальные фичи из C99/C11 давно есть.

>>951502
Мне Си нужен для решения конкретных практических задач, и мне похуй, где именно я буду их решать, лишь бы это было быстро и качественно. А тебе, видимо, только ради "мам, смотри, я пердолюсь в консольку! мам, я вывел хелловорлд! я какир, мам!".
951509
32 Кб, 650x422
sage #239 #951509
>>951493
>>951504
Впрочем, при желании VS компилирует и _Generic. Хоть и несколько охуевает от себя самой.
951808
#240 #951525
>>951483
Но самый главный плюс линукса как платформы для разработки в том, что там нет винды.

Нет, серьёзно, в винде я постоянно пердолюсь в какие-то базовые вещи, которые везде есть из коробки. Такое чувство, что ОС мешает мне пользоваться программами, попутно разваливаясь, в связи с чем возникает необходимость подпирать её довольно уродливыми костылями.
В 2017 году винда нужна исключительно как зависимость для кадов и игорей, для всего остально существует мак или прыщи. Тащемта что угодно можно поставить, только бы без винды. Это продукт созданный для заработка денег, из-за чего в него постоянно лепили (опять же) костыли, много костылей, только бы внешне он выглядело нормально, а что под капотом все срать хотели, это никому не нужно.
951533951555951886
#241 #951533
>>951525
Под линукс есть IDE для сишки, которые не выглядят всрато?
951535951767953024
#242 #951535
>>951533
Eclipse (бесплатно), CLion (платно).
sage #243 #951555
>>951525

> в винде я постоянно пердолюсь


Так осиль уже винду, перестань пердолиться и начни жить!
#244 #951748
Чем можно измерить время работы программ (время очень малое)?
951797951820951877
#245 #951767
>>951533
QtCreator, CLion.
Все остальное можно даже не рассматривать
951883
#246 #951797
>>951748
Очень малое время можно измерить в очень малых единицах измерения времени.
951804
#247 #951804
>>951797
Sloved by /pr/
#248 #951808
>>951509
Ну ты видимо используешь clang/C2, а я не хочу его использовать.
sage #249 #951820
>>951748
Миллисекундами. Запускай много раз, бери минимальное или общее.
951822
#250 #951822
>>951820
Не, зачем вы так меня тралити?
#252 #951877
>>951748
time laba3
#253 #951883
>>951767
emacs.
951885
#254 #951885
>>951883
не пытайся научить обезьяну разговаривать, будь выше этого.
951893
#255 #951886
>>951525
Реклама в проводнике и дубликаты программ наше все. Кады и триде вообще давно на линукс перекатилось.
#256 #951887
>>950141
64, но щас поглядел битность у самой программы 64
#257 #951889
>>951830
ничего нового.
Dmitry #258 #951893
>>951885
Антохи что лучше Cmake или Qmake для Qt5 параши разумеется?
951894
Dmitry #259 #951894
>>951893
Надо чтобы работало онли фор Linux.
951895
#260 #951895
>>951894
Уебывай в крестотред.
951896
Dmitry #261 #951896
>>951895
Можно же и на C писать.
951897
#262 #951897
>>951896
Нет, под Qt нельзя писать на Си. Вали.
951901
Dmitry #263 #951901
>>951897
А под GTK3?
146 Кб, 1366x768
#264 #951990
почему нижний выдает ошибку сегментации?
952040952091
#265 #952040
>>951990
Ты бы еще серым по белому код рисовал."string literal" - это не char ∗, а const char ∗. В верхнем варианте ты создаешь массив s1 и копируешь в него строку (при инициализации), поэтому все ок. В нижнем варианте ты ссылаешься на сам литерал, strtok пытается его модифицировать, а компилятор вполне мог сделать его ридонли.
Dmitry #266 #952063
Аноны а зачем clang and gcc на плюсах пишут? Почему говорили что зря так делали? И действительно ли надо компилятору ООП и темплейты и прочая хрень? Теперь если gcc без поддержки плюсов собирать то он потом и сам себя не соберет.
952087
#267 #952087
>>952063
Не стоит вскрывать эту тему.
#268 #952091
>>951990
спс. а можно как нибудь указать что он не ридонли?
952207952214
#269 #952207
>>952091
Модификация строкового литерала - undefined behavior, так что просто не нужно этого делать. Видишь строку в кавычках, подразумеваешь char const * const.
#270 #952214
>>952091
объявляй в глобальной видимости. s[] = "sadsadasd".

компилятор же не будет дублировать строчку?
952345
68 Кб, 800x628
#271 #952276
Раз уж тут за OpenGL начали пояснять, то продублирую свой вопрос из /gd/:
Есть вопрос по блендингу - появилась какая-то непонятная для меня вещь:
Сначала включаю glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA), рендерю свет. Потом - glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA) и рендерю соника - но вокруг него вдруг появляется какая-то левая рамка, причем разная для разных изображений.
Знаю, что двухмерный свет надо делать по-другому - сначала рендерятся предметы, затем отдельный черный фреймбуфер для сплошной тени, потом из него вырезаются кружки света, и уже потом он рендерится поверх всего остального. Но все равно интересно, отчего такое происходит.
Хоть в какую сторону копать?
#272 #952345
>>952214
Только не обязательно глобальную переменную городить: static char s1[] = "foo"; вполне себе дает модифицируемую строчку без накладных расходов на инициализацию.
#273 #952631
Поясните по хардкору, каким образом функция realloc выбирает ячейки? Или же ячейки выбирают тебя?
952660
#274 #952660
>>952631
В простейшем случае у менеджера кучи есть список блоков (адрес, размер, статус), причем свободные блоки склеиваются. Если следующий за твоим блок свободен, и он достаточного размера, realloc() просто отрезает от него нужный кусок в пользу твоего. Если нет, она идет по списку и ищет (первый попавшийся или, например, наимешьший) подходящий свободный блок. Обычно списков несколько, а дескрипторы блоков более сложные. Если ты не об этом, тогда уточни вопрос.
#275 #953002
Когда я программировал на линуксе в gedit с помощью кланга и консолечки я мог просто в папку с исходным файлом добавлять библиотеки, которые мне нужны и подключать их. А когда я начал в виндовс программировать, с помощью DecCpp но на си я не могу так сделать. Надо какие то либы подключать или что там. Так как сделать так чтобы я библиотеки (.h файлы), которые будут находится в папке с проектом мог подключать?
953009
#276 #953003
Раз уж тут за OpenGL начали пояснять, то продублирую свой вопрос из /gd/:
Как загрузить текстуру так, чтобы загружать не из отдельного файла, а из кода? То есть я напишу хекс код картинки и она будет загружена в текстуру? как это сделать?
953009953024
sage #277 #953009
>>953002
Идешь в свойства проекта, указываешь директории с инклудами и либами. Инклуды инклудишь через #include <file.h>, дополнительные либы указываешь в поле для дополнительных либ.

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


#include "file.h"

>>953003

> То есть я напишу хекс код картинки и она будет загружена в текстуру?


Абсолютно так же, как и из файла, через glTexImage2D создается текстура, в последнем параметре адрес твоего массива с картинкой. Если нужно конкретнее, пости компилирующийся хелловорлд.
953355
#278 #953024
>>951533

Угу, Xcode.

>>953003

Очень просто. Картинка у тебя УЖЕ в памяти (в виде массива unsigned char, но могут и иных типов) просто кидаешь её указатель в OpenGL. Правда, ещё нужно её параметры правильно. Размеры, глубину пикселей, их тип (RGB, RGBA и прочие).

Пример:

float pixels[] = {
0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f
};
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 2, 2, 0, GL_RGB, GL_FLOAT, pixels);

Хуле не ясного?
953355
29 Кб, 791x789
#279 #953355
>>953024
>>953009
Спасибо, теперь у меня всё почти получилось.
1545 Кб, 738x283
#280 #954309
>>946603 (OP)
Сап ананасы, вкатился нуфаг. Дали задание:найти количество отрицательных элементов массива и вставить найденное кол-во перед первым в массиве отрицательным числом. Я написал какую-то поеботу, которая ищет сами элементы, но не могу додуматься, как вывести их кол-во. Прошу подсказки, пик прилагаю.
954351
#281 #954351
>>954309
Заведи счетчик, положи в него 0, а когда найдешь отрицательный элемент, прибавь к счетчику 1. После цикла выведи счетчик.
954406
#282 #954352
Чет я не понял, кланг прямо из коробки в 2017 еще установить нельзя что-ли, собирать обязательно? Попытался хеловорд запустить с него, а он полез куда-то в инклуды визуал студии, что это было?
954372
#283 #954372
>>954352
Ну вроде работает, но все равно не понимаю, нахуя он лезет куда-то в тулкиты которые вместе с визуалкой установились?
#284 #954406
>>954351
Что за счетчик? Пытался нагуглить, но нашёл таковой только в c++.
954444
79 Кб, 969x750
#285 #954444
>>954406
Всё, вроде бы понял, даже получилось. Но как сделать элегантней, под один цикл не получается вывести?
954450
#286 #954450
>>954444
if (условие) {
выражение1;
выражение 2;
нутыпони;
}
954502
#287 #954502
>>954450
Ок, уяснил. Еще вопрос, написано сделать "Вставка найденного количества перед первым в массиве отрицательным числом ", что это значит?
954509
55 Кб, 927x536
#288 #954509
>>954502
UPD: Т.е. мне нужно вывести все элементы массива и как-то пропихнуть перед первым отрицательным элементом моё число S. Как это сделать?
954515
#289 #954515
>>954509
тебе нужен динамический массив.
954519
#290 #954519
>>954515
хотя... проще будет создать еще один массив размером n+1 и последовательно копировать данные как тебе надо
#291 #954628
Есть динамический массив. Я могу из него вырезать в центре кусок, прикрутить в конце другой, при этом не проебав все данные?
954852
sage #292 #954852
>>954628
ты совсем плох.
954863
#293 #954863
>>954852
Перефразирую. Через realloc() не проебутся данные в массиыве, если я его увеличиваю/уменьшаю?
954866954871
#295 #954871
>>954863
Если realloc() увеличивает размер объекта, то сохраняется (копируется) то, что было, а остальное тебе нужно инициализировать самому. Если размер объекта уменьшается, данные обрежутся. И не забывай про то, что адрес объекта смениться может.
954874
#296 #954874
>>954871
Вот, именно то. Т.е при уменьшении размера данные в начале не повредит? Это именно то,что я и хотел, спасибо.
#297 #956169
То, что scanf %d будет возвращать ноль, если получит только символы и будет возвращать -INT_MAX, если получит число вне int, это твёрдо и чётко, можно проверки делать, опираясь на это?
956175
#298 #956175
>>956169
Да. Только не -INT_MAX, а EOF. Но лучше парсить ручками через strtol и прочие strto*. scanf подходит только для лаб.
956201956213
8 Кб, 600x223
#299 #956201
>>956175
Мне просто надо считать число, а введена может быть любая белиберда.
Я не понимаю, почему происходит пикрил.
Сначала scanf грит, что всё норм, возвращает 1 и число 23, хотя там "23у35".
А потом она начинает без ожидания ввода считывать что попало, у меня так при проверках бесконечно циклится сообщение, что введено не то.
956204
#300 #956204
>>956201
Т.е. если я пишу
while (scanf("%d", &c)!=1)
{
printf ("Eshe raz, plz\n");
}
то у меня просто циклится сообщение printf.
956209
#301 #956209
>>956204

> то у меня просто циклится сообщение printf.


Потому что scanf не с чем конец строки (для нее это whitespace) матчить - добавь пробел или \n (похуй) в шаблон scanf. А лучше не ебать себе мозг хуйней, сдизайненной для студентов и рептилоидов, и явно сделать fgets и strtol, проверяя ошибки.
#302 #956213
>>956175

>scanf подходит только для лаб


sscanf'ом так удобно из строки достать значения, в одну строчку. Через strtol надо городить огород из условий. У меня иногда возникает необходимость распарсить текст на няшной, есть какие-то готовые инструменты, чтобы самому не заниматься велосипедостроением? Пытался mpc использовать для этого, но так и не смог разобраться, вроде похоже на скрипт для flex, но не то. Можно использовать flex/bison для сложных случаев, но для более простого хотелось бы что-то попроще.
16 Кб, 644x193
#303 #956277
Почему говорит что возвращаемый тип неправильный?
956286956295
#304 #956286
>>956277
Кто говорит? Как говорит?
48 Кб, 629x410
#305 #956295
>>956277
У меня GCC 5.3.0 собирается это без ошибок и предупреждений.
956302956468
#306 #956302
>>956295
Может быть, он stdlib забыл подключить, хуй знает.
2 Кб, 800x93
#307 #956468
>>956295
GCC 5.4.1

Смотрю у тебя тоже Geany который умер и не развивается из-за всяких модных саблаймов
956474
#308 #956474
>>956468
Блять, скинь полный компилирующийся код на ideone, зачем нам твои скриншоты?
956478
#309 #956478
>>956474
Хм, Clang 4.0 ничего не говорит http://ideone.com/kYgRPy а GCC 6.3 вообще не компилится http://ideone.com/aHWlYP
Значит проблема в последних версиях GCC 5 и 6
956480
#310 #956480
>>956478
1) Huita - тайпдеф для безымянной структуры.
2) Функция huita_new возвращает указатель на struct Huita.
3) А по факту возвращает указатель на безымянную структуру типа Huita.
Конечно же, компилятор ругается. Если ты хочешь использовать struct- и typedef- имена взаимозаменяемо, сделай typedef struct Huita { ... } Huita;
тулкит-кун #311 #956737
Давно не посещал этот тред, но думаю несколько Анонов меня должны помнить.
Я не забросил и до сих пор пишу свой GUI-тулкит. Раньше я делал GTK-подобной тулкит, с объектами, но относительно недавно в глаза бросился нукляр и я захотел запилить что-то вроде него, но не такое глючное и более подходящее для моих задач. Нукляр это функциональщина, если кто не знает. while(true){ if(create_button() == 1) printf("press"); } Никаких объектов.
Всё шло тащемта хорошо, но возникла необходимость кэшировать результаты вычислений, чтобы мой высер не тупил как чёрт знает что.
Простой пример: Есть виджет "button", кнопка. Кнопка может принимать множество состояний — нажатие, отжатие, align, обычное состояние etc. Допустим тулкит рисует первый кадр в котором кнопка находится в обычном своём состоянии. Тулкит трудился, считал, срал на битмап и вот она кнопочка. Заебись.
Второй кадр. По хорошему стоит узнать, не изменилось ли состояние кнопки, и если не изменилось, то просто скопировать часть готового битмапа в новый кадр. На словах это просто, но как сделать что-то подобное без объектов непонятно. У меня ведь нет никакой информации о том, что было с этой, конкретной кнопкой в прошлом кадре. Ну и с чем мне сравнивать?
Если бы у меня было что-то вроде GTK, с объектами, то всё было бы действительно просто. В функцию отрисовки кнопки прилетает указатель на объект button, в котором хранится вся информация именно о этой кнопке, о том, что было с ней в предыдущем кадре, о том, что с ней сейчас, и на основе этого легко понять нужно ли брать готовую картинку из предыдущего кадра или нарисовать по новой. ИРЛ всё совершенно иначе, всё вышесказанное простое упрощение, главное что смысл понятен. А если объектов нет, то как?

*Надеюсь этот текст хоть кто-то понял. Тут вроде были понимающие в GTK люди, да и нукляроёбы тоже были.%%

Алсо, почему нукляр взлетел? Он же ничего не кэширует и рисует с нуля каждый кадр, это долго. Я понимаю, что его в основном использует с OpenGL и т.п. штуками, но блядь, всё равно не круто.
тулкит-кун #311 #956737
Давно не посещал этот тред, но думаю несколько Анонов меня должны помнить.
Я не забросил и до сих пор пишу свой GUI-тулкит. Раньше я делал GTK-подобной тулкит, с объектами, но относительно недавно в глаза бросился нукляр и я захотел запилить что-то вроде него, но не такое глючное и более подходящее для моих задач. Нукляр это функциональщина, если кто не знает. while(true){ if(create_button() == 1) printf("press"); } Никаких объектов.
Всё шло тащемта хорошо, но возникла необходимость кэшировать результаты вычислений, чтобы мой высер не тупил как чёрт знает что.
Простой пример: Есть виджет "button", кнопка. Кнопка может принимать множество состояний — нажатие, отжатие, align, обычное состояние etc. Допустим тулкит рисует первый кадр в котором кнопка находится в обычном своём состоянии. Тулкит трудился, считал, срал на битмап и вот она кнопочка. Заебись.
Второй кадр. По хорошему стоит узнать, не изменилось ли состояние кнопки, и если не изменилось, то просто скопировать часть готового битмапа в новый кадр. На словах это просто, но как сделать что-то подобное без объектов непонятно. У меня ведь нет никакой информации о том, что было с этой, конкретной кнопкой в прошлом кадре. Ну и с чем мне сравнивать?
Если бы у меня было что-то вроде GTK, с объектами, то всё было бы действительно просто. В функцию отрисовки кнопки прилетает указатель на объект button, в котором хранится вся информация именно о этой кнопке, о том, что было с ней в предыдущем кадре, о том, что с ней сейчас, и на основе этого легко понять нужно ли брать готовую картинку из предыдущего кадра или нарисовать по новой. ИРЛ всё совершенно иначе, всё вышесказанное простое упрощение, главное что смысл понятен. А если объектов нет, то как?

*Надеюсь этот текст хоть кто-то понял. Тут вроде были понимающие в GTK люди, да и нукляроёбы тоже были.%%

Алсо, почему нукляр взлетел? Он же ничего не кэширует и рисует с нуля каждый кадр, это долго. Я понимаю, что его в основном использует с OpenGL и т.п. штуками, но блядь, всё равно не круто.
956742956761
35 Кб, 450x360
8 Кб, 640x480
5 Кб, 487x420
3 Кб, 681x462
#312 #956742
>>956737

>Надеюсь этот текст хоть кто-то понял. Тут вроде были понимающие в GTK люди, да и нукляроёбы тоже были.


Тут есть даже я, разобравший Иксы и Presentation Manager и заново их собравший, как Никола Тесла собирал и разбирал электромоторы в уме, и так несколько раз. Очень просто они устроены, не нужны там некокие «объекты-субъекты», каждое окно и каждое поле ввода получает сообщение "paint" через обыкновенную очередь сообщений (не сокет и не пайп, они там тоже нинужны) и вызывает функции вроде «ставь точку вон туда» с координатами, и только-то.

Ты бы лучше вот подумал, на кой хер нам ещё один новый GUI-тулкит и куда нам его, солить?.. Их десятки, а будут сотни, и всё, что тут можнозделоть — дать им растровую сетку (по одной для каждого окна верхнего уровня) и пусть на ней и рисуют.
956752957600957896
#313 #956752
>>956742

> каждое окно и каждое поле ввода получает сообщение "paint" через обыкновенную очередь сообщений (не сокет и не пайп, они там тоже нинужны) и вызывает функции вроде «ставь точку вон туда» с координатами, и только-то.


Стоп-стоп-стоп. Либо я тебя неправильно понял, либо ты описал функцию отрисовки.
У меня есть линия. Горизонтальная. На 10 пикселей. Чтобы такую нарисовать нужно поставить 10 точек, 10 итераций цикла. Можно конечно 120 раз в секунду ебашить по 10 итераций, но линия-то как была, так и есть, ничего не меняется. В таком случае гораздо производительнее, условно говоря, вместо 10 итераций выполнять один memcpy. Но в моей ситуации эта линия может измениться, цвет поменять, ещё что, и memcpy тут не обойтись, нужно заново пройти 10 итераций и нарисовать линию запрошенную изменениями, и потом опять до момента изменения копировать память. Проблема тут в том, что без объектов тулкит не может узнать поменялась ли линия, т.к. он не знает что было с ней в прошлом кадре.

Если я тебя просто неправильно понял, то опиши свою мысль нагляднее, пожалуйста.

> на кой хер нам


> нам


Мне. Я хочу написать то, на чём мне будет удобно писать свои хотелки. GTK говно, нукляр баговый и не для моих целей. В остальном у нас есть груда крестоговна и различные обвязки.
956762
#314 #956761
>>956737

> А если объектов нет, то как?


Создавай глобальную переменную для каждой кнопки и там храни.
956763956769
4 Кб, 939x255
45 Кб, 500x393
#315 #956762
>>956752

>Либо я тебя неправильно понял, либо ты описал функцию отрисовки.


Попробую ещё раз на примере сетевых протоколов, где несколько слоёв.
1. Драйвер видеокарты: это он переключает кадры, это он работает с видеобуфером, о чём никто кроме него даже и не знает.
2. Оконный менеджер: он создаёт области разделяемой памяти (они же растровые сетки) и выдаёт их окнам по запросу. Важно, что он никогда не ждёт никого из тех, кому выдаёт разделяемую память, вместо этого они присылают ему запросы, а он отвечает на них, и иногда (возможно) бросает на верхний уровень краткие уведомления — но никогда и никого не ждёт, чтобы не зависнуть вместе с какой-нибудь Мозиллой-Тормозиллой. Думаю, что книги Таненбаума тут помогли бы, но в общем, эти возможности есть в современных ОС уже наверное во всех.
3. Служебный поток в каждой проге: отправляет "send"-запросы на низкий уровень, получает от него растровые сетки и возвращает их назад — и вопреки стереотипам, это работает ни разу не медленно, поскольку на отображение страниц памяти расходуется очень немного времени и тактов процессора.
4. Поток отрисовки, он же поток обработки сообщений: у него своя очередь, куда ему последовательно ставят задания и уведомления о том, что произошло, будь то нажатие на клавишу или сигнал от таймера или сообщение "paint". Он ставит точки на растровой сетке и ничего даже о ней не знает. Зато у него есть шрифты, цветовая палитра (тут сто миллионов цветов, если мало, добавим ещё), штриховки-закраски, границы отсечения, границы им нарисованного и т.д.д.д.д.д.
5. Тулкит, фреймвор, C++ и браузер. Ещё встроенная СУБД с хранимыми поцедурами и куча ключевых слов, "лет", "муд", "фн", "твюэйт", "патирнь", "салюжяньсь".
6. Скриптовый езыг поверх всего етово.
7. Самый последний XML.
8. Таблица стилей.
9..........
10.....
11...
...

>У меня есть линия. Горизонтальная. На 10 пикселей. Чтобы такую нарисовать нужно поставить 10 точек, 10 итераций цикла.


Не ставь точку, если на растровой сетке она уже стоит, не терзай кеш процессора.

>Можно конечно 120 раз в секунду ебашить по 10 итераций, но линия-то как была, так и есть, ничего не меняется.


Этим пусть занимаетьса драйвер видеокарты, сколько там у него кадров-в-секунду.

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


Вне видеодрайвера? Ни разу не будет выполнено ни одной memcpy.

>Но в моей ситуации эта линия может измениться, цвет поменять, ещё что,


Тогда у тебя поток отрисовки, он же поток обработки сообщения, вытащит из очереди сообщение "paint" и начнёт рисовать.

>и memcpy тут не обойтись, нужно заново пройти 10 итераций и нарисовать линию запрошенную изменениями,


Ну и что, поставь границы отсечения и не будет он рисовать за ними.

>и потом опять до момента изменения копировать память.


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

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


Объекты вам принёс великий маг и чародей Бэльгэйц чтоб вы сидели тихо и не рыпались и не смели никуда мигрировать с маздаЯ.
Объекты под люнюфьсь — это вообще такой трешак, что ни в сказске скозать ни пером описать, вот правду говорят, у семи нянек дитя без глазу.

>Если я тебя просто неправильно понял, то опиши свою мысль нагляднее, пожалуйста.


БРОСЬ КАКУ!!!

IRL, классы объектов — это всего лишь правила доступа к данным, то есть контракты только и всего.
4 Кб, 939x255
45 Кб, 500x393
#315 #956762
>>956752

>Либо я тебя неправильно понял, либо ты описал функцию отрисовки.


Попробую ещё раз на примере сетевых протоколов, где несколько слоёв.
1. Драйвер видеокарты: это он переключает кадры, это он работает с видеобуфером, о чём никто кроме него даже и не знает.
2. Оконный менеджер: он создаёт области разделяемой памяти (они же растровые сетки) и выдаёт их окнам по запросу. Важно, что он никогда не ждёт никого из тех, кому выдаёт разделяемую память, вместо этого они присылают ему запросы, а он отвечает на них, и иногда (возможно) бросает на верхний уровень краткие уведомления — но никогда и никого не ждёт, чтобы не зависнуть вместе с какой-нибудь Мозиллой-Тормозиллой. Думаю, что книги Таненбаума тут помогли бы, но в общем, эти возможности есть в современных ОС уже наверное во всех.
3. Служебный поток в каждой проге: отправляет "send"-запросы на низкий уровень, получает от него растровые сетки и возвращает их назад — и вопреки стереотипам, это работает ни разу не медленно, поскольку на отображение страниц памяти расходуется очень немного времени и тактов процессора.
4. Поток отрисовки, он же поток обработки сообщений: у него своя очередь, куда ему последовательно ставят задания и уведомления о том, что произошло, будь то нажатие на клавишу или сигнал от таймера или сообщение "paint". Он ставит точки на растровой сетке и ничего даже о ней не знает. Зато у него есть шрифты, цветовая палитра (тут сто миллионов цветов, если мало, добавим ещё), штриховки-закраски, границы отсечения, границы им нарисованного и т.д.д.д.д.д.
5. Тулкит, фреймвор, C++ и браузер. Ещё встроенная СУБД с хранимыми поцедурами и куча ключевых слов, "лет", "муд", "фн", "твюэйт", "патирнь", "салюжяньсь".
6. Скриптовый езыг поверх всего етово.
7. Самый последний XML.
8. Таблица стилей.
9..........
10.....
11...
...

>У меня есть линия. Горизонтальная. На 10 пикселей. Чтобы такую нарисовать нужно поставить 10 точек, 10 итераций цикла.


Не ставь точку, если на растровой сетке она уже стоит, не терзай кеш процессора.

>Можно конечно 120 раз в секунду ебашить по 10 итераций, но линия-то как была, так и есть, ничего не меняется.


Этим пусть занимаетьса драйвер видеокарты, сколько там у него кадров-в-секунду.

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


Вне видеодрайвера? Ни разу не будет выполнено ни одной memcpy.

>Но в моей ситуации эта линия может измениться, цвет поменять, ещё что,


Тогда у тебя поток отрисовки, он же поток обработки сообщения, вытащит из очереди сообщение "paint" и начнёт рисовать.

>и memcpy тут не обойтись, нужно заново пройти 10 итераций и нарисовать линию запрошенную изменениями,


Ну и что, поставь границы отсечения и не будет он рисовать за ними.

>и потом опять до момента изменения копировать память.


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

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


Объекты вам принёс великий маг и чародей Бэльгэйц чтоб вы сидели тихо и не рыпались и не смели никуда мигрировать с маздаЯ.
Объекты под люнюфьсь — это вообще такой трешак, что ни в сказске скозать ни пером описать, вот правду говорят, у семи нянек дитя без глазу.

>Если я тебя просто неправильно понял, то опиши свою мысль нагляднее, пожалуйста.


БРОСЬ КАКУ!!!

IRL, классы объектов — это всего лишь правила доступа к данным, то есть контракты только и всего.
956769
#316 #956763
>>956761
Это называется window handle.
#317 #956769
>>956761
Не выйдет. Мой тулкит работает следующим образом. Есть цикл и в нём весь рантайм(это в пользовательской программе):
int main(void)
{
while(true)
{
draw_button("button1");
draw_button("button2");
draw_button("button3");
}
}
Довольно грубый пример. И вот я записываю каждую кнопку в свою глобальную переменную и ориентируюсь на неё. Круто? Да. Но крутость продолжается до тех пор, пока в цикл кто-то не добавит какое-нибудь условие вроде:
...
if(shit == 1) {
draw_button("button2.5");
}
...
В кишках тулкита всё пойдёт по пизде, т.к. всегда летели три кнопки, а сейчас внезапно четвёртая пришла. Что с ней делать? Откуда она? Я ведь не могу контролировать цикл вне своего тулкита.
Если прикрутить сюда объекты, то это тоже ничего не решит, всё в любом случае будет пидорасить. А для того, чтобы не пидорасило, нужно чтобы в пользовательской проге всё определялось один раз и после всем заправлял тулкит, как в GTK:
int main(void)
{
draw_button("button1");
draw_button("button2");
draw_button("button3");
toolkit_main_loop();
}
Привет каллбекам и прочей параше.

>>956762
Ты описываешь какую-то низкоуровщину, с которой мне и работать не придётся, а я не могу тебя понять, связи не вижу.

Всё что у меня есть это bitpixmap так же они называются?. Указатель на память, куда я пишу данные, из которых образуются пиксели. Для простоты создана функция draw_point(x, y).

> Не ставь точку, если на растровой сетке она уже стоит


У нас недопонимание друг друга. Каждый кадр это:
- Очистка пиксмапа
- Отрисовка чего-либо на него
- Скармливание пиксмапа бэкенду отрисовки (иксы/валеный/etc)
А потом заново. В такой ситуации место установки следующей точки всегда равняется нулю, там ничего нет. А если я не буду очищать пиксам, то при анимации виджетов будут артефакты. В любом случае нужно всё тереть.

> Этим пусть занимаетьса драйвер видеокарты


> Вне видеодрайвера?


НЕТУ ДРАЙВЕРА ВИДЕОКАРТЫ
Есть пиксмап и всё.

> Ну и что, поставь границы отсечения и не будет он рисовать за ними.


Я... Наверно... Другое имел в виду. Голова уже болеть начинает.

Слушай. Я, бля, нихуя тебя не понимаю. Я тут велосипедирую графический тулкит а не графический сервер. Возможно всем этим ты хотел донести до меня великую истину, но я её не уловил. Можно толще? Вот пиксмап у меня есть. Всё. Больше ничего нет. Аще.
#317 #956769
>>956761
Не выйдет. Мой тулкит работает следующим образом. Есть цикл и в нём весь рантайм(это в пользовательской программе):
int main(void)
{
while(true)
{
draw_button("button1");
draw_button("button2");
draw_button("button3");
}
}
Довольно грубый пример. И вот я записываю каждую кнопку в свою глобальную переменную и ориентируюсь на неё. Круто? Да. Но крутость продолжается до тех пор, пока в цикл кто-то не добавит какое-нибудь условие вроде:
...
if(shit == 1) {
draw_button("button2.5");
}
...
В кишках тулкита всё пойдёт по пизде, т.к. всегда летели три кнопки, а сейчас внезапно четвёртая пришла. Что с ней делать? Откуда она? Я ведь не могу контролировать цикл вне своего тулкита.
Если прикрутить сюда объекты, то это тоже ничего не решит, всё в любом случае будет пидорасить. А для того, чтобы не пидорасило, нужно чтобы в пользовательской проге всё определялось один раз и после всем заправлял тулкит, как в GTK:
int main(void)
{
draw_button("button1");
draw_button("button2");
draw_button("button3");
toolkit_main_loop();
}
Привет каллбекам и прочей параше.

>>956762
Ты описываешь какую-то низкоуровщину, с которой мне и работать не придётся, а я не могу тебя понять, связи не вижу.

Всё что у меня есть это bitpixmap так же они называются?. Указатель на память, куда я пишу данные, из которых образуются пиксели. Для простоты создана функция draw_point(x, y).

> Не ставь точку, если на растровой сетке она уже стоит


У нас недопонимание друг друга. Каждый кадр это:
- Очистка пиксмапа
- Отрисовка чего-либо на него
- Скармливание пиксмапа бэкенду отрисовки (иксы/валеный/etc)
А потом заново. В такой ситуации место установки следующей точки всегда равняется нулю, там ничего нет. А если я не буду очищать пиксам, то при анимации виджетов будут артефакты. В любом случае нужно всё тереть.

> Этим пусть занимаетьса драйвер видеокарты


> Вне видеодрайвера?


НЕТУ ДРАЙВЕРА ВИДЕОКАРТЫ
Есть пиксмап и всё.

> Ну и что, поставь границы отсечения и не будет он рисовать за ними.


Я... Наверно... Другое имел в виду. Голова уже болеть начинает.

Слушай. Я, бля, нихуя тебя не понимаю. Я тут велосипедирую графический тулкит а не графический сервер. Возможно всем этим ты хотел донести до меня великую истину, но я её не уловил. Можно толще? Вот пиксмап у меня есть. Всё. Больше ничего нет. Аще.
956774956783
#318 #956774
>>956769

>Каждый кадр это:


>Очистка пиксмапа


Как я и думал, в условиях "свободного ПО" дитя оказывается без глазу.

>Вот пиксмап у меня есть. Всё. Больше ничего нет. Аще.


Там должны быть границы, регионы, прямоугольники и тому подобное.

То есть, каждому окну рамки нужны:
- Регион, где разрешается рисовать (внутренние границы отсечения)
- Регион, где рисовать надо (например, область окна, требующая обновления)
- Регион, где рисовать не следует (например, области, перекрытие другими окнами)
- Прямоугольник, где разрешается рисовать (внешние границы области рисования)
И т.д.

Возможно, все они могут быть сведены к двум прямоугольникам и регионам: "прямоугольник, задающий область рисования" и "регион, задающий пробелы в области рисования".

И ещё надо запоминать и выдавать на уровень ниже границы того, что действительно было нарисовано. Чтобы облегчить работу графического сервера, видеодрайвера и всех остальных.

И ещё нужна очередь сообщений и всё остальное. Твой пример с циклом "while" это называется OpenLook и от этого давно отказались. Примеры как он выглядел и как под него писали код нетрудно найти в Гугле.
956781
#319 #956781
>>956774

> - Регион, где рисовать надо (например, область окна, требующая обновления)


Как понять где требуется обновление? Посмотри на картинку. Это, короче, кадр и новая итерация в пользовательском цикле. На окне размещено куча кнопок, но нажата т.е. требуется обновить только одну, размещённую где-то в средине кода кнопку. И вот, опять же, цикл:
while(true)
{
draw_button("button");
draw_button("button");
draw_button("button");
...
draw_button("button"); // Вот она!
...
draw_button("button");
draw_button("button");
draw_button("button");
}

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

> OpenLook


Спасибо, буду постигать.
956782956801
12 Кб, 1046x396
#320 #956782
>>956781
Картинку забыл.
#321 #956783
>>956769
Или ты делаешь никому не нужное неудобное stateless-говно (хайп вокруг nuklear скоро кончится), или ты делаешь объекты и колбеки. Или ты делаешь еще большее говно, давая контролам уникальные айди и создавая внутри объекты по требованию. Колбеков не будет, но это единственное преимущество. Можешь еще адрес возврата получать вместо id, лол.
956789956801
#322 #956789
>>956783
Как сложно жить.
4 Кб, 641x402
6 Кб, 640x400
11 Кб, 652x434
10 Кб, 650x494
#323 #956801
>>956781

>нужна кнопка в центре и только она, но я никак не могу прыгнуть прямо на неё, мне сначала нужно отрисовать все предыдущие кнопки


NYET.
Каждая кнопка это окно, а у каждого окна есть границы.
Действия мышкой над этими границами приведут к тому, что в окно будет направлено сообщение "мышь нажата".
Обработчик сообщений для окна выберет это сообщение из очереди и затем начнёт рисование в окне. При этом будут заданы границы того, где он может рисовать (ему не разрешат ничего рисовать вне границ окна), а по окончании всех его действий с растровой сеткой будут заданы границы того, где он нарисовал.
Растровая сетка будет возвращена оконной оболочке вместе с границами нарисованного.
Драйвер устройства перенесёт нарисованное в видеопамять.

>Вот не получается узнать поменялась ли.


Графическая среда сохраняет состояние, вот этот >>956783 анонимус прав.
956804956807
#324 #956804
>>956801
Так вы о разных вещах говорите. Он говорит о stateless-GUI, который каждый кадр реквестит отрисовку всего нужного на текущий момент GUI (может так случиться, что это каждый кадр совершенно разный GUI), тулкит придумывает элементам интерфейса прямоугольники, юзает какой-нибудь алгоритм, чтобы придумать layout этим прямоугольникам, срет результатом в видеокарту, а в конце кадра забывает обо всем. Если однажды при отрисовке клик попал в один из прямоугольников - юзер получает клик, если нет - хуй с ним. Весь необходимый стейт (состояние чекбокса, текст и курсор в поле ввода и т.д.), хранит не тулкит, а вызывающий код.
#325 #956807
>>956801
Да, мы говорим о разных вещах.

Честно говоря даже не знаю как поступить. У меня полно хороших задумок хороших программ, но я каждый раз сталкиваюсь с необходимостью написания своего тулкита, и вот я пытаюсь осилить его битый год. Подход нукляра, какой же он охуенный. Я уже думал, что в скором времени таки допишу тулкит и буду заниматься чем-то действительно полезным, но обосрач. И что, опять возвращаться в степь GTK? Меня тошнит от GTK.
Аноны, как вы видите идеальный тулкит для гуя? Цели: Простые десктопные приложения. С чего брать пример?
#326 #956869
>>956807

>С чего брать пример?


Попробуй поковырять CLIM, интересная штука.
Dmitry #327 #956902
>>956807
Сравни для начала все что есть.
На QT+C можно тоже писать.
Clutter, SDL, GLFW, EFL смотри.
956980957144
#328 #956918
>>956807
ты же уже инвестировал в изучение gtk
юзай его
#329 #956980
>>956902

>На QT+C можно тоже писать


Нельзя, дебилушка
957081
#330 #957081
>>956980
Можно маня, VLC так и написан.
957108
#331 #957108
>>957081

>VLC так и написан


ты че, ёбнулся? qt морда на c++ полностью, а работа с видео, стримами, устройствами на C
957116
#332 #957109
>>956807
Тулкит ненужен.
WinAPI.
957115
#333 #957115
>>957109
Cпермо-маням ничего не нужно.
WinAPI и есть тулкит, тупые блядь.
#334 #957116
>>957108
Ну так тоже вариант.
#335 #957144
>>956902

> Сравни для начала все что есть.


GTK и QT? В общем они одинаковые. Я много чего крутил в руках, но всё оно либо одинаковое, либо укуренное.

> Clutter, SDL, GLFW, EFL смотри.


Это же бэкенды отрисовки, что там смотреть.

В целом мне нужен концепт размещения виджетов на экран. В GTK есть пакование в боксы и grid(в 3.0+), ни то ни другое мне не показалось приятным, а если я сделаю свой GTK но с размещением как в нукляре, то это, вероятно, будет совсем пиздец. Что делать — хуй знает.
957187957188957224
#336 #957165
Как конпелируют минимальные экзешники?
957167957175
#337 #957167
>>957165
Под винду? Выкидываешь рантайм (или компилируешь с динамическим хотя бы), втыкаешь кастомную точку входа, мержишь секции, профит.
Dmitry #338 #957175
>>957165
strip -s /usr/bin/*
957181
#339 #957181
>>957175
А теперь сделай hexdump и посмотри, сколько говна гцц оставил тебе на покушать.
957189
Dmitry #340 #957187
>>957144
EFL это либы для интерфейсов
#341 #957188
>>957144

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


а мне наоборот понравился подход, когда компонент занимает все место в контейнере
Dmitry #342 #957189
>>957181
А теперь собери clangом или чем угодно другим, и покушай.
39 Кб, 906x303
12 Кб, 640x400
#343 #957224
>>957144
Короче накидал пикрел, буду ориентироваться на него. Надеюсь будет удобно.
#344 #957272
Аноны, с какой платы начать изучать микроконтроллеры? Слышал, что советуют stm32l-discovery, но не слишком она старая? Все таки лет 7 уже прошло(или сколько там), или в мире микроконтроллеров не так все быстро меняется?
957504957514
#345 #957281
Анон, есть один вопрос: Если бы тебе ресетнули все проффесиональные знания, и оставили лишь знания об источниках знаний, учебниках, курсах и подобном, какие учебники годнота, какие мусор. Какой список учебников по математике ты составил бы для средней школы? Просто я подозреваю, что я мыслю о математических процессах очень неэффективно и неправильно. Хочу поправить фундамент, так сказать. Особенно интересует есть ли годные англоязычные учебники по математике переведенные на русский?
957284957455957556
#346 #957284
>>957281
матанопетух, уймись
531 Кб, 803x688
sage #347 #957455
>>957281

>переведенные на русский


harharharharhar
#348 #957470
Аноны, ковыряясь в писечке обнаружил:
result->top = !!(table->frame & TABLE_FRAME_ABOVE);
зачем двойное отрицание, в чем тайный смысл?
957473
#349 #957473
>>957470
Привести 0 или n к 0 или 1.

& - это побитовый оператор, смысл выражения в выделении одного или нескольких битов по маске, а потом к проверке, был ли хотя бы один из этих битов ненулевой. Более традиционная форма:
(value & FLAGS) != 0 (проверить, установлены или нет один или несколько битов FLAGS) или (value & FLAGS) == FLAGS (когда нужно убедиться, что все биты FLAGS были установлены).
957476
#350 #957476
>>957473
Это понятно, но ведь достаточно записать как:
result->top = (table->frame & TABLE_FRAME_ABOVE);
957477957489
#351 #957477
>>957476
Видимо, не понятно. Смотри, пусть:
table->frame = 0x5023;
#define TABLE_FRAME_ABOVE 0x1000
тогда table->frame & TABLE_FRAME_ABOVE выдаст 0x1000, а !!0x1000 выдаст 1. Если бы не было !!, мы бы присвоили в result->top 0 или 0x1000, а с !! присваиваем или 0, или 1. Когда у тебя int предназначенный для хранения bool, очень удобно, когда там не лежат странные ненулевые значения. В С99 появился bool, он при присваивании к нему автоматически преобразует значение к 0 или 1, а тут, видимо, старый код или разработчики по какой-то причине не хотели настоящий bool.
957482957509
#352 #957482
>>957477
да, верно код старый. все понятно, скорее там бул в структуре размером с байта и это позволяет избежать переполнения. хитро сука, не то что нынешнее племя.
957484
#353 #957484
>>957482
Почему хитро-то? (n & mask) != 0 - вообще идиома, а !! любят в JS.
957486
#354 #957486
>>957484
двойное отрицание для кастинга мне еще не встречалось, возьму на заметку.
#355 #957489
з.ы. я вот так обычно >>957476
#356 #957504
>>957272

>не слишком она старая


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

Алсо некоторые диды до сих пор на 8051 быдлокодят в радаче даже тред есть, да и на вакансии натыкался, где требовался опыт ковыряния в этом говне динозавров
#357 #957509
>>957477

>автоматически преобразует значение к 0 или 1


Почему, кстати, 1, а не все единицы, так же удобнее?
957513
#358 #957513
>>957509
Потому что сделать n * bool иногда хочется, а все единицы позволяют только для branchless conditional assignment делать, когда битность совпадает. В общем реже оно нужно и ненадежно.
957517
#359 #957514
>>957272
Нахуй тебе дискавери. Возьми аналог за 100 рублей с али, достаточно, чтобы начать вкатываться.
#360 #957517
>>957513

>сделать n * bool иногда хочется


Ну так можно n & bool сделать.
957521
#361 #957521
>>957517
Можно, но я имел в виду неявные умножения/сдвиги в коде типа const char *something[] = { "foo", "bar" }; puts(something[some_bool]);
#362 #957532
Посоветуйте книг по архитектуре процессора(Таненбаума уже почитал). И вообще, в каком направлении развиваться(стоит ли, например, ебаться с ардуионо или другими железками), чтобы взяли, скажем в интел/амуде/гнусмас, и в будущем заниматься разработкой архитектуры для новых процессоров(ну или чем-то таким, связанным с процессорами - мб эмуляция/виртуализация). Щас студентота, неплохо знаю асссемблер и си(++), но опыта с микроконтроллерами не было
#363 #957542
>>957532
Очевидные Хэррисы про железо (ISBN 978-0-12-394424-5) и Хеннесси/Паттерсон про высокий уровень и ISA (ISBN 978-0-12-383872-8). Начинать с последней, читать обе.
sage #364 #957543
>>957532
Алсо, у меня есть вот такой случайный набор букв и цифр, он подустарел, но может чего найдешь еще там: 8E2AD03BC44EBBA5DBCFC7ADBB1779BC53644166
#365 #957546
>>957532

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


уф, так и чувствую твое разочарование лет через десять :D
957564
#366 #957556
>>957281
http://4chan-science.wikia.com/wiki/Mathematics
http://4chan-science.wikia.com/wiki/Math_Textbook_Recommendations
В этом списке есть книги, которые сначала были написаны на русском, а потом были переведены на английский. Так что некоторые книги можно и на русском прочитать, но большинство годной литературы пишется на английском и не переводится на русский.
#367 #957564
>>957546
Чому так?
Dmitry #368 #957598
>>957532
Что сейчас не хватает процессорам так это инструкций и гибридности, для определенной задачи больше подходит определенная архитектура.
Не хватает аппаратной реализации строк, массивов, инкрементов, корней/степеней, поддержки разных интеджеров нативно без переобразований.
Иди в IBM.
957775
#369 #957600
>>956742

>X


устаревшее говно, сейчас wayland protocol.
957626
Dmitry #370 #957605
>>946603 (OP)
А можно ли среагировать на событие не проверяя состояния в цикле?
Сколько ресурсов жрет такой цикл и как минимизировать последствия такого костыля?
USB насколько знаю вообще в это не может, ведь это интерфейс для передачи данных а не сигналов, но если бы производители плат покаялись и одумались сделав современную замену ps/2 то как в коде обрабатывалось бы нажатие?
Вообще и на низком уровне все на костылях, идет исполнение цикла, если что-то сделал то создается прерывание и обрабатывается.
Как учитывая все это потребление процессора 1-2% в простое?
957620
#372 #957626
>>957600
нужно сидеть в консоли под фреймбуфером
957642957814
#373 #957642
>>957626
Почему же? Вот уже в 25 федоре вейланд в гноме по дефолту стоит.
957644
#374 #957644
>>957642
а зачем тебе графические клиент-серверные архитектуры типа вейланда или иксов когда ты сидишь на собственном компе? вот когда понадобится запускать графическую прогу на другом конце шара и отрисовывать ее у себя тогда и пользуй
957646
#375 #957646
>>957644
А какие есть альтернативы?
957678
#376 #957678
>>957646
фреймбуфер (ладно, шутка)
#377 #957721
Поясните как использовать тулсет Clang/C2 в 2017 студии
957776
32 Кб, 532x298
48 Кб, 850x601
#378 #957775
>>957598
Поставить галочку в инсталляторе, а потом включить в свойствах проекта для нужной билд-конфигурации или для всех.
957776959020
sage #379 #957776
>>957721
>>957775
Промахнулся.
157 Кб, 1920x1080
#380 #957814
>>957626
Wayland тоже норм.
957850957872
#381 #957850
>>957814
Бля, собери мне ядро!
957859
#382 #957859
>>957850
Какое железо?
#383 #957872
>>957814
А как ты на wayland дошел? Что ставил?
957875
#384 #957875
>>957872
weston
Вообще на Velox хочу перекатится, пока руки не доходят.
958292
#385 #957890
>>957620
Но USB то опрашиваются, а не генерируют прерывания, насколько я знаю.
957894
Dmitry #386 #957894
>>957890
Конечно опрашиваются, оно же само по себе сигнал не пошлет
#387 #957896
>>956742

>Тут есть даже я, разобравший Иксы и Presentation Manager и заново их собравший


Сложно ли проксировать иксы в виндовой гуй? Все существующие подделки иксов под венду рисуют всё через свои костыли, и не вписываются в стандартный интерфейс.
957899
#388 #957899
>>957896
Есть qt, gtk, и еще какие=то фреймворки.
958552
26 Кб, 425x426
#389 #957926
Хелуворд по-православному.
957937957938
76 Кб, 880x400
#390 #957936
Где можно выучить С, чтоб с задачками, а за решение ачивки и прочие звездочки?
sage #391 #957937
>>957926
Дай переменным нормальные имена, нехристь!
252 Кб, 999x667
#392 #957938
>>957926

>по-православному


Пасха Христова определяется очень просто и всегда одинаково:

После весеннего равноденствия (20 марта) смотрим когда ближайшее полнолуние (11 апреля) и после него ближайшее воскресенье (16 апреля) и есть день Пасхи Христовой. Но если на этот день попадает празднование жидовского песаха то празднование Светлой Христовой Пасхи переносится на следующее воскресенье. Чтобы не праздновать Восресение Распятого одновременно с распинавшими. В этом году песах в синагоге сатаны празднуется с 11 по 17 апреля. Таким образом день Пасхи Христовой переносится на неделю. День ближайшей Пасхи - 23 апреля.

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

Но главное не наши рассуждения в данном случае. Главное то, что так установлено отцами - одновременно с жидовским песахом Пасха Христова не празднуется и точка.

Итак, ближайшая Пасха 23 апреля. Начало Великого поста соответсвенно выпадает на 6 марта.
957955
#393 #957955
>>957938
Не хочется добавлять в православный алгоритм расчет богомерзкого песаха. Герман Львович, не по божески это.
#394 #958292
>>957875
В голом вестоне этого всего нет.
958324
Dmitry #395 #958320
Чего не хватает в C?
1. Concurrency. Потому как паралелизм дораха обходится, иногда настолько что однопоточное решение быстрее, в то время как в Go не юзаются потоки операционной системы, избегается оверхед.
Строки кажется и не нужны.
2. Templates говорят позволяет добится большей оптимизации.
958321958528959048
#396 #958321
>>958320
паралелизм ненужен как и шаблоны
958328958330
Dmitry #397 #958324
>>958292
Чего нет?
Если ты о браузерах и файломенеджерах, vlc, mpv. То этого и не должно быть, он может и тебе не нужно.
Отдельно ставь.
Мозила не может в вейланд.
Ozone Chromium может, webkit (epiphany, midori) может.
Почти вся Qt5 хуйня работает.
GTK3 тоже должно работать, не проверял пока. Я имею в виду приложения в которых не сказано ничего о поддержке вейланда скорее будут работать чем нет.
Dmitry #398 #958328
>>958321
Конкуренци это не параллелизм. Паралелизм это когда потоки создаются, что не обезательно для конкуренци.
Шаблоны чем плохи? Что лучше?
958340
Dmitry #399 #958330
>>958321
И как это не нужен? Скоро в смартфонах по 32 ядра будет на десктопах 16 потоков норма уже.
958340
#400 #958340
>>958330
хипстеры и это засрут. не каждый алгоритм можно рспаралелить, а запуск процессов есть в любой ос и да, потоки тоже нинужны.
>>958328
тем, что шаблоны обобщают, а это всегда хуже конкретики.
958376
#401 #958376
>>958340
Ну насчет шаблонов он частично прав. Когда реализуешь какую-нибудь коллекцию на Си, приходится жертвовать либо производительностью, либо проверкой типов, либо копипастить код. В такие моменты очень хочется шаблоны. Хотя я бы предпочел явную кодогенерацию на этапе компиляции, а не крестовую магию.
958451958525
Dmitry #402 #958451
>>958376

>кодогенерацию


Ну а компилятор разве так не делает?
#403 #958525
>>958376
Интересно, если ли для Си какие-нибудь препроцессоры уровня Nemerle, чтобы обрабатывать AST? Такая штука была бы намного удобнее крестовых шаблонов.
#404 #958528
>>958320
Мне лично только лямбд не хватает, все остальное норм. Concurrency легко эмулировать сопрограммами (setjmp/longjmp), только задачи нужно переключать вручную.
#405 #958552
>>957899
Я про родные люнупс аппликухи. В смысле запускаемые под LXSS.
60 Кб, 500x718
#406 #958565
Аноны помогите кто чем может.Задали написать простой 2D шутер, вид сверху на С.Я вообще не епу как это делать читаю ,Прату, вроде решаю простые задачки, но как сделать игру хз? В инете есть только змейка.Покидайте гайдов или примеров каких с комментами (рус\англ) плиз.Хеелп
958617
Dmitry #407 #958617
>>958565
SDL
DL
L
958622
#408 #958622
>>958617
У местных даунов с ней какие-то проблемы. То ли хэдеры с либами не могут добавить, то ли путают 32-битные и 64-битные версии.
Хз, у меня проги на SDL компилились с первого раза и на винде, и в линуксе.
958679
#409 #958627
>>946603 (OP)
Есть два файла: 1.txt и 2.txt
Как мне проверить каждую строку первого файла с каждой стройок второго файла и при совпадении сделать XYZ? Строка номер 1 файла один со строкой 1 2 3 4 5 6....n до конца файла 2. Потом строка номер 2 файла 1 со строкой 1 2 3 4 5 6....n до конца файла 2?


Я нашелнабросал такое - но такой алгоритм проверяет первую строку одного файла с первой строкой другого, вторую строку со второй и тд.

Если есть исходник такой хуйни - буду рад. В гугле - хуйня подобная моей.
http://pastebin.com/bvDd1LLV
958632
#410 #958632
>>958627
У тебя явно какие-то проблемы с пониманием массивов символов - ты кормишь в fgets один символ массива, а не сам массив. Твоя программа самым простым способом решается так:
открыли файлы;
while (fgets(первый файл)) {
rewind(второй файл); // Перематываем на начало.
while (fgets(второй файл)) {
if (strcmp(строка1, строка2) == 0) {
зделоть;
}
}
}
закрыли файлы. Но это ебически неоптимальный способ (зато простой). По идее, стоит прочитать второй файл в память, и сравнивать строки уже с памятью, не перечитывая повторно. Но у понадобится узнать про маллок и указатели хотя бы, а у тебя проблемы даже с массивами.
#411 #958639
>>958632

>маллок


ой нет, нахуй нахуй
Вопросы оптимальностей и прочих оптимизаций неактуальны.
Спасибо большое, я попробую переписать это в код и надеюсь заработает :3
#412 #958641
>>958632
Если файл 8 гигов то наверно лучше неоптимальный и простой алгоритм юзать?
По моему убеждению хуйня все это, все хуйня.
Бешешь sha256sum обеих файлов и сравниваешь, вуаля!
958645
#413 #958645
>>958641
https://en.wikipedia.org/wiki/SHA-1
Designers:National Security Agency
Вот теперь все ясно.
#414 #958646
>>958632

> кормишь в fgets один символ массива, а не сам массив



А как правильно?
fgets(slovovmassive[], ?, ?);
958652
#415 #958650
>>958632
Алсо - напишите за меня, плеас, за сто рублей на телефон :(
958652
#416 #958652
>>958646
>>958650
Я за тебя написал уже. Все, что тебе оставалось:
char stroka1[1024]; // и stroka2 аналогично
и
fgets(stroka1, sizeof(stroka1), file1); // и второй fgets аналогично
и
strcmp поправить. И погуглить, какой хедер подключить для strcmp.
#417 #958679
>>958622
Норм либа, давно в вейланд могет.
958686
#418 #958682
while(fgets(file_1))
{
for (x=0; x < 5; x++) //
{
fgets(ch_1[x], sizeof(ch_1), file_1);

for (y=0; y < 5; y++)
{
fgets(ch_2[y], sizeof(ch_2), file_2);

if (ch_1[x]==ch_2[y])
printf("\sasai\n",stroka);
else
printf("ne sasai");
stroka++;

}

Не робит нихуя твое "пока"
958692
#419 #958686
>>958679
Да-да, основное предназначение SDL - как раз наименее безболезненно получать контекст опенгл и пользовательский ввод, не разбираясь, что там за очередное говно стоит у пользователя вместо гуя. Все остальные "фичи" этой либы - неюзабельные костыли.
958703
#420 #958692
958700
#421 #958700
>>958692
Ебануться, спасибо тебе, ты охуенен, благодаря таким как ты мы эволюционируем.

Не разобрался с файлами - мне указать вместо массивов два моих файла?
958703
#422 #958703
>>958686
Ну есть же и фичи какие-то.
У меня в supertux кстати опенгл не работает, а должен, но сдл работает.
>>958700

>Не разобрался с файлами - мне указать вместо массивов два моих файла?


Вместо имен файла кинешь туда argv[1] argv[2]
958708
#423 #958708
>>958703
Спасибо, разобрался, вбил имена файлов.
Господи, ты даже не представляешь, как ты мне помог, живи здорово и счастливо
958716
#424 #958716
>>958708
А теперь возьми исходники cmp.
958718
#425 #958718
>>958716
Что взять? Непонимат
958725
#426 #958725
>>958718
Проебался, тебе надо сравнить строки а не одинаковы ли файлы.
958741
#427 #958741
>>958725
Я понял, что нужно указать (?) файлы и потом в массивы грузить их содержимое -но нахуя, если и так все работает)))0000
958743
Dmitry #428 #958743
>>958741
Не понял что ты в виду имел.
laba1 file1 file2
так вызываешь свою программу.
958757
#429 #958757
>>958743
Ебать я дно. Я тебя понял, понял почему ты написал именно так. Пиздец я дно. Спасибо тебе большое, ты спас моё ёбааную задницу - я не знаю кто ты такой, но я желаю тебе заработать много денег и жить в счастьи и гармонии. СИ-воды самые лучше. Крестобляди соснули.
СПАСИБО!
89 Кб, 1287x714
#430 #958807
>>946603 (OP)
как называется среда разработки c в вижуал студио
958818958897
#431 #958813
я так и не понял где эта среда
#432 #958818
>>958807
Ой блять, будто я знаю. install gentoo mingw
958821
#433 #958821
>>958818

>mingw


на английском
958825959023
#434 #958822
Выкиньте нахуй свою вижуалку, в сях она всё равно не нужна, а то потом приходится смотреть код долбоёбов, которые свежие стандарты не знают.
959027959046
#435 #958825
>>958821
Даже у меня в школе был mingw. На английском, блядь, угу. Прекрати ныть. Ныть хорошо, но не без толку же.
Заодно разберёшься с make и потеряешь рассудок\анальную девственность в таком особом обряде инициации.
49 Кб, 1380x727
63 Кб, 1386x744
#436 #958826
где ставить галочки
958834
#437 #958833
или не надо
#438 #958834
>>958826
Метапакеты из basic setup ставь. msys, mingw-base и gcc-g++
958899
185 Кб, 1426x342
#439 #958835
все так
сори если достал
958837
#440 #958837
>>958835
Я бы тебя не нанял.
#441 #958838
что дальше
958839958850
#442 #958839
>>958838
Сфотографируйся с флагом в заднице.
958841
#443 #958841
>>958839
не заинтерисован
958842
#444 #958842
>>958841
Ну хотя бы хуй себе на лбу нарисуй.
958846
#445 #958846
>>958842
не интересно
958847
#446 #958847
>>958846
Ну и пошёл нахуй тогда, болезный. Пиздец, компилятор поставить не в состоянии.
#447 #958848
я должен каждый раз открывать cmd чтобы запустить компиляцию ну нахуй
959025
#448 #958850
>>958838
Дрочи, компилируй, дрочи, компилируй! Запускай программы! Мусори в пайпы! Открывай сокеты! Сравнивай строки! Вычисляй фибоначчи!
Я не знаю, придумай чего-нибудь, короче. Потом будешь с резюме показывать. "Сматрите как я умею."
958855958901
#449 #958855
>>958850
зря ты ты так.3760 у нас в шараге даже вижуала нет кодим на крестах в какой то веб параше
cpp.sh
так что прошу понять и простить
958983
#450 #958897
>>958807
Visual C++.
959015
#451 #958899
>>958834

> msys


Посоны берут MSYS2, там pacman, понятный любому арчешкольнику.
#452 #958901
>>958850
Если ты еще не понял то я хочю вкатится ,а этот дрочь на уровне красноглазия мне еще рано
Я только учюсь
#453 #958903
Поставил LLVM compiler не понял как он работает удалил
Осталась папка bin ,которая неудаляется потому что она под админом
Качал с офф сайта
958905
#454 #958905
>>958903
Анон, выброси компьютер и иди работать в KFC. Программирование - это не твоё.
958974
#455 #958927
Подскажите алгоритм всех перестановок позиций из числа не полного списка
Пример 3 из 3, это обычные 3! вариантов
Но может быть и 2 из 3:
1 2; 2 1
2 3; 3 2
3 1; 1 3
и.т.д.
Нужна генерация мыпы на различные варианты перестановок вплоть до 10 из 20. Чтобы не генерить перестановки при каждом запросе, а просто искать в мапе индекс начало искомого запроса и выдавать под список
958987
#456 #958974
>>958905
ненужны нам в кфс такие долбоебы
#457 #958983
>>958855

Поставь Qt 5.6.2 для MinGW, там внутри MinGW и Qt Creator - среда разработки.
#458 #958987
>>958927

> просто искать в мапе индекс начало искомого запроса и выдавать под список



что ты пишешь блядь
959007
#459 #959006
Поясните пожалуйста про такую запись. (void*)&smth. Я правильно понимаю что мы такой записью приводим указатель на smth к указателю на войд?
959013959022
#460 #959007
>>958987
Короче нужно получить массив перестановок для всех вариантов
int map[N][20]:
{{ 1,0,0....,0},
{ 2,,0,0....,0}... { 20,0,0....,0},
{ 1,2,0,...,0}, { 2,1,0,...,0},
{ 1,3,0,...,0}, { 3,1,0,...,0},
....
{ 19,20,0,...,0}, { 20,19,0,...,0},
{ 1,2,3,...,0}, { 1,3,2,...,0}, { 2,1,3,...,0},...,{ 3,2,1,...,0},
{ 1,2,4,...,0}, { 1,4,2,...,0}, { 2,1,4,...,0},...,{ 4,2,1,...,0},
...
{ 18,19,20,...,0}, {18,20,19,...,0}, { 19,18,20,...,0},...,{ 20,19,18,...,0}
....
..
{ 1,2,3,...,20},....{ 20,19,18,...,1}}
#461 #959013
>>959006
Да, был: Type smth
Получили его указатель Type p= &smth
И преобразовали его к в void: void
pp = (void*)p
959014
#462 #959014
>>959013
Макаба звёздочки в разметку конвертит
82 Кб, 994x698
#463 #959015
>>958897
тут 1 кресты
959020
#464 #959020
>>959015
Создаешь пустой проект win32 и в свойствах проекта меняешь как написано тут >>957775
Затем добавляешь в проект исходный файл с расширением .c и будет тебе С11
959053959058
#465 #959022
>>959006
Большое спасибо!
#466 #959023
>>958821
А ты думаешь, что существуют компиляторы на руснявом?
#467 #959025
>>958848
Так ты ее не закрывай, дебил
#468 #959027
>>958822
Clang/C2
?
47 Кб, 604x489
#469 #959046
>>958822

>свежие стандарты

#470 #959048
>>958320

>Dmitry


>Dmitry


>паралелизм



>позволяет добится


>тся

#471 #959053
>>959020
Выставлять шланг не обязательно, по большей части студия и своим собственным cl код с C11 компилирует нормально.
959089
#472 #959058
>>959020

>и будет тебе С11



Хуй у него за щекой будет, а не C11. В Студии до сих пор только C90.
959068
#473 #959065
народ что вы думаете об этом
#475 #959068
>>959058
У тебя устаревшие сведения. C99 полностью (кроме мелких проблем с либами) и всё нужное из C11 есть по дефолту. Полная поддержка при установке фронтенда от clang.
959155959203
#476 #959089
>>959053
Недавно пытался скомпилировать с _Generic, cl послал меня нахуй, а clang скомпилировал нормально
959093
#477 #959093
>>959089
И часто ты компилируешь код с _Generic? Оно плохо определено в стандарте и практически неюзабельно на текущий момент. Возможно, в С21 поправят, уточнят, тогда можно будет начинать использовать.
959132
434 Кб, 1464x939
#478 #959113
продвижение есть
959116
#479 #959116
>>959113
сменил но все равно тоже самое
26 Кб, 1151x197
28 Кб, 619x481
#480 #959117
прошу простить я нубас
959120
#481 #959120
>>959117
Отсутствие символов для системных либ - это нормально, это не ошибка. Если очень хочешь их (вот только нахуя они нубу?) - можешь погуглить "configure symbol source".
#482 #959132
>>959093
какой 21? Сам же прекрасно понимаешь, что если прошлые стандарты называются 88, 99, 11, то следующий-то по аналогии должен состоять из двух одинаковых цифр, так что следующий стандарт по определению обязан быть 22.
959159959203959223
#483 #959155
>>959068
А вот мне нравится 2010 студия. Точнее, всё что выше, не ставится на XP.
#484 #959159
>>959132
А про 14 и будущий 17 вам не доложили?
#485 #959203
>>959132

C90 блядь.

>>959068

Вот в этом-то и дело. Написать портабл-код и использовать портабл код в студии с гарантией отсутствия пердолинга не получится, у них в макро заявлена поддержка лишь C++98 (про С не узнавал).

На стандарты в МС болт клали.
959223
#486 #959223
>>959132
Стандарты обзываются по году выпуска, следующий выпуск стандарта намечен ориентировочно на 2021.

>>959203

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


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

> у них в макро заявлена поддержка лишь C++98


По факту у них почти полная поддержка C++14.
23 Кб, 817x663
24 Кб, 670x255
#487 #959482
>>946603 (OP)
Сап, аноны. Для сортировки разного количества чисел приходиться каждый раз изменять код. Как можно задать
n чисел в файле? Т.е. чтобы код сосчитал все цифры в файле и задал его как n-чисел, дальше сам разберусь.
959484959486
sage #488 #959484
>>959482
Но ведь у тебя код и так считает числа. В 17 строке после цикла k = количество чисел + 2 (вроде бы). Добавь обработку ошибок fscanf в строке 16, и будет точно.
959489
#489 #959486
>>959482
Ну так передавай первым аргументом в функцию длину массива. Ну или еще есть variadic >>959482
arguments
959489
#490 #959489
>>959484
>>959486
А я том, что если в файле будет 51 число, то программа работать не будет, и мне придется менять, задаваемые размеры массива и кол-во вызова функции на 51, как избежать этого?
959491959505959513
sage #491 #959491
>>959489
Сделай массивы 10000 элементов (по условию) длиной. Иначе тебе придется городить динамическое выделение памяти через malloc (выделяешь 100 элементов, если закончились - делаешь realloc, добавляя еще столько же и т. д.).
959498
26 Кб, 1350x494
#492 #959498
>>959491
Спасибо, анон. А еще микровопрос, разве консоль имеет ограничение на кол-во строк? А то из 1000 только 295 чисел пишет в файле все нормально, можно ли как-то продолжить запись во второй,третий,... ряд?
959509
#493 #959505
>>959489
Так динамически выделяй память, в чем проблема то?
959506
#494 #959506
>>959505
Я это еще не изучал, да уже и без динамического выделения памяти все получилось.
sage #495 #959509
>>959498
Не помню, как в десяточке. Попробуй кликнуть правой кнопкой по заголовку консоли и поискать там параметры. Среди прочего там будет размер буфера экрана.

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


Нет. Консоль, в простейшем случае (когда ты работаешь с ней через printf, а не в виде окна с символами) - это печатная машинка. Можно вернуться к началу текущей строки (\r), но к предыдущей строке вернуться нельзя никак. Впрочем, ты можешь выводить числа горизонтально - просто убери \n из printf.
Dmitry #496 #959513
>>959489
Перелавай массив по указателю бляха.
#497 #959579
Анон помоги.
http://pastebin.com/MMS3tSLF
Первая строка содержит целое число k количество конечных автоматов. Следующие k строк содержат по два целых числа
ni и mi число состояний и переходов i-го автомата.
Выход должен состоять из k строк. На i-й строке выходного файла выведите одно число – нетривиальность i-го автомата.
Сделал так как смог. Но хотелось бы сначало ввести кол-во строк потом числа, а только потом конечные результаты. Не пойму как запихнуть в цикл.
#498 #959618
Возник вопрос. Имеется динамический массив структур. Причем растет массив через realloc путем добавления 1 элемента. Т.е. сначала просто у меня структура, потом массив из двух, вжух теперь из 3 и поехало.Структура в своем составе имеет интовый массив [32]. Так вышло что по новому заданию массив в структуре может быть 32, 64,128, 150. Вижу 2 решения задать в структуре объединение с 4 массивами и выбирать потом тот размер который нужен (sizeof к структуре всегда будет давать 1 размер). Но загорелась жопа зачем то усложнить и сделать гибкий массив. Но помню читал, что массив из структур в составе которых гибкий массив не есть гуд. Но сделал черновой вариант и все работало. Так как лучше поступить. Через юнион конечно надежнее, но ломает сделать с гибким массивом
959623
#499 #959623
>>959618
Не усложняй себе жизнь, гибкие массивы норм (мы ведь про Type elements[]; последним элементом структуры, правда?). А вот делать realloc() на один элемент больше - избыточно, лучше выбрать больший шаг хотя в одном из прошлых тредов мы выяснили, что как минимум в линуксе можно и +1 делать, не теряя в производительности.
959626
#500 #959626
>>959623
Да, про него. Ты прав, реально сейчас наделаю дел, а потом переделывать буду 10 раз. То что добавляю по одному тут опять же требование. Спасибо!
**ПЕРЕКАТ** # OP #501 #959644
Тред утонул или удален.
Это копия, сохраненная 25 мая 2017 года.

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

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