Двач.hk не отвечает.
Вы видите копию треда, сохраненную 24 апреля 2017 года.

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

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

Что читать:

- Классика от Отцов: 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 2015 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)

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/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #924148
>>924080
Ты жоподум
#3 #924230
Где инклудите: в h или в c? Какие подводные камни?
924240
#4 #924240
>>924230
В идеале стоит стремиться в тому, чтобы .h сам разбирался со своими зависимостями, не вынуждая угадывать, в каком порядке нужно подключать хедеры. А остальные хедеры, конечно, нужно подключать в .c, по мере необходимости. Если много файлов с однотипными зависимостями - например, подсистема какая-нибудь, можно собрать хедер для подсистемы. Но это уже вкусовщина.
#5 #924266
Сап, аноны. У меня IP-адрес хранится в структуры как 4-байтовое целое. Какой функцией его можно преобразовать в формат, подходящий для создания соединения с этим адресом?
924277924300
#6 #924277
>>924266
Ты чтоль структуру в строку с точками не можешь отформатировать? Ебать ты
924289
#7 #924289
>>924277
Так может, без велосипеда можно обойтись виндовыми функциями. В структуре sockaddr_in в каком формате хранится IP? Может, просто загнать туда и все?
924301
#8 #924293
о. тред сходу начинается с хуесоса. как встретишь так и проведёшь.
#9 #924300
>>924266
inet_ntoa, но адрес должен быть в big endian (если нет - htonl сначала).
sage #10 #924301
>>924289
Не дочитал вопрос. Вот так:
sockaddr_in sa;
sa.sin_addr.S_addr = htonl(адрес);
#11 #924486
Даже сишники перекатили тред, а плюсогоспода не в состоянии.
924499
#12 #924499
>>924486
Мне влом просто
мимо оп плюсотреда
#13 #924574
Подскажите ньюфагу какой-нибудь мисра чекер.
#14 #924653
Подскажите какой-нибудь ВЕСЁЛЫЙ байтоёбский учебник. Не обязательно си. пусть там будет про ассемблер, про ос, про архитектуру компьютера и про си. Чтобы там были все аспекты низкоуровневости.
#15 #924654
>>924653
Очевидный Таненбаум очевиден.
924657
88 Кб, 565x800
#16 #924655
>>924653
А. Таненбаум, архитектура компьютера.
Если тебе от него «скучно» — пiздуй на завод профессия не для тебя.
924657932008
#17 #924657
>>924654
Хотел про него в посте упомянуть, но подумал и так понятно. Он не весёлый. Не обязательно такой подробный учебник. Пусть там просто будет байтоёбство и код. Чтобы можно было самому с ним поиграться.

>>924655
Сам пиздуй. Раскомандовался тут.
924658
#18 #924658
>>924657
— Норот, пасскажытти учебник на 7-струнной гитаре, шоб весело было, с цыганнами, с мэдвэддямы...
— Андрей Сихра, «Самоучитель для 7-струнной гитары, которую я только что изобрёлъ», самиздат 1895 г.
— Хотел про него в посте упомянуть, но подумал и так понятно. Он не весёлый. Не обязательно такой подробный учебник. Пусть там просто будет байтоёбство и код. Хочю как «Ласковый май» на сцене гнусавить с гитаркой. Чтобы можно было самому с ней поиграться.
924659924662
#19 #924659
>>924658
Ой всё
#20 #924662
>>924658
Как человек, окончивший музыкалку, авторитетно заявляю, что самоучители - говно, а тот, кто провел такую аналогию - пидорас. Преподавать тоже надо уметь.
924663
#21 #924663
>>924662
Как кун с 4ёхлетним декретным отпуском в музыкалке заявляю, что музыкалка - говно.
#22 #925026
>>924653
thinking in forth
925063
#23 #925063
>>925026
Прочитал 20 страниц и пролистал по диагонали. Похоже байтоёбство есть и учебник весёлый. Хотя это скорее ненормальное программирование чем байтоёбство. Про ос не нашёл. Есть моар? Люблю когда есть выбор.
925073925219
#24 #925073
>>925063
почитай криса.
925112
#25 #925112
>>925073
Касперского?
925163
#26 #925163
>>925112
Эванса
925260
#27 #925219
>>925063

> ненормальное программирование


Схуяли? На форте как и 20 лет назад софт пишется, бабло мутится. Хотя по этому

>Похоже байтоёбство есть и учебник весёлый


Я понял, что ты обычный стремящийся, для которого байтоёбство это битовые структуры считать и в 2кб памяти уместится.
#28 #925257
http://ru.stackoverflow.com/a/199013
Доставьте тоже самое, но на си, пожалуйста. Весь гугл забит крестами, да чтож это такое.
#29 #925260
>>925163
Не гуглится же.
Другой анон.
#30 #925266
>>924653
c the hard wai
#31 #925719
Уважаемые сибляди, дайте совет.

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

Написать мусор достаточно просто, но нужно жизнеспособное решение. Я ещё совсем неопытный сиблядок, поэтому пригодная архитектура в голове у меня не сложилась. Можно использовать всякие syslog'и и logrotate'ы, однако, как я понял, эти ребята не поддерживают анализ содержимого лога для удаления неактуальных записей.
925792
#32 #925792
>>925719
СУБД. архитектура не нужна.
925799
#33 #925799
>>925792
Какая СУБД? Какое это вообще имеет отношение? Это не интерпрайз. Достаточно писать в файлы.
925814925825
#34 #925814
>>925799
Окей, изобретай каменное колесо, ебись с консистентностью, атомарностью, решай проблемы, давно решенные создателями бд и логдвижков.
#35 #925825
>>925799

>Достаточно писать в файлы.


Ага, потом копировать в новый ибо начальные строки уже устарели, тем более еще и сканить/парсить на приоритет, знакомся с SQLite ну или юзай логирование ОС.
#36 #925880
Пишешь в файл. Под каждый приоритет свой файл. Каждая запись должна начинаться с таймстампа. Если нужно вывести весь лог то открываешь все файлы и по очереди достаешь записи в соответствие с таймспампами. Если нужно удалить записи с определенным приоритетом просто удаляешь файл.
СУБД проще вариант, но насколько я знаю они не очень-то любят удаление записей, по факту место освобождается не сразу и с дополнительной еблей, разного рода OPTIMIZE TABLE и подобная хуйня с перезаписью базы. Хотя если удалять не часто то врядли особо проблемы будут.
#37 #926305
>>924123 (OP)

> https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard


годно, однако, чтобы выправить говнокод

Какая буржуйская норма описывает требования к ПО, ответственное за "safety". Ну, там мониторить что-либо и надёжно вырубить, если трабла
#38 #926742
>>924123 (OP)
Тут есть кто-нибудь, кто игры на плюсах пишет? (OpenGL, Unity)? А то собираюсь игрулю писать, а крестотреда нет.
926744
sage #39 #926744
>>926742
OpenGL-тред и прочие игрули в /gd/.
113 Кб, 400x234
#40 #927176
Что-то я не врубаюсь, Си не может в вычитание большего из меньшего? Вместо отрицательного резалта, выдает рандомный наборм цифр.
927178927185
#41 #927178
>>927176
Нет не может. Отрицательных чисел не существует - это выдумки жидовских математиков. Православные языки таким не занимаются.
927183
#42 #927183
>>927178
Понятно что отрицательные числа есть, но конкретно из операции вычитания я их не могу получить.
#43 #927185
>>927176
unsigned int объяви переменную дурачок
927193927198
5 Кб, 160x121
#44 #927193
>>927185

> Вместо отрицательного резалта, выдает рандомный наборм цифр


> unsigned int объяви переменную

459 Кб, 604x485
#45 #927198
>>927185
unsigned int a;
unsigned int b;

scanf("%d", &a); // При условии что b больше a
scanf("%d", &b);

printf("%u", a - b);

Хуй, а не отрицательное значение
???
927300928031
#46 #927231
Кто писал для гном, насколько это гемморой? Интересует последняя версия.
927238
#47 #927238
>>927231
Вот они пейсали:
http://www.opennet.ru/opennews/art.shtml?num=45914
Рассмотрев все за и против оптимальным признан путь миграции рабочего стола Budgie на Qt. По мнению разработчиков, переход на Qt положительно отразится на производительности, позволит реализовать новые возможности и расширить графические эффекты. При этом в основной кодовой базе планируется использовать только средства разработки на C++ и отказаться от применения языка Vala. В Budgie также не будет применяться QML и библиотеки KDE. Подобное ограничение не распространяется на сторонние виджеты, авторы которых вольны применять QML. Переход на Qt не означает обеспечение совместимости с KDE Plasma и проект продолжит ориентацию на запуск приложений GNOME, обеспечив их бесшовную интеграцию в окружение на базе Qt.
sage #48 #927300
>>927198
Смешались в кучу пони, люди. При сложении и вычитании unsigned int, представленных n битами сишечка выдает результат по модулю 2^n. Ну и, конечно, при вычитании unsigned чисел, если не было integer promotions, signed у результата взяться неоткуда.
#49 #927975
как сделать простенький UI для программы?

там поле заполняемое из спровочника, второе поле с числом и один флаг
927986
#50 #927986
#51 #928031
>>927198
А что такое UNSIGNED у переменных означает ты, типа, не знаешь, уёбок тупой?
928065
150 Кб, 1118x734
#52 #928058
Схоронил.
#53 #928065
>>928031
мамку ебал
10 Кб, 352x167
#54 #928238
Сап, анон. Помоги перцептрон с одним входным-выходным нейроном или с одним выходным и двумя входными написать на сишке. У меня просто мозга уже под неё деформировался. И долбанные нейросети никак понять не могу на других языках. То ли я дурак то ли лыжи не едут. Может найдётся анон, который серьёзно тащит в нейросетях и сможет на пальцах всё объяснить тупоголовому. Ну, или написать код по пикрелейтед. Обучать её не нужно. Мне главное - понять принцип построения нейросетей и того как нейроны принимают инфу, и обрабатывают, и где хранят. Хотя, если всё же на примере будет нагляднее то можно и с каким-нибудь примером обучения. habrahabr.ru/post/143129/
928239
#55 #928239
>>928238
забыл добавить, что это ссылка на статью на хабре, в которой вроде объясняется "на пальцах" но язык какой-то странный и ужасный используется
#56 #928330
как отпарсить код на сишке, чтобы получить список имён всех переменных?
928340
#57 #928340
>>928330
уже не актуально.
#58 #928345
>>924123 (OP)
Какие сейчас перспективы у С-программиста на рыночке? Или без крестов или шарпа нехуй делать?
928360928397
#59 #928360
>>928345
Оборонка разве что. И там C++.
928386
#60 #928386
>>928360
А спутники вроде на чисто С написаны.
928395
#61 #928395
>>928386
Ты зарплаты смотрел или спутники?
#62 #928397
>>928345
Цэ - это эмбед, жОсткое байтоёбства с оупенсорц. Контроллеры и натягивание юбута с линухом на всё.

Как понимаешь, перспективы не для хипстеров.
Для Си - надо родититься в свитере.
Паяльник-то в руках дрежал?
#63 #928399
>>928397
Я только хуй и мышку держал.
928404
#64 #928404
>>928399
Продолжайте держать хуй и программируйте мышкой.
Мы вам перезвоним.
928406928520928727
#65 #928406
>>928404
А сколько времени хуй держать? Пока не перезвоните?
#66 #928422
>>928397
Интересно послушать о поделиях с паяльником. Процессоры паял?
1310 Кб, 1080x1920
З #67 #928504
Помогите найти ошибки
928505928507
sage #68 #928505
>>928504
Ошибка! Это тред по сишке, а на пике - кресты.
928510929488
#69 #928507
>>928504
нашел, не благодари
#70 #928510
>>928505
Сукаааааа
Толсто
Это не кресты, а сишка обычная
928538
#71 #928520
>>928404
юморно. ставлю структ.
#72 #928522
Анон, вот решил помацать ваши Си. Какой IDE, под линуксами, юзать лучше?
P.s. Есть CLion, норм?
928527928551929143
#73 #928527
928585929071
#74 #928538
>>928510

> new


> delete


Кретин ебаный.
#75 #928551
>>928522

Норм для начинающего мацальщика.
928585
#76 #928585
>>928527
Окай,спасибо,гляну
>>928551
А что юзают не начинающе, а вполне себе продолжающие, на линуксах?
929071
#77 #928727
>>928404
кТО МЫ? КТО МЫ-ТО? Я ОДИН ЗДЕСЬ НАХУЙ!
6 Кб, 300x300
67 Кб, 700x437
#78 #928729
cmake.exe -G "MinGW Makefiles" src
-- The C compiler identification is unknown
-- The CXX compiler identification is GNU 5.1.0
-- Check for working C compiler: C:/FPC/2.6.4/bin/i386-win32/gcc.exe
-- Check for working C compiler: C:/FPC/2.6.4/bin/i386-win32/gcc.exe -- broken

gcc
gcc: No input files

Как эта тупая пизда может не видеть GCC если он прописан в PATH? и за каким хуем лезть в пацкаль?
#79 #928733
>>928397
Чё линух-то сразу? RTOSы для кого придуманы? Да и вообще ОС не всегда нужна, от задач зависит.
#80 #928790
>>928397

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


Бляя
мимо в Си-вкатывальщик-воннаби-смуззихлёб
#81 #928858
вы тёлку зажимали хоть раз?)
928874928881929074
95 Кб, 580x625
#82 #928874
>>928858
Ну давай, расскажи нам как пикапить телок на джаве
#83 #928881
>>928858
Ну когда автобус резко затормозил, а я стоял, не держась за поручни, я полетел в тянку и прижал ее к задней стене автобуса. Ну я покраснел и сказал "извините пожалуйста". Тянка была примерно моего возраста.
928906
#84 #928906
>>928881
Не пизди, ты никогда не погромировал на божественном Си.
928908
#85 #928908
>>928906
Программировал. Учился по книге из оппикчи.
#86 #929071
>>928585

>А что юзают не начинающе, а вполне себе продолжающие, на линуксах?


>>928527
929343
#87 #929074
>>928858
нет ((
Dmitry #88 #929107
Аноны оцените мою функцию что превращает строку в int.
int str2int(char str[]){
int val=0;
for(int i=0;str!='\0';++i,val=10){
switch (str){
case '0':
val
=10;
break;
case '1':
val+=1;
break;
case '2':
val+=2;
break;
case '3':
val+=3;
break;
case '4':
val+=4;
break;
case '5':
val+=5;
break;
case '6':
val+=6;
break;
case '7':
val+=7;
break;
case '8':
val+=8;
break;
case '9':
val+=9;
break;
}
}
return (str[0]=='-') ? -val/10 : val/10;
}

Написал до того как нашел функцию в стандартной библиотеке, однако когда посмотрел код там у них одни макросы и хуй пойми что еще, и концы идут непонятно куда (GNU).
Как оно по нормальному реализуется то?
Dmitry #88 #929107
Аноны оцените мою функцию что превращает строку в int.
int str2int(char str[]){
int val=0;
for(int i=0;str!='\0';++i,val=10){
switch (str){
case '0':
val
=10;
break;
case '1':
val+=1;
break;
case '2':
val+=2;
break;
case '3':
val+=3;
break;
case '4':
val+=4;
break;
case '5':
val+=5;
break;
case '6':
val+=6;
break;
case '7':
val+=7;
break;
case '8':
val+=8;
break;
case '9':
val+=9;
break;
}
}
return (str[0]=='-') ? -val/10 : val/10;
}

Написал до того как нашел функцию в стандартной библиотеке, однако когда посмотрел код там у них одни макросы и хуй пойми что еще, и концы идут непонятно куда (GNU).
Как оно по нормальному реализуется то?
929109929124
#89 #929109
>>929107
дристанул с велосипеда.
929112
Dmitry #90 #929110
Поясните за ptreads, или где за него норм поясняют?
Почему многопоточность до сих не входит в стандарт языка?
Правда ли что на С код может быть более тормозной чем на плюсах? Я вот сталкивался с тем что пхп высирает тысячи строк в консоль в мгновение ока, а все остальное включая сишку и ноду делает это секунд 10.
Dmitry #91 #929112
>>929109
Ну а теперь поясни как по людски делать.
#92 #929124
>>929107
слышал про ASCII?
929210
#93 #929127
>>929110

>Правда ли что на С код может быть более тормозной чем на плюсах? Я вот сталкивался с тем что пхп высирает тысячи строк в консоль в мгновение ока, а все остальное включая сишку и ноду делает это секунд 10.


Без конкретных примеров это всё просто сотрясание воздуха. На любом языке код может быть более тормозным, чем на другом языке.
#94 #929143
>>928522

>Какой IDE, под линуксами, юзать лучше?


emacs
929151929212
64 Кб, 800x600
#95 #929151
>>929143
Спасибо.
#96 #929172
>>929110

>Поясните за ptreads, или где за него норм поясняют?


Ричард Стивенс, книги про Unix, любые.

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


В других ОС другие функции, на микроконтроллерах вообще всё не так.
В том числе стандарт MISRA C велит всё делать в один поток, и так далее...
#97 #929174
>>929110

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


Он кеширует вывод.

>а все остальное включая сишку и ноду делает это секунд 10.


А они нет.

И ещё у него строки с заданной длиной, т.е. функция присоединения строки к строке быстро работает.
929189
305 Кб, 1920x1080
#98 #929179
Анон, этот пример ломает мне мозг.
Почему разрешается менять размер массива? Как можно вызвать LA[5], если декларированная длина - 5 элементов?

#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int k = 3, n = 5;
int i, j;

printf("The original array elements are :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}

j = k;

while( j < n) {
LA[j-1] = LA[j];
j = j + 1;
}

n = n -1;

printf("The array elements after deletion :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}
}
305 Кб, 1920x1080
#98 #929179
Анон, этот пример ломает мне мозг.
Почему разрешается менять размер массива? Как можно вызвать LA[5], если декларированная длина - 5 элементов?

#include <stdio.h>
main() {
int LA[] = {1,3,5,7,8};
int k = 3, n = 5;
int i, j;

printf("The original array elements are :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}

j = k;

while( j < n) {
LA[j-1] = LA[j];
j = j + 1;
}

n = n -1;

printf("The array elements after deletion :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}
}
#99 #929184
>>929179
Добро пожаловать в клуб.
929193
sage #100 #929189
>>929110

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


Потому что уже 6 лет как входит.

>>929174

> А они нет.


В Си по умолчанию есть кэширование stdout. Возможно, стоит узнать о setvbuf и указать буфер побольше?

>>929179
Менять размер массива нельзя. В коде просто вводится САМООГРАНИЧЕНИЕ на количество элементов в массиве. В памяти по-прежнему лежит 5 интов, но последний цикл читает только до n, который равен 4.

> Как можно вызвать LA[5]


Никак, при n = 5 тело первого цикла уже не выполняется, т.к., n < 5 ложно. То же и при n = 4 во втором цикле.
929190929193
sage #101 #929190
>>929189

> т.к., n < 5 ложно


i < n (т.е., i < 5)
18 Кб, 480x270
#102 #929193
>>929179
>>929189
>>929184
Блядь, не тот пример скопипастил, вот это имелось ввиду:

#include <stdio.h>

main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;

printf("The original array elements are :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}

n = n + 1;

while( j >= k) {
LA[j+1] = LA[j];
j = j - 1;
}

LA[k] = item;

printf("The array elements after insertion :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}
}
18 Кб, 480x270
#102 #929193
>>929179
>>929189
>>929184
Блядь, не тот пример скопипастил, вот это имелось ввиду:

#include <stdio.h>

main() {
int LA[] = {1,3,5,7,8};
int item = 10, k = 3, n = 5;
int i = 0, j = n;

printf("The original array elements are :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}

n = n + 1;

while( j >= k) {
LA[j+1] = LA[j];
j = j - 1;
}

LA[k] = item;

printf("The array elements after insertion :\n");

for(i = 0; i<n; i++) {
printf("LA[%d] = %d \n", i, LA);
}
}
929195929206929209
5 Кб, 303x335
#103 #929195
>>929193
Вот вывод:
#104 #929205
>>929179

> Анон, этот пример ломает мне мозг


А что, если я скажу тебе что массив это ЕБАНЫЙ МАКРОС?
http://ideone.com/YFLDAa
929592
#105 #929206
>>929193
Закопай это. И автора примера рядом закопай, потому что так делать нельзя, ты пидарасишь стек.
929313
#106 #929209
>>929193

>printf("LA[%d] = %d \n", i, LA);


Шта? Как это может вывести значение элемента массива, когда здесь должно быть выведено значение указателя LA?
929211
#107 #929210
>>929124
А ты слышал о UTF-8?
929213929215
#108 #929211
>>929209
У макаки спроси.
#109 #929212
>>929143
Nano, a лучше божественный sandy.
#110 #929213
#111 #929215
>>929210
Первые 128 символов UTF-8 скопированы из ASCII. Мало того, эти символы не встречаются в continuation bytes UTF-8, поэтому при парсинге чисел знать про UTF-8 совершенно незачем.
929223929226
#112 #929223
>>929215

>128


127
Алсо, для индексации символов приходится перебирать всю строку с начала. Как это сделать более лучше? Есть либы, где строка индексируется блоками, чтобы хоть не с начала перебирать?
929228929242929262
Dmitry #113 #929226
>>929215
Спс, я посмотрел как это делается, там -'\0' делается, ну не такая хуйня как свитч по крайней мере.
Туго в сишке без ассинхронного выполнения, Iterators, Generators, Promises,callback functions, Destructuring, Coercing, strings, вот когда все это завезут сишка вернет былую величь.
Хорошо хоть в FB и OOP кое-как можно.
929231
Dmitry #114 #929228
>>929223
Указатель итерируй.
#115 #929231
>>929226
Асинхронность в сишке запилили очень давно. Либа State Threads, например.
929238
Dmitry #116 #929238
>>929231
А вообще имеет ли смысл использовать асинхронность вместо многопоточности, при условии что ОС может в многопоточность?
Как оно в железе происходит, если я на кнопку должен нажать процессор ждет сигнала или все время проверяет в каком состоянии кнопка?
929241929242929247
#117 #929241
>>929238
Имеет, если программируешь прокси/лоад-баланцырь. В остальных случаях значимость сильно преувеличена, поскольку ботлнек как правило в других местах.
sage #118 #929242
>>929223

>127


128

>>929238
ракая яичек тебе, кстати.
#119 #929247
>>929238

>асинхронность вместо многопоточности


Это не взаимозаменяемые понятия?
929251
#120 #929251
>>929247
Ну, тут целых три понятия на самом деле:
1) потоки, поддерживаемые API ОС типа posix threads
2) искусственные потоки, которые типа быстрее и легче, но на самом деле только в очень частных случаях
3) ну и асинхронность, собственно. Асинхронность в сях есть изначально, поскольку это не вопрос языка даже.
929254
#121 #929254
>>929251
асинхронность это же просто общее понятие, которое обозначает недетерминированное выполнение кода, под которое попадают и треды, и параллельные процессы
929257929260
Dmitry #122 #929257
>>929254
Я под асинхронностью имел в виду асинхронность при том что поток один.
Вот например у меня кусок кода который выполняется 4 секунды, после этого я вызываю асинхронную функцию которой передаю строку и цифру, вот все выполнилось но програма не закрылась и на 5 секунду выводит строку.
929264
#123 #929260
>>929254
Вообще да, но есть асинхронность с коллбэками/сигналами, а есть асинхронность с потоками - это уже другое. Отдельного термина для асинхронности без потоков вроде нет. То есть асинхронность бывает разная.
#124 #929262
>>929223
128. С 0 по 127 включительно.

> Есть либы, где строка индексируется блоками


Нужен произвольный доступ - не усложняй себе жизнь, декодируй до char32_t. По необходимости потом обратно закодируешь.
#125 #929264
>>929257
В сях это можно и очень давно. Так давно, что все уже об этом забыли, тем более, что действительно нужно это бывает в очень частных случаях.
929265929267
Dmitry #126 #929265
>>929264
А в ECMAScript так и живут.
#127 #929267
>>929264

>Так давно, что все уже об этом забыли


так напомни
929269
#128 #929269
>>929267
NSPR, ST, Apple там что-то сделал тоже.
929272
sage #129 #929271
Умиляет этот шизик-вниманиеблядь из /s. Прикатывается сюда раз в три месяца, засирает тред нескончаемым потоком кретинских вопросов и не менее кретинских умозаключений, закономерно получает залуп на воротник и укатывается обратно, до следующего раза.
929273
Dmitry #130 #929272
>>929269
Мне сказали почитать книжку про программирование для POSIX/UNIX/GNU посоветуйте годноты?
Я пока не собираюсь професионально на сях писать, но хочу сделать себе удобный примитивный оконный менеджер для Wayland, и починить некоторые кривые продукты sic sandy. А еще собираюсь после жаваскрипта и вебасм взятся за Goпарашу, а там С-шные вставки могут понадобится.
929274929275
Dmitry #131 #929273
>>929271
Василий это ты?
929340
#132 #929274
>>929272
linux system programming
#133 #929275
>>929272
Ричард Стивенс, «Программирование UNIX».
928 Кб, 800x733
#134 #929313
>>929206
Да как это вообще может быть?! Почему нет ошибки "Array index error - max exceeded" или что-то подобное?!
Почему он залезает в стек? В книжках и в гугле везде написано, что если инициализация массива такова:
int LA[] = {1,3,5,7,8};
то создается массив размером только с количество элементов в скобочках.
Что за пиздец?
sage #135 #929318
>>929313

> Почему нет ошибки "Array index error - max exceeded" или что-то подобное?!


Потому что это Си. Границы контролируешь ты сам. Или не контролируешь, но если вдруг вылезешь за границы, может произойти что угодно. На самом деле, в gcc/clang есть -fsanitize=address для ловли подобных багов, но лучше изначально стараться их не допускать.

> Почему он залезает в стек?


Это не он, это ты залезаешь в стек.

> создается массив размером только с количество элементов в скобочках


Да, создается массив фиксированного размера. Хочешь динамически расширяемый - тебе дали malloc/realloc из stdlib.h, городи что хочешь.
929320
#136 #929320
>>929318
То есть это от компилятора зависит?
929341
160 Кб, 1080x1920
sage #137 #929340
>>929273
Что, простите? Я вас не слышу.
sage #138 #929341
>>929320
Нет. Опция, про которую я говорю - отладочная. Она жрет память как не в себя, да и вообще в целом тормозит. Если хочешь, чтобы за тебя что-то контролировали, выбери какой-нибудь другой язык. Си хорош как раз тем, что не лезет к тебе со своими ценными мнениями, а просто делает, что сказано. Даже если сказано что-то странное.
929350929529
#139 #929343
>>929071
Но зачем мне текстовы рндактор, если я спрашиваю немного о другом?
Я так понимаю вариантов больше нет.
Спасибо тебе, агон:3
929347929744
Dmitry #140 #929347
>>929343
GNU Make, Cmake (Коляска), любой текстовый редактор, GCC/Clang
#141 #929350
>>929341

> Си хорош как раз тем, что не лезет к тебе со своими ценными мнениями, а просто делает, что сказано. Даже если сказано что-то странное.


> хорош


Но ведь именно поэтому в любой программе на си миллионы дыр, которые приходится фиксить десятилетиями.
929351929529
sage #142 #929351
>>929350
Ну вот PHP сам управляет памятью и контролирует границы массивов, но почему-то у нас полный веб дырявых скриптов. А все потому, что проблема не только в инструменте, а в людях.
929353
#143 #929353
>>929351
В похапе не переполнения, а скл-запросы строками и тому подобная дичь. То есть он такое же говно но по другой причине.
929438
Dmitry #144 #929438
>>929353
Сишка пережила пехопе. И переживет все остальное. Это отличный портабельный язык, простой без этих ваших хуе-мое.
Правда настораживает что многое на плюсы переписали, говорят что проэкты говнистее стали, хотя я хз.
930381
#145 #929488
>>928505
А нельзя в сишке какой-нибудь конструктор или деструктор запилить? Или деобъявитель переменных, который память изпод-них обнуляет?
929494929501
#146 #929494
>>929488
$ man malloc(), free, calloc,recalloc.
Дальше сам разберешься.

Вопрос почему в сишке нельзя возвратить функцию из функции которая возвращает функцию? Или передавать функцие функцию при вызове(ой, может быть это можно).
И какого хера такое пытаются использовать вообще в жс и в хацкеле насколько знаю?
929508929510
#147 #929501
>>929488

>деструктор запилить? Или деобъявитель переменных, который память изпод-них обнуляет?


http://echorand.me/site/notes/articles/c_cleanup/cleanup_attribute_c.html
#148 #929508
>>929494
В Сишке можно возвратить функцию из функции, которая взвращяет другую функцию, хотя для этого придётся со структурами покарпеть. И вроде такая хуерга называется ООП с огромным количеством родительских и дочерьних классов. А когда весь код написан по сути одними функциями, которые иногда абсолютно магическим образом работают, то такой стиль программированния называется функциональным. Сюда нужно для этого хоскеллистов подвезти, чтобы они за функциональщину раскидали.
929512929525
#149 #929510
>>929494
Передавай и возвращай указатели на функции, кто тебе мешает.
#150 #929512
>>929508
бладжд, забыл добавить, что из всех функций, сколько бы ты их рекурсивно не вызывал main никогда рекурсивно не вызывается, иначе пиздос памяти и стеку.
Dmitry #151 #929525
>>929508
Функциональный стиль прост - один ввод - один вывод, функция не должна нихера делать, только возвращать значение, функция должна иметь только один аргумент чтобы лекго принимать результат другой функции.
Получается очень элегантный и минималистичный код, это продуктивно, легко дебажить, тяжело скатить код в говно. Но минус такого подхода что функции состоят из других функций а те еще из одних, в джава скрипте для каждой функции создается свой scope, execution context, в общем переменные и все все, и памяти жрет больше и работает дольше, ибо надо вызывать кучу других функций, в сишке хоть оверхед не так велик, но в императивном стиле более производительно пишется, хоть приходится повторять одно и тоже много раз в коде.
929528929538
#152 #929528
>>929525
В итоге как люди бежали от спагетти кода с кучей "goto" так к функциональщине и прибежали. Всё-таки "компек" это не абстрактная машина а вполне себе рабочий аппарат, который что-то где-то да хранит и иногда всё-таки нужно в рукопашку контроллить данные и не пускать их на функциональный самотёк.
929538929545
#153 #929529
>>929350
>>929341

Но ведь невозможно написать проект на несколько сотен тысяч строк, и не допустить такую маленькую ошибку! Это же дебажный ад, неужели ворнинг какой-нибудь не придумали, 2017 же на дворе.
929545930200930378
#154 #929538
>>929525
Вы прослушали изложение функционального программирования в изложении JS-довена.
>>929528
Ещё один "эксперт".
929541
#155 #929541
>>929538

> изложение в представлении

Dmitry #156 #929545
>>929529
Ворнингов хватает еще в компиляторе, их надо убирать полностью, есть еще и линтеры для сей насколько знаю, но опеншорш только один в генту репе нашел. Есть GDB и еще куча инструментов для отладки и дебажки, с - простой язык, в нем легко находятся косяки.
>>929528
готу уже не юзабелен, есть же циклы, свитчи, хотя в некоторых случаях может пригодится, но обычно природа задачи такова что не нужно прыгать на произвольную строку.
Функциональное решение по крайней мере может быть лучше чем OOP, а если не юзать функции внутри функций то и с производительностью особо не соснешь. FP это еще куда не шло, но OOP с инкапсуляцией и наследованиями,this и прочей фигней куда прожорливее, и часто костыльнее функционального кода.
929585929588
#157 #929585
>>929545

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


Я настолько нихуя не понял в этой фразе, что даже внезапно проиграл.
929595929601929751
#158 #929588
>>929545

>Ворнингов хватает еще в компиляторе


Ну, обсуждение и началось с примера, где вызов элемента массива залезает за свою границу в стек, а компилятору - похуй. Потому что, типа, "если программист так сказал - значит надо!", в то время как ясно что это очевидная ошибка.
#159 #929592
>>929205

>А что, если я скажу тебе что массив это ЕБАНЫЙ МАКРОС?


Пруф неси, маня.
#160 #929595
>>929585
видать линтеры это какие-то багоуловители, которые фиксят предупреждения компилятора (ворнинги). Есть они для Си в закрытых исходниках. А в открытых исходниках были найдены в дистрибьютиве линукс Генту в одном их репозиториев. Но для отладки (дебагирования) используетя инстурмент GDB, который автоматически встроен в линукс-дистрибьютивы.
#161 #929601
>>929585

> Ebal_Ee_Ruka.h

#162 #929743
>>929313

> Да как это вообще может быть?! Почему нет ошибки "Array index error - max exceeded" или что-то подобное?!


Потому что массива на самом деле нет, есть только указатель. А все эти квадратные скобочки, индексы - просто сахар.
929762
#163 #929744
>>929343

> Но зачем мне текстовы рндактор, если я спрашиваю немного о другом?


так уточни, что тебе нужно
#164 #929751
>>929585
не обращай внимание, скоро ты перестанешь вообще его понимать и он растворится между постами.
#165 #929760
ладно, давайте вернёмся к старому доброму. как быть с байтами в структуре, которые дополняются до кратности к выравниванию, конкретно в конце структуры. я правильно понимаю что их значение не определено и компилятор сделает код которые не будет изменять эти байты? читать то наверное будет. короче, напомните раздел в стандарте, хотелось бы нормально про компоновку и выравнивание прочесть, например ещё, с какой стороны будут добавлены байты выравнивания - это же определено? хуйцов да?
929794929811929991
sage #166 #929762
>>929743
Массивы существуют, имеют тип "array of чего-то там". Для обращений через имя массива вполне реально отслеживать границы с минимальными усилиями со стороны компилятора. Такое даже запиливают периодически в разных компиляторах. Другое дело, что это нахуй никому не нужно. Для контроля границ можно написать явный код или перекатиться на Java/C#.
#167 #929794
>>929760

> с какой стороны будут добавлены байты выравнивания


к границе слова, епт
929804
#168 #929804
>>929794
гениально ёпта. а если внутри этих байтов-выравнивания поместить байт-значение, куда его распидорасит?
sage #169 #929811
>>929760

> я правильно понимаю что их значение не определено


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

> с какой стороны будут добавлены


Implementation defined. Но очевидно, что в начале структуры выравнивание добавлять бессмысленно (для этого выравниваются экземпляры структуры и указатели), нужно выравнивать только второй и следующий члены, и размер самой структуры (чтобы второй и последующие элементы массива структур сохраняли вырванивание).

Так все и делают: ищется член структуры с максимальным "натуральным" (требуемым) выравниванием, это выравнивание используют, как выравнивание самой структуры; пишется первый член структуры; втыкается выравнивание под следующий член, пишется следующий член, и т. д., пока члены структуры не кончатся; в конце втыкается выравнивание размера самой структуры. Если с помощью прагм или атрибутов выравнивание ограничено (типа pack(1)), то компилятор втыкает выравнивание не больше указанного. Есть еще alignas/alignof в C11, он меняет "натуральное" выравнивание типа на указанное.

В стандарте это все разбросано, читай 6.2 и 6.7 (C11) целиком.
49 Кб, 1442x337
#170 #929972
Вопрос про студию. Пикрилейтед.
Как мне сделать фильтрацию ворнингов, чтобы показывались только файлы из моего проекта/солюшена и не показывались ворнинги на файлы из стандартной библиотеки и прочего кала?
929982
sage #171 #929982
>>929972
Ты можешь отключать варнинги через прагму до инклуда и включать обратно после. Других идей нет.
https://msdn.microsoft.com/ru-ru/library/2c8f766e.aspx
#172 #929991
>>929760
tproger.ru/translations/art-of-structure-packing/
Тут чутка расписано.
зануда-кун #173 #929999
Сап, анон. Пишет вкатывающийся линуксоид. Вроде тредом чутка промахнулся, но си на линуксе неслабо подвязана, так как в своё время одно писалось для другого и наоборот. И знаешь, что? У меня пиздец как горит от того, что все сокращения утилит в линухе хуй пойми как названы. Как я, блять, (нубас в английском) должен догадаться нахуй, что ls - это лист данной директории? Как я блять должен сразу же догадаться, что cd - это "change directory"? Как я блять, должен догадаться, что ln - это "линк" для ссылок? Особенно пиздец горит, когда си-кодеры, да и вообще все кодеры точно также называют свои переменные. Как я, нахуй, по двум буквам должен, блять, догадаться, что значит данная команда или утилита? Для мен ls недавно ассоциировалось с low skill`ом. Как мне понимать эту ёбанную семантику команд?
#174 #930000
>>929999
Вот у верстальщиков теги неплохо расписаны, понятно, хотя теги src и img тоже иногда будоражат моё воображение и заставляют представлять какие-угодно слова кроме image и source.
#175 #930054
>>929999
cd, mkdir - тоже что и в окнах. 2 курс технаря.
#176 #930065
>>929999

>Как мне понимать эту ёбанную семантику команд?


Почитай posix. Как ты linux используешь, не понимая базы?
sage #177 #930066
>>929999
Учить их.
#178 #930086
Аноны, что почитать?
Прочел(пролистал) первую книгу из шапеи и понял, что 80% всего я и так знаю/использовал. Есть какая книга где все расписано более углубленно, больше всяких фич показано и т.д.?
930094930115
#179 #930094
>>930086
Попробуй http://c-faq.com/
930151
#180 #930115
>>930086
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition"
#181 #930151
>>930094
Эта доброта на русском есть?

мимо
930189
85 Кб, 552x552
#182 #930187
анон выручай. я полный down
задача на "счастливый билет"

void main()
{
int i, j, a, cnt=0;
unsigned int k, a[10], b, n;
printf("\nVvedite znachenie k=");
scanf("%d", &k);

while (k!=0)
{
a[cnt]=k%10;
k=k/10;
cnt++;
printf("a[%d]=%d", cnt, k);
}
пишу любое число и надо чтобы записал каждый разряд отдельно и посчитал длинну начального числа
a[0]=...
a[1]=... и т.д. как это правильно записать? и у меня выдает ошибку "error: conflicting types for a"
поясните как написать правильно или алгоритм решения.
930242
#183 #930189
>>930151
Сомневаюсь.
#184 #930200
>>929313
Если ты немного еще RTFM K&R, то увидишь, что arr - это сахарок. На самом деле доступ к элементам массива осуществляется через указатель на начало массива плюс смещение. Например:
int arr = ptr_to_arr + i*sizeof(int).
Как видишь, даже если у тебя массив из двух элементов, ты можешь получить доступ хоть к arr[9000].

>>929529

>Но ведь невозможно написать проект на несколько сотен тысяч строк, и не допустить такую маленькую ошибку! Это же дебажный ад


Естественно, невозможно. 99% кода на сишечке - баг на баге сидит. Если ты залезешь в чужую область памяти и крашнешь что-то - считай что повезло, хуже когда происходят трудноуловимые изменения. На С стоит писать оптимизацию каких-то нагруженных участков, для больших проектов есть свои инструменты.
930219930477
#185 #930219
>>930200

> int arr = ptr_to_arr + i*sizeof(int).


Во-первых, ты забыл разыменовать. Во-вторых, не надо никаких sizeof(int) помноженных на величину смещения. Как-то так: http://ideone.com/J7TTQj
930222930225930667
#186 #930222
>>930219

>int


>main(void)


Это сейчас так модно писать?
#187 #930225
>>930219
Пиздец, это тоже работает:

>int arr[] = { 2, 8, 2 };


>printf("%i\n", (arr + 500));



И это:

>int arr[] = { 2, 8, 2 };


>printf("%i\n", (arr - 100));



Как вообще организовать правильный безопасный доступ к элементам массива? Через гиту и зиту?
930232930284930489
#188 #930230
>>930222
так предписывает С88 стандарт писать. Современные-то компиляторы могут и без войда просто пустые скобки, как например все "скиллованные" обожают писать.
930240
#189 #930232
>>930225

>Си


>безопасный

930241
#190 #930240
>>930230

>Современные-то компиляторы


ОЛДФАГ ДОХУЯ?
930245
64 Кб, 529x647
#191 #930241
#192 #930242
>>930187
3: int i,j a, cnt=0
4: unsigned int k, a[10],b,n

> у тебя а массив или просто переменная? Убери все переменные, которые в коде не используешь.

#193 #930245
>>930240
Да не. Я просто помню, что когда искал мануалы по си в инете (вот не надо меня камнями закидывать только). Наткнулся на ман какого-то ебанутого додика, который хуй пойми как писал. А потом я полез в гугл про стандарты читать и, оказывается, что тот додик писал на 88 стандарте, после ахуевания я ещё вдобавок узнал, что у GCC есть опция -std=c99 или в любом другом стандарте конпелить.
930251
#194 #930251
>>930245

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


Современные как раз не могут. В современных стандартах сказано, что void для функций без аргументов обязателен, а использующие старый синтаксис официально объявлены пидорами. С пустыми скобками пишут в крестах.
930255930260
#195 #930252
>>930222
энтер неспецом прожал, не было никогда что ли?
930266
#196 #930255
>>930251
Я так иногда на GCC делал, когда меня мой парень в это время в жоп драл. Ну, он же вроде часто обновляется и в новых обновах это ведь не выпилили. Я про другие толком не слышал. Разве что вот подумываю какой-нибудь интерпритатор запилить. Есть годнота на примете?
#197 #930260
>>930251
А многие компиляторы для сей могут плюсы конпелить? Почему-то везде плюсы ассоциируются с няшной.
930657
#198 #930266
>>930252
А красиво же получилось!
#199 #930281
>>930222
переносом строки имя функции отделяют от типа, чтобы можно было проще грепать, где функция определена
#200 #930284
>>930225

>Как вообще организовать правильный безопасный доступ к элементам массива?


Тебе сначала нужно придумать эти массивы, т.к. в C их нету.
930404
#201 #930338
Вот такой пиздос всё ещё чистый Ц или уже кресты?

struct bulletObject{
int id;
float r, g, b;
bool hit;
btRigidBody body;
bulletObject(btRigidBody
b, int i, float r0, float g0, float b0) : body(b), id(i), r(r0), g(g0), b(b0), hit(false) {}
};
930342
#202 #930342
>>930338
Кресты. В С ':' используется только в тернарном операторе.
930363930530
#203 #930363
>>930342
Спасибо!
В этом тхреаде преведствуются вопросы по крестам? У меня их много, ибо только вкатываюсь
Их собственный тред мёртв.
930371930768
sage #204 #930371
>>930363

>В этом тхреаде преведствуются вопросы по крестам?


нет

>Их собственный тред мёртв.


какая ирония, если вспомнить, как часто хоронили си
930432
#205 #930378
>>929529

>Это же дебажный ад, неужели ворнинг какой-нибудь не придумали, 2017 же на дворе.


Придумали миллион языков без прямого доступа к памяти, например.
#206 #930381
>>929438

> портабельный язык


Сколько там размер int?
930382930494
#207 #930382
>>930381
Если нужен фиксированный размер, есть (u)int(N)_t. А если фиксировать размер int, окажется, что на 8-битном контроллере компилится не код, а говно, и на 64-битном процессоре не код, а говно. А уж что скомпилится на 24-битном DSP, так и сказать страшно.
930385
#208 #930385
>>930382
Но ведь там и так компилится говно, баги переполнения гроб кладбище на ровном месте, везде приходится расставлять костыли под миллион платформ. Поэтому во всех современных языках фиксированные размеры.
#209 #930398
Как отказаться от глобальных переменных на неск.модулей и связанными с ними extern?
Не тралю ниразу, просто припекло
930411
#210 #930404
>>930284
Ну ок, а дальше что?
Как С-бояре элеминируют ошибки доступа куда не надо?
Какую-то оберточную функцию надо прикручивать, а в ней уже проверки границ? Подкинь таких если они есть.
Не хочу велосипеды писать.
#211 #930409
>>930404
просто пиши тесты.
#212 #930411
>>930398
Прежде чем отказываться, обоснуй причины. То, что так сказал дядя из умной книжки - не причина.

>>930404

> Как С-бояре элеминируют ошибки доступа куда не надо?


Помнят о том, что не нужно лезть, куда не надо. Какие блять оберточные функции? Нахуй тебе си, если ты в индексах ошибаешься? В си еще undefined behavior есть, его много, и он страшный. И его не проверишь в большистве случаев, надо знать и писать правильно. Поэтому иди ка ты и пиши на Java, там за тебя все проверят и попку подотрут.
930416
sage #213 #930412
>>930404

>Как С-бояре элеминируют ошибки доступа куда не надо?


Пишут код, который этого не делает.
930425
#214 #930416
>>930411
Ебучий ассемблер без задач.
#215 #930425
>>930412
Такого кода на си не существует.
930430
sage #216 #930428
>>930404
Нашел где спрашивать блядь, на сосаче.

>Many programming languages, such as C, never perform automatic bounds checking to raise speed. However, this leaves many off-by-one errors and buffer overflows uncaught. Many programmers believe these languages sacrifice too much for rapid execution.[who?] In his 1980 Turing Award lecture, C. A. R. Hoare described his experience in the design of ALGOL 60, a language that included bounds checking, saying:



"A consequence of this principle is that every occurrence of every subscript of every subscripted variable was on every occasion checked at run time against both the upper and the lower declared bounds of the array. Many years later we asked our customers whether they wished us to provide an option to switch off these checks in the interest of efficiency on production runs. Unanimously, they urged us not to—they already knew how frequently subscript errors occur on production runs where failure to detect them could be disastrous. I note with fear and horror that even in 1980, language designers and users have not learned this lesson. In any respectable branch of engineering, failure to observe such elementary precautions would have long been against the law."

Кароч.
Функции проверки границ в С нет, из-за желания повысить скорость выполнения. Если тебе эта скорость критична - готовься к пиздецу с тестировкой/сопровождением.
Если тебе на скорость похуй в разумных пределах - пиши на языке, который создавался после эпохи ферритовых накопителей.
930449
sage #217 #930430
>>930425

>Такого кода на си не существует.


откуда это могут знать мамкины кулхацкиры на сосаче?
930441
#218 #930432
>>930371
ЭТО ПЕРЕМОГА
930765
#219 #930441
>>930430
Доброе утро, даже в таких огромных проектах, как пердоликс, которые пишут самые профессиональные байтоёбы, латают дыры по 30 лет подряд.
930448
#220 #930448
>>930441
Доброе утро, даже в таких огромных проектах, как виндовс, которые пишут самые профессиональные ооп-шники, латают дыры по 30 лет подряд.

в пердулекс, между прочем, пишут все кому не лень, это же швабодный софт
930453
#221 #930449
>>930428
Но ведь память и так имеет скорость 30гб/сек, что ей будет от лишней проверки?
930450930462930465
#222 #930450
>>930449
а кэши?
930474
#223 #930453
>>930448
А что, виндовс написан на джяве? К чему ты это вскукарекнул?
930454930455
#224 #930454
>>930453
виндвос написан на крестах в большей мере, чем на си, если я не ошибаюсь
930462930467
#225 #930455
>>930453
на с++, где как-бы можно прикрутить любые проверки.
930467
#226 #930462
>>930449
Дело не в памяти, дело в проце - бранчи сбрасывают конвейер. К тому же, проверкой можно решить проблему с массивами, а проблема с валидацией указателей (при сохранении гибкости этих указателей) решается гораздо сложнее и дороже.

>>930454
В винде ядро на Си, интерфейс (Explorer-ы всякие) на крестах.
#227 #930465
>>930449
такты жи процессора на это уходить будут энивей
930474
#228 #930467
>>930454
Вся низкоуровневая ебанина на си, к тому же кресты это такой же кусок говна, только с классами.

>>930455
А ещё можно невозбранно отстрелить себе обе ноги, так как указателей и массивов никто не отменял.
930469
#229 #930469
>>930467
да я не спорю, прост во попенсорсе по определению больше будет багов - это норма.

кстати, что насчёт тех слитых исходников винды, можно такое найти на торрентах, или там ничего интересного?
930478
#230 #930474
>>930450
А что, размер не влезет в мегабайтный кэш?

>>930465
Скажи честно, ты когда-нибудь видел программу, где боттлнеком является один лишний такт проверки, а не IO и не йоба тяжёлые вычисления?
930480930615930666
#231 #930477
>>930200

> arr - это сахарок.


Напиши тогда, во что раскрывается объявление массива, если это "сахарок".
930667930672
#232 #930478
>>930469
Я скачивал какие-то исходники некрошинды, но так и не нашёл им применения.
#233 #930480
>>930474
опять начинается эта хуйня. заебись так рассуждать попивая сок у себя на x86-64 .
930493
#234 #930489
>>930225

>Как вообще организовать правильный безопасный доступ к элементам массива?


Просто не вылазь за границы и всё.
930496
#235 #930491
>>930222

>>int


>>main(void)


>Это сейчас так модно писать?


Всегда модно было.
#236 #930493
>>930480
В каждом телефончике уже по 8 ядер и 4 гига, и джява крутится. К чему этот кукарек про скорость в 2017?
930496
#237 #930494
>>930381

>Сколько там размер int?


Ровно sizeof(int)
#238 #930496
>>930489
вообще, какая-то надуманная проблема. после того как я начал ставить assert'ы на каждый входящий в функцию аргумент, давно уже не помню таких ошибок.

>>930493
ясн.
930501
#239 #930501
>>930496

> начал ставить assert'ы на каждый входящий в функцию аргумент


Пизда скорости теперь, проверки же любой Xeon на лопатки кладут.
930502
#240 #930502
>>930501
assert-ы удаляются при определении NDEBUG
930503930510
#241 #930503
>>930502
ну и зачем ты ему сказал? дал бы ему ещё потралировать).
#242 #930509
С libldap кто-то работал?
#243 #930510
>>930502
Защищённый дебаг и дырявый продакшон, охуенно придумал.
930532
#244 #930530
>>930342

>В С ':' используется только в тернарном операторе.


А как же битовые поля в структурах? На самом деле я ни разу не видел, чтобы их кто-то использовал.
930536930674
#245 #930532
>>930510
поддвачну, однако
#246 #930536
>>930530

>битовые поля


в хедерах для микроконтролёров, ибо имеет смысл
#247 #930615
>>930474

>Скажи честно, ты когда-нибудь видел программу, где боттлнеком является один лишний такт проверки, а не IO и не йоба тяжёлые вычисления?



Что за коммент из 2017?
Мы живем духом СТАРОЙ ШКОЛЫ!! С88!!
930628
#248 #930628
>>930615
А лишний регистр не жалко? Их не так много у x86.
#249 #930636
Ебанаты сраные, сперва напишите что-то типа postgresql на своей сраной гошечке или расте, а потом кукарекайте про проверки индексов в массиве, ок? Пока вы даже gui нормально не смогли запилить. И с дженериками обосрались, хотя промежуточный вариант без фанатизма не лишним был бы.
930659930727930761
#250 #930657
>>930260
Ни один не может, так как в сей инклюды иначе называются чем у сегодняшних плюсов, а вот старый код на плюсах можно собрать, если не юзать там ни одного костыля с плюсов.
Вообще плюсы это мэм, забудь за это говно, сишка пережила пацкаль, фортран, раст, ада, плюсы тоже скоро в небытие уйдут, сколько можно говно вилкой чистить.
930720
Dmitry #251 #930659
>>930636
Гуи все и так на сишечке написаны, что сказать хотел то?
#252 #930666
>>930474

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


Да, называется ядро ОС. Представь себе, если в какой-нибудь популярный syscall надобавлять кучу проверок, как твоя система разом залагает.
#253 #930667
>>930477
В глаза долбишься? >>930219
930672
#254 #930672
>>930477

>объявление массива


Сорян, это я долблюсь в глаза. Пропустил, что ты про объявления спрашиваешь.

>>930667-кун
#255 #930674
>>930530
Я в ядре Linux их наблюдал и даже в w3m.
#256 #930720
>>930657
Блять, вот честно, я не знаю как люди говно умудряются обеими руками наворачивать, серьёзно. Если существуют на свете русские рэперы, то и существуют плюсы для таких же людей. Есть люди, которым ты часами можешь объяснять, что то, что они делают хуйня полнейшая, дак они тебя пошлют и ебанатом назовут. С крестописаками такая же ситуация, вроде бы.
#257 #930727
>>930636
Cassandra вообще на джяве
64 Кб, 618x486
#258 #930757
Ритчи дал им инструмент, чтобы в обход сегфоултов можно было из одного кода вторгаться в другой, а они ругаются, плюются и пытаются это "обезопасить". Даже мамкины кулхацеры уже не те нынче. А раньше вот трава зеленее была.
>>929313
#259 #930761
>>930636

>с дженериками


void* не осилил?
#260 #930765
>>930432
В треде украинские погромисты! Всем в АТО!
#261 #930768
>>930363

>В этом тхреаде преведствуются вопросы по крестам?


В гугле приветствуются. Вообще 99% ответов на вопросы по крестам можно узнать из стандарта.
930817
#262 #930817
>>930768

>можно узнать из стандарта


книжки читать я и сам умею
930835
#263 #930835
>>930817
Тогда видосики смотри
#264 #930848
Первый день вкатываюсь в программирование, нид хелп:

int d;
for (d = 0; getchar() != EOF; d++);
printf ("%d\n", d);

Должно выкатиться число букв, но не выкатывается ничего. Если вывод захуярить в цикл, то это говно будет вместе со мной считать буквы как ебанутое, 0 1 2 3 4 5 6 7 картошку ем блядь. Почему так?
930851930867
#265 #930851
>>930848
d неопределено при выходе из цикла. Во всех ЯП.
930854930867
5 Кб, 541x197
#266 #930854
>>930851
Пример из книжки пытается меня наебать?
930859930875930879
#267 #930859
>>930854
пример охуенен уже самим double nc для лупа , где ловят байтики
#268 #930867
>>930851
Ты несёшь хуйню.
>>930848
Как ты запускаешь программу? Просто в консоли или перенаправлением stdin из файла?
930868930888
#269 #930868
>>930867

>Ты несёшь хуйню.


согласен.

для EOF Ctrl+Z и ENTER

у меня работает
#270 #930875
>>930854
Что за наркоман такое писал?

#include <stdio.h>

void main()
{
int c, charCount;
charCount = 0;
c = getchar();
while (c != EOF && c != '\n')
{
charCount++;
c = getchar();
}
printf("Char count: %d\n", charCount);
}
930906
#271 #930879
>>930854
после ввода буковок жми на enter
930889930898
#272 #930888
>>930867
Я поставил кодлайт, через неё и запускаю, все остальные хэллоуворлды работали нормально
#273 #930889
>>930879
...и ничего не выводится
930891
#274 #930891
>>930889
как ты вводишь EOF?
на шиндовс надо Ctrl+Z
на пердоликсе, вроде, Ctrl+D
930893
#275 #930893
>>930891
А никак, в этой книжке такого не было, надо другую найти, пожалуй
930894930896
#276 #930894
>>930893
то есть как "никак"?
Ты из цикла выйдешь лишь получив EOF
930903
#277 #930896
>>930893
1. вводишь буквы, потом enter
2. жмёшь Ctrl+Z (Ctrl+D на пердоликсе) и опять enter
3. PROFIT
930905
305 Кб, 397x581
#278 #930897
Кому-нибудь нужна эта годнота?
931728
#279 #930898
>>930879
ENTER выдает символ '\n', нужно делать проверку еще и на него, а не только на EOF.
930900
#280 #930900
>>930898
ты попробовал? нет
я попробовал и на моём шиндовс без enter из цикла не выйти
И мне пофиг, почему это так
930906
#281 #930902
Как на си реализуется обработка пакетов низкоуровневых протоколов в зависимости от типа пакета? Пишут длинные портянки со switch-case или каким-то образом портируют паттерн Statemachine на си?
930907930915
#282 #930903
>>930894
Всё, что я знаю о программировании, было подчерпнуто мной из уроков информатики в восьмом - девятом классах и из двадцати страниц этой книги. И там ничего не было сказано про вот эту всю хурму, про комбинацию первый раз слышу
930910
#283 #930905
>>930896
Буду знать, спасибо
#284 #930906
>>930900
Используй этот код: >>930875
И выходи из цикла при нажатии ENTER
930912
#285 #930907
>>930902

>типа пакета


уходи наркоман
930911
#286 #930910
>>930903
Скорее всего код откуда-нибудь из UNIX.
#287 #930911
>>930907
Пакеты по-разному обрабатываются в зависимости от значения одного поля структуры.
#288 #930912
>>930906
я заменил EOF на '.'

но выход только по enter
вот такая хрень с getchar под шиндовс
931045
#289 #930915
>>930902
на то и низкоуровневость, чтобы ипацца с байтами
#290 #931045
>>930912

> вот такая хрень с getchar под шиндовс


stdin по умолчанию line-buffered, и не только под шиндовс. Т.е., ОС ждет ввода целой строки (т.е., до Enter или EOF) и только потом отдает сишной либе данные, и только после этого сишная либа может вернуть тебе эти данные посимвольно или как-либо еще.
931206
#291 #931206
>>931045

>до Enter или EOF


в случае моего шиндовс потребовался enter и после EOF (Ctrl+Z)
8 Кб, 159x264
#292 #931210
Есть клиент, который работает с UDP-сокетами. При запуске он перебирает список серверов для начальной загрузки своего списка пиров и запрашивает с каждого сервера список. Я не совсем понимаю, как выйти из функции bootstrap, которая этим занимается. В этой функции есть цикл по всем серверам. На каждой итерации выполняется PULL-запрос к серверу. Как реализовать получение UDP-пакетов с данными пиров так, чтобы после того, как пакеты в сокете кончатся, произошел переход к следующей итерации или выход из функции? Пока что функция recvfrom блокирует главный поток.
931221
#293 #931221
>>931210

>Пока что функция recvfrom блокирует главный поток.


google -> non-blocking sockets
931248
#294 #931248
>>931221
Начал читать, но все равно не понимаю, как мне выйти из функции или отправить запрос другому серверу, когда сервер закончил передавать данные. Сообщение WSAEWOULDBLOCK передается, когда в сокете нет данных, и как следствие, возникла бы блокировка. Что это дает в моем случае? Этих данных могло не быть из-за задержки, например.
931253931255931282
#295 #931253
>>931248
Я кодил под делфи, но функция стандартная от шиндовс: WSAAsyncSelect
переадресовывает мессаги в окно, хендлер которого дашь (даже фейковое через AllocateHWnd)

При UDP, как я понимаю, отсутствует понятие соединения. Образно говоря, ты плюёшься пакетами и в общем случае BROADCAST на 255.255.255.255 все присутствующие получат пакет в горло и при желании ответят на него.

В моем случае у меня была примочка на друине в датчиками. Я не хотел заморачиваться с определением ее айпишника, который в моей локалке всякий раз мог бы быть другим и примочек могло быть несколько. Я броадкастил из компа на 255.255.255.255 и примочка отзывалась, выдавая свой айпишник. Слала мне данные как пулемёт секунды 2-3, после чего сливалась. Решением было подкидывать ей через broadcast пустые мессаги раз в секунду.
#296 #931255
>>931248
вот как-то так.
На Ц однописьково
http://pastebin.com/8DGjrXpX
931273
#297 #931273
>>931255
Короче говоря, у меня сейчас вот такой код: https://paste.ofcode.org/hSsawEu4Jrnm3BbWL8sa6c

Я нашел такой же убогий код в интернете, и у его автора цикл тоже вешался. Можно ли получить все данные с сервера, не подвесить приложение и обойтись без уродливых костылей?
931277
#298 #931277
>>931273
WSAAsyncSelect сделает сокет прозрачным, неблокирующим
#299 #931278
Я тут поразмышляю, хз, есть ли тут еще аноны, которые копались в гномостеке. Можете скипнуть, если лень читать.

Когда хотелось запилить туду лист на gtk3+c (еще в 2013 году), делал себе комманд лайн тулзу, которая бы генерила классы из шаблона. Но из-за работы забил что-то вообще на все. Сейчас вот посмотрел репозиторий - у них появилась действительно фичастая для этого софтина. Но я на убунте сижу, все никак не могу арч накатить чтобы нормально подключится к разработке, ибо оно требует свежих gtk/gdk.

Ковырял вот еще осенью keepassx, который на куте, чтобы попробовать запилить ему морду на gtk. Но как оказалось, там все внутри связанность высокую имеет и пришлось бы полностью софтину перепиливать на gtkmm.

Чем бы таким заняться можно было, пока руки чешуться написать чего-нибудь гуишного?
931525932710
#300 #931282
>>931248

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


С UDP ты не можешь узнать, когда сервер закончил передавать данные, если протокол не предусматривает оповещения об этом (или, например, количество пиров не передается заранее). Если у тебя так, выходи по таймауту.
931535
#301 #931383
Есть одна typedef структура в которой дохуища элементов. Когда я создаю этот тип, то разумеется во всех элементах мусор, а это очень плохо. В сишке есть простой способ инициализировать эти элементы? Писать отдельную функцию для этого? Как-то жирное на каждую структуру функцию выделять.
931392931411931443
#302 #931392
>>931383
memset всё с нули, например
конструкторы для структур появились в Ц++
sage #303 #931411
>>931383
struct foo = { 0 };
Инициализирует нулем первый элемент (какой бы он ни был), забивает нулями все остальные. По сути тот же memset.
Ну или инициализируй сразу нормально:
struct foo = { .a = 1, .b = 2.0f, .c = "hello" };
Или сделай все же функцию для инициализации, скажи, что она inline (хотя даже если не скажешь, компиляторы мелкие функции весьма неплохо с -O3 -flto инлайнят).
#304 #931443
>>931383

>Как-то жирное на каждую структуру функцию выделять


велком ту ооп
#305 #931525
>>931278
Install Gentoo. Arch if laptop. Fedora Rawhide if you too stupid to install Arch.
931555
#306 #931535
>>931282

>Если у тебя так, выходи по таймауту


Пойдет ли такое использование таймаутов, или можно сделать лучше?

https://ideone.com/hiiXzL
931547931868
#307 #931547
>>931535
IMHO застрянешь в лупе на recvfrom
#308 #931555
>>931525
почему для лэптопа арч?
#309 #931575
Пробую одну библиотеку а там дефайны пиздец длинные. Выглядят они примерно так: OCHE_DLINNY_DEFINE_NAME.
Я бы хотел сократить до: ODD_NAME. Делаю: #define ODD OCHE_DLINNY_DEFINE и после этого пишу ODD_NAME, но нихуя не работает. ЧЯДНТ?
931576931609
#310 #931576
>>931575

>но нихуя не работает


Неплохой лог. Но бабка Ванга улетела в Тайланд.
931586
#311 #931586
>>931576
Ну блядь, грит что ODD_NAME ундекляред, фёрст юз ин зыс функшин понимаешь ли, что тут ещё сказать.
#312 #931587
Посоны, вопрос по крестам, но т.к они не хотят пилить перекот - спрошу тут:
Что происходит если 2 длл-ки экспортят одинаковый символ? Или например когда у нас в exe файле уже такой символ есть, но при загрузке и в длл-ке есть. Какой из двух будет вызываться после рантайм линковки?
931779931868
#313 #931588
Есть ли смысл пилить нативное приложение с гуи под винду на си?
Или лучше выбрать реализацию на другом яп?
931608931868931916
#314 #931608
>>931588
есть qt, всякие nucle для богов
#315 #931609
>>931575
Препроцессор работает на отдельных токенах (словах), а не произвольных подстроках, иначе бы, например #define place LOL заменял replaced_items на reLOLd_items и ты бы соснул с проглотом (впрочем, ты и так соснул).
Тебе нужна макро-функция:
#define RASKUKOZHIT(x) OCHE_DLINNY_PREFIX_##x
931725
cat Dmitry #316 #931643
Что бы вы сказали если бы программа которая выводит содержимое файла в консоль занимала 700 строк?
Готовая программа конечно 55кб весит, но мне кажется что 700 строк это дохуя для такой простой программы.
Она бы могла зависеть всего от одной либы и вмещатся в 20 строк.
931656931660931722
#317 #931656
>>931643
зависит же от размера файла
#318 #931660
>>931643

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


Я бы сказал, покажи исходники этой программы. Только потом можно разговаривать.
931693
#320 #931720
>>931693
как будто помимо GNU больше не существует реализаций cat...
https://github.com/freebsd/freebsd/blob/master/bin/cat/cat.c
#321 #931721
>>931693
А где 700? Поудаляй комментарии с форматированием, останется строк 200.
#322 #931722
>>931643

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


ну так перепиши с меньшим количеством строк и сделай пул реквест, кто тебе мешает
#323 #931725
>>931609
Блядь, и как я сам не додумался.
#324 #931728
>>930897
Ну кидай, чо.
931760
#325 #931741
Сап сисач. Visual Studio 2015 (свежеустановленная) не смогла найти stdio.h, нашла только после указания полного пути к нему. Теперь не может найти correct.h и еще пару файлов из кода stdio.h. Как настроить?
#326 #931743
>>931741

>Как настроить?


Накатить Арч/Генту.
931755931767
#327 #931752
>>931741

> компилять на виндах


Удваиваю арч/генту. Да хоть дебилиан.
931755
#328 #931755
>>931752
>>931743
Но лучше конечно же генту.
#330 #931767
>>931743
а без этого?
931775
Dmitry #331 #931769
>>931760
На англ кидай, здесь же не только аутисты сидят.
931773932970
Dmitry #332 #931771
>>931741
Да, ребята все правильно сказали, установи операционную ситему, там все из коробки работает при том что весит система 8 гб, а арч и того меньше. И для этого даже графическая оболочка не надо, в фреймбуфере работать можно.
#333 #931773
>>931769
На языке людей не нашел
931778
#334 #931775
>>931767
ХЗ, у меня начиная с шестой студии никогда таких проблем не было, поковыряй тут https://msdn.microsoft.com/ru-ru/library/ee855621.aspx, макросы подстановки ($) проверь в свойствах проекта и в шинде посмотри переменные окружения командой set,
у меня там пара таких прописана:
VS140COMNTOOLS=C:\Program Files\Microsoft Visual Studio 14.0\Common7\Tools\
VSSDK140Install=C:\Program Files\Microsoft Visual Studio 14.0\VSSDK\
931781
Dmitry #335 #931778
>>931773
Why not use human's language right here?
931860
#336 #931779
>>931587
возьми и проверь. скорей всего кто первый дал того и вымя.
931780
#337 #931780
>>931779
и да, к языку C или C++ это не имеет отношения.
Dmitry #338 #931781
>>931775

>perdolk-perdolk


Oh God, spermovor never changes.
931783
#339 #931783
>>931781
Не понимаю твой собачий.
931786
Dmitry #340 #931786
>>931783
Зачем пердолится с виндой? Ни справки ни компилятора, нихуя нет, еще и тормозит, файловых ситем не завезли, оконных менеджеров не завезли, пакетный менеджер не завезли, нихуя не работает, 64битность без 32битного говна не завезли.
Установил бы федору раз спермач до глубины жопы, и работал бы по людски.
Но лучше арч и тайловый оконный менеджер на выбор.
931790931801
#341 #931788
>>931741
Надо было ставить VS 2017 RC, тем более в начале марта будет релиз
#342 #931790
>>931786
Если бы не ноутбук с гибридной графикой, то давно бы сидел на прыщах. А так, к сожалению, приходиться быть спермачем.
931797931865
#343 #931792
господи, да съебите вы нахуй в /s

и обгладывайте там щёки димки-гребненосца.
Dmitry #344 #931797
>>931790
Есть же Bamblbee и еще что-то там.
Хотя брать ноут с гибридной графикой тупизм, встройка интола идеальна.
931815
#345 #931801
>>931786
А, в этом плане. Но я не программист - мне много не надо, пару программ скомпилить раз в год, никогда пердолинга не было со студией, просто почему-то у анона сломано, я подсказал что где поковырять и как у меня, а так конечно слышал, что на линухах удобнее всё это.
#346 #931815
>>931797
Бамблби уже 2 года не развивается, а других альтернатив нет. Встройка интола сейчас идеальна, а вот 4 года назад, ее все еще считали говном.
Поэтому и взял ноут с HD4000 и GT 730M, хотя сейчас понимаю, что это было большой ошибкой.
931864
#347 #931822
>>931760
Спасибо.
#348 #931860
>>931778
ALLO! VAS PLOHO SLISHNO! PSHPSHPSHPSHPSHPSH
#349 #931864
>>931815

> других альтернатив нет


nvidia-prime
#350 #931865
>>931790
Выключи дискретку и сиди на прыщах.
#351 #931868
>>931535

> Пойдет ли такое использование таймаутов


Ну да, как-то так.

>>931587

> вопрос по крестам


В крестах то же самое, что и в Си, разве что символы по умолчанию манглятся, а не просто декорируются. Ну и COMDATA еще. Других различий на уровне линковки нет.

> если 2 длл-ки экспортят одинаковый символ


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

>>931588
Чисто под винду - имеет смысл, если проект долговременный и качественный. Нативного look-and-feel нет ни в одной либе, кроме... нативных. В том же кутэ нет фирменной патентованной примочки Microsoft с диагональным перемещением мыши во вложенных меню, поэтому меню в Qt крайне хуевые. Если кроссплатформенность на первом месте (а такое бывает гораздо чаще), то проще всего взять C++/Qt для GUI, а либы писать на Си.

>>931741

> Как настроить?


В студии должно все само настроиться (ты C++ support вообще поставил?). Для командной строки есть целая куча всяких vcvarsall.bat.
Dmitry #352 #931916
>>931588
Имеет смысл конечно, но юзай winapi или какой там у нее родной гуй.
#353 #931991
Просто интересно. Почему я могу декларировать переменные после case: только с учётом, что переменная будет находится в скобках? Т.е. case: { int i; }. Без скобок не соберётся. Может проблема в другом? Не хочу скобки ставить, портит читаемость.
931995932000932003
#354 #931995
>>931991
вдруг поймал себя на мысли, что до сих пор объявлял переменные только в самом начале функции
931996
#355 #931996
>>931995
Я тоже, это правильно, но сейчас ситуация вынуждает нахуячить определение переменных в зависимости от результата свитча.
Важная тема #356 #931998
В последнее время постоянно сталкиваюсь с мнением, что в Си - всё очень хуёво и непродуманно.
1. Что не так с указателями?
2. Что не так с while (p++ = q++) ; на хабре жалуются
3. Что не так с препроцессором?

Меня, например напрягают совершенно другие вещи:
-из коробки нет размерных типов inb4:stdint.h
-бедная стандартная беблиотека. Не могу понять, почему до сих пор не добавили безопасные функции для работы со строками?
-почему не добавили битовые поля и упакованные структуры в стандарт?
-ну и да, неопределённое поведение в точках следования, аля i++ + ++i почему не определить в стандарте как это должно работать?
932002932003
#357 #932000
>>931991
Блядь, да потому, что область видимости переменной и определяется {} за скобочками переменной уже не существует.

А так получается, ты создал в стеке переменную, только если попал в условие, а ниже свитча ты будешь её использовать всега?
Ты ебанутый?
932005
#358 #932002
>>931998
иди почитай, мудак. это компост-тред, говноед на говноеде.

пойди хабрик почитай, как нужно переменные называть правильно.
#359 #932003
>>931991
Особенность (баг) грамматики: после меток (а case - по сути метки) ожидается statement, а не declarator. Это пережиток прошлых времен, когда декларации разрешались только в начале блока.

>>931998

> Что не так с указателями?


Все так, просто с современным подходом "хуяк-хуяк и выпустили из универа" программисты получаются тупые и допускают ошибки.

> Что не так с while (p++ = q++) ;


Все так, но чтобы понять это, нужно понимать указатели, но см. пункт 1.

> Что не так с препроцессором?


Он совершеннейшее, остойнейшее говно. Чтобы осознать это, попробуй... ну нупример реализовать макрос DEBUG, который будет принимать любое количество аргументов и вызывать функцию printf, автоматически добавляя перед сообщением файл, строку и имя функции, а после - перевод строки. Удачи.

> из коробки нет размерных типов inb4:stdint.h


Редко нужны (для структур только), легко сделать самому, есть в stdint, иди нахуй.

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


Тебе с какими? Вот есть сишные, есть паскалевые, есть комбинированные. Единственная правильная придирка - нет нормального strcpy.

> почему не добавили битовые поля


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

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


Когда твой микроконтроллер не сможет прочитать невыровненный дворд - поймешь.

В той статье на хабре все правильно пишут. Си говно, юникс говно, но альтернатив-то нет!
932010932013932022
#360 #932005
>>932000

> А так получается, ты создал в стеке переменную, только если попал в условие, а ниже свитча ты будешь её использовать всега?


Объяснение не катит. Наслаждайся:
switch (1) {
int foo = 100;
case 1:
foo = 1;
default:
printf("foo is %i\n", foo);
}
Потом убери присваивание в case 1 и насладись повторно.
932017
68 Кб, 900x525
#361 #932008
>>924655
Эндрю Таненбаум

>А. Таненбаум

#362 #932010
>>932003

>Особенность (баг) грамматики: после меток (а case - по сути метки) ожидается statement, а не declarator. Это пережиток прошлых времен, когда декларации разрешались только в начале блока.


Неверное объяснение.
932011
#363 #932011
>>932010
Тащи верное. Не забудь объяснить разницу между
case 1: int i;
и
case 2:; int j;
#364 #932013
>>932003

>>Он совершеннейшее, остойнейшее говно. Чтобы осознать это, попробуй... ну нупример реализовать макрос DEBUG, который будет принимать любое количество аргументов и вызывать функцию printf, автоматически добавляя перед сообщением файл, строку и имя функции, а после - перевод строки. Удачи.



Та не поверишь, есть у меня такой! Лол, но только до 10 аргументов. Бля, ну а в каком языке посмотреть лучше?

Про сторки... Из коробки есть только нуль-терминированны "". А так я могу и корпускулярно-гравицапные забыдлокодить.
Вот скажи, strlen() с ограничением по максимальной длине в стандартной либе есть?

Про размеры типов.
Нужны блядь, просто ВИЗДЕ! Любой бинарный проктокол, любой микроконтроллер - все блядь, без них не уйдёшь. И что предлагаешь в каждый хеадер хуячить stdint? Заебца просто.

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

>Когда твой микроконтроллер не сможет прочитать невыровненный дворд - поймешь.



Блядь, меня ебёт как он будет это читать? Пускай читает в два регистра по пол слова и комбинирует в третьем! Это блядь работа компилятора обернуть всю эту хуету в понятный и удобный вид. 95% мк работают с последовательными интерфейсами, сетью сетвыми протокалами, там блять ВСЁ выравнено!
932019
#365 #932017
>>932005
Ты блять упоротый?

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


В твоём случе деклараци есть, а вто все инструкции между switch и case - никогда не выполнятся - нет условия. Можешь поэксперемнтировать с goto. Ебаный недоносок.
#366 #932019
>>932013

> Лол, но только до 10 аргументов.


Да, я тоже умею абузить препроцессор. О том и речь.

> strlen() с ограничением по максимальной длине


Либо строка заканчивается нулем, либо это не сишная строка.

> Любой бинарный проктокол, любой микроконтроллер


Endianess, alignment requirements, trap representations (молчу про способ хранения отрицательных int, тут вроде у всех согласие). Если ты читаешь структуры копированием байтиков поверх структуры - у тебя проблема, просто ты о ней еще не знаешь. Ну или ты о ней знаешь, но привязан к конкретной архитектуре и протоколу, и тогда проблема у тех, кто придет после тебя.

> И что предлагаешь в каждый хеадер хуячить stdint


Я еще и stdbool подключаю. Или объединяю часто нужные вещи (assert, atomics еще) в один хедер. Ты же подключаешь stdlib, когда тебе нужен malloc(), почему бы тебе не подключить stdint, если ты хочешь потерять в производительности, использовав типы фиксированного размера (или выиграть, использовав (u)int_fast(N)_t)?

> Блядь, меня ебёт как он будет это читать?


Язык проектировался как раз для тех, кого ебет производительность, и кто согласен в обмен на это вникать в детали. Не хочешь вникать - бери высокоуровневый язык. Алсо, да, именно побайтово всякие ARM и читают невыровненные структуры. Открываешь дизасм функции, а там портянка из килобайтов LDRB. Сэкономили, епта.
932026
#367 #932022
>>932003

>ну нупример реализовать макрос DEBUG, который будет принимать любое количество аргументов и вызывать функцию printf, автоматически добавляя перед сообщением файл, строку и имя функции, а после - перевод строки. Удачи.


Не понимаю, в чём проблема...
#define dprintf(fmt, ...) fprintf(stderr, "%s:%d:%s: " fmt "\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, ##__VA_ARGS__)
932023932024
#368 #932023
>>932022
dprintf("ты обосрался");
#369 #932024
>>932022
Хотя ок, обосрался я, не заметил, что ты GCC-шное расширение используешь. В языке этого нет.
932025932027932033
#370 #932025
>>932024
даже не представляю зачем вы пытаетесь из с сделать с++.
#371 #932026
>>932019

>Либо строка заканчивается нулем, либо это не сишная строка.


Либо это сишная 10байтовая строка в которую влетело 11 байт от юзера.
Я же и спрашиваю о БЕЗОПАСНЫХ функциях.

>эндианс, выравнивание


Извини не понял аргумента.

>stdint


В 99% ты подключаешь stdlib не в хеадере. А базовые типы нужны всегда.Это просто маразм что их нет из коробки.

>Язык проектировался


И? От того, что некая разновидность ARM на некоем быдло-компиляторе лопатит портянки из ldr - бинарные протоклы перестануть использовать упакованные уструктуры?
932029932043
#372 #932027
>>932024

>В языке этого нет.


Искусственная придирка.
932043
#373 #932029
>>932026

>А базовые типы нужны всегда.


gcc -include stdint.h и успокойся
#374 #932033
>>932024

>В языке этого нет.


Щито?

>Variable-argument macros were introduced in 1999 in the ISO/IEC 9899:1999 (C99) revision of the C language standard, and in 2011 in ISO/IEC 14882:2011 (C++11) revision of the C++ language standard.[1]



Из gcc мана:

>The C standard mandates that the only place the identifier __VA_ARGS__ can appear is in the replacement list of a variadic macro. It may not be used as a macro name, macro argument name, or within a different type of macro. It may also be forbidden in open text; the standard is ambiguous. We recommend you avoid using it except for its defined purpose.



>Variadic macros became a standard part of the C language with C99. GNU CPP previously supported them with a named variable argument (‘args...’, not ‘...’ and __VA_ARGS__), which is still supported for backward compatibility.

932036932043
#375 #932036
>>932033
Я про ##__VA_ARGS__
#376 #932043
>>932026

> строка в которую влетело 11 байт от юзера


В сишную строку не может "влететь" 11 байт, когда ожидалось 10. Либо они влезли в буфер, либо тебя уже хакнули. А вот при копировании строк, конечно, хочется strcpy с лимитом, и ее всегда приходится реализовывать вручную.

> эндианс, выравнивание


> Извини не понял аргумента.


Смотри, протоколы и файловые форматы бывают разные. Например, в сетевых протоколах с незапамятных времен принято использовать big-endian, а значит, как бы ты не упирался, а тебе придется читать одно поле структуры за другим и свопать байты (желательно автоматически), и это приводит тебя ко всяким stream_read_uint16, и тебе становится абсолютно похуй на выравнивание структур. А еще при копировании байтов поверх структур ты можешь ненароком прочитать float, а FPU иногда может выдать тебе exception, а пользователь будет возмущаться, мол, как это, почему у него холодильник с вайфаем завис.

> А базовые типы нужны всегда.


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

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


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

>>932027

> Искусственная придирка.


Это был искусственный пример. Но есть подобный реальный: мне нужно было два раза проитерироваться макросом по __VA_ARGS__, а это в общем случае невозможно, и даже для ограниченного числа аргументов нужна препроцессорная магию поэтому я просто написал очередной внешний кодогенератор. Препроцессор сосет практически на каждой нетривиальной задаче.

Алсо, мне всегда очень нравятся разговоры линуксоидов про Microsoft и вендорлок, но когда разговор заходит про расширения GCC, так им сразу становится похуй, и они жрут и нахваливают. Хуй с ним, это расширение еще норм, оно рано или поздно появится в стандарте, но ведь есть упоротые, которые используют чуть ли не все, что им дает GCC.

>>932033
В языке нет игнорирования trailing comma c помощью магического ##.
#376 #932043
>>932026

> строка в которую влетело 11 байт от юзера


В сишную строку не может "влететь" 11 байт, когда ожидалось 10. Либо они влезли в буфер, либо тебя уже хакнули. А вот при копировании строк, конечно, хочется strcpy с лимитом, и ее всегда приходится реализовывать вручную.

> эндианс, выравнивание


> Извини не понял аргумента.


Смотри, протоколы и файловые форматы бывают разные. Например, в сетевых протоколах с незапамятных времен принято использовать big-endian, а значит, как бы ты не упирался, а тебе придется читать одно поле структуры за другим и свопать байты (желательно автоматически), и это приводит тебя ко всяким stream_read_uint16, и тебе становится абсолютно похуй на выравнивание структур. А еще при копировании байтов поверх структур ты можешь ненароком прочитать float, а FPU иногда может выдать тебе exception, а пользователь будет возмущаться, мол, как это, почему у него холодильник с вайфаем завис.

> А базовые типы нужны всегда.


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

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


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

>>932027

> Искусственная придирка.


Это был искусственный пример. Но есть подобный реальный: мне нужно было два раза проитерироваться макросом по __VA_ARGS__, а это в общем случае невозможно, и даже для ограниченного числа аргументов нужна препроцессорная магию поэтому я просто написал очередной внешний кодогенератор. Препроцессор сосет практически на каждой нетривиальной задаче.

Алсо, мне всегда очень нравятся разговоры линуксоидов про Microsoft и вендорлок, но когда разговор заходит про расширения GCC, так им сразу становится похуй, и они жрут и нахваливают. Хуй с ним, это расширение еще норм, оно рано или поздно появится в стандарте, но ведь есть упоротые, которые используют чуть ли не все, что им дает GCC.

>>932033
В языке нет игнорирования trailing comma c помощью магического ##.
932047932135
#377 #932047
>>932043

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


strncpy в твой TurboC for DOS 5.22 не завезли ещё?
932048
#378 #932048
>>932047
Завезли. Только strncpy: 1) не терминирует строку нулем, если она не влезла в буфер, 2) забивает нулями весь остаток буфера, если строка таки оказалась меньше буфера. Получаем уязвимость и тормоза одновременно.
932049932050
#379 #932049
>>932048
snprintf
932055
#380 #932050
>>932048
3) вместо ясной сигнализации о том, что строка не влезла и обрезана (что может привести к еще одной уязвимости), strncpy возвращает бесполезный указатель на буфер.
#381 #932055
>>932049
Да, именно на ней обычно и городят свои strlcpy. Нормальное решение, если забыть о том, что snprintf может вернуть -1 на кривой строке у пользователя с кривой локалью, и еще о том, что у Microsoft есть свой, особенный _snprintf, который нихуя не терминирует строку нулем, если она не влезла. Некоторые альтернативно одаренные личности делают #define snprintf _snprintf где-нибудь в хедере, что приводит к веселым последствиям.
#382 #932059
>>924123 (OP)
Запутался в теме с указателями. Пытаюсь разобраться с битами и адресами. Вот например есть тип int, для него выделяется 4 байта (32 бита), есть переменная со значением например 35. В двоичной системе это 100011, и вот эти куда эти биты записываются? Нихуя не понимаю, запутался уже. Также прошу объяснить как вообще выделяется память для указателей (в двоичном виде же?).
#385 #932066
>>932059

>куда эти биты записываются


Либо в область стека, один из регистров. Посмотри в гугле: Эндрю Таненбаум, «Архитектура компьютера».

>как вообще выделяется память для указателей


Точно так же. На большинстве современных компов указатель — это просто длинное целое без знака. Редко встречаются компы где в указатель добавлено что-нибудь ещё (в старых ARM'ах были флажки в старших разрядах, но это сейчас уже никто не делает). Указатель — это целочисленный адрес.
932067
#386 #932067
>>932066

>Либо в область стека, один из регистров.


Либо в область стека, либо в один из регистров.
#387 #932135
>>932043
Ладно, в сишную строку не может.

char user_name[11]; //10symbols + null

Очень часто возникают ошибки с заполнением до 11 байт.
Ну то такое.

> А еще при копировании байтов поверх структур ты можешь ненароком прочитать float, а FPU иногда может выдать тебе exception


Где почитать об этом?

>будет работать на разных архитектурах, структуры читают побайтово


Говноеды. Какая разница ты будешь напрягаться с побайтовым чтением или компилятор сделает это за тебя?
932256
#388 #932143
>>932059
Слушай сюда тупорылый уебан.
Указатель - это ячейка памяти с адресом. Размер этой йчейки обчно равено слову на твоей машине.
Обычная переменная находется в стеке или в RAM.
Указатель на int это адресс который может лежать в стеке, в регистре в RAM, похуй где.

ВНИМАНИЕ БЛЯДЬ!
Когда к укзатешь ты прибавляешь число -адресс увеличивается не на это голое число. А на число размер типа на который указывает.
int
p_huy = 0; //Положили адресс 0
p_huy += 1;// Прибавили 1 * (sizeof(int))
На 32битной машине адресс станет
p_huy == 4
932199
#389 #932199
Я даже не знаю, что хуже: вопрос или этот >>932143 ответ.
932244
#390 #932244
>>932199
The answer, obviously
sage #391 #932256
>>932135

> Где почитать об этом?


C11, 6.2.6.1, Representation of types, пункт 5. Пример для x86 (ой, опять надуманный): http://ideone.com/FyO7tv
932292
#392 #932292
>>932256
Ок, т.е. ты создал инвалидное значение float, поставил трап? И надо же, он сработал!
И что ты этим хотел доказать?
Что float это не набор байт, но ещё и имеет диапазон валидных значений?
Ты бы ещё разыменовал NULL и на 0 поделил, а потом удивлялся, почему твой рефрежератор с Bluetooth 5.0 завис.
Логика уровня школяра
932315
sage #393 #932315
>>932292

> поставил трап


Где-то он по умолчанию.

> И что ты этим хотел доказать?


Если я не с тобой разговаривал, то срачик выше.

> Ты бы ещё разыменовал NULL и на 0 поделил


Вот именно поэтому копирование памяти поверх структур и плохая практика. Все согласны, что разыменовывать NULL - плохая идея, но вот когда дело доходит до упакованных структур, им почему-то кажется, что undefined behavior в этом случае их не касается.
#394 #932363

> switch (ptr->type & ~0x80) {


Что делает "&~0x80"?
932373
#395 #932373
>>932363
коротко: гасит старший бит

0x80 = 0b10000000
~0x80 = 0b01111111

& оператор AND
932379
#396 #932379
>>932373
Ясно, спасибо.

Алсо, я тут постигаю увлекательное байтоёбство — нормально вообще писать целое число в char? Вроде экономия, когда работаешь с небольшими значениями, но я такое редко вижу.
932382932439932512
sage #397 #932382
>>932379
Экономишь на памяти - проигрываешь в коде. При наличии арифметики с этой переменной, в дизасме на том же x86 будет постоянное перепидорашивание числа из какого-нибудь 8-битного AL в 32-битный EAX и обратно, т.е., код будет и раздуваться, и тормозить.
932385932616
#398 #932385
>>932382
Эхх, а я уже собрался осилять stdint.h .
932386
sage #399 #932386
>>932385
Освоить stdint стоит хотя бы из-за -fast и -least типов.
932390
#400 #932390
>>932386
В чём профит? Это же обычные typedef'ы на стандартные типы.
932393
sage #401 #932393
>>932390

> Это же обычные typedef'ы на стандартные типы.


Только эти тайпдефы отличаются на разных архитектурах.

> В чём профит


Гарантировать размер (а не городить MyInt и пачку #ifdef-ов, как делает каждая вторая либа), бесплатно сэкономить на памяти, если процессор (и компилятор) таки умеют работать с мелкими типами быстро.
932409
#402 #932409
>>932393
Т.е. int8_t может тормозить, а int_fast8_t будет работать заебись, я правильно тебя понял?
932514
#403 #932415
вы лучше подсаажите как мне длину литеральной строки на препрцессинге вычислить, что бы без этого пидерского strlen
932437
#404 #932437
>>932415

>вы лучше подсаажите как мне длину литеральной строки на препрцессинге вычислить, что бы без этого пидерского strlen


Только для константной строки:
http://ideone.com/HWNmw7
Не забудь, что там ещё '\0'
И да, как ты хотел для динамической строки вычислять её длину во время компиляции, уебан?
932445
#405 #932439
>>932379
Зависит от применения. В одной из моих вещей только на байкиках и выехать по памяти.
#406 #932445
>>932437
мне не нужно для динамической, sizeof оно самое
#407 #932512
>>932379
В char - не нормально.
В int8_t - нормально
932514
sage #408 #932514
>>932409
Да. Потому что если int_fast8_t может работать заебись с 8 битами, то внутри будет char, а если нет - int или еще что-нибудь. Решает компилятор.

>>932512

> В char - не нормально. В int8_t - нормально


Хочешь рассказать нам об удивительной жизни с CHAR_BIT != 8?
932619932621
#409 #932616
>>932382

> При наличии арифметики с этой переменной, в дизасме на том же x86 будет постоянное перепидорашивание числа из какого-нибудь 8-битного AL в 32-битный EAX и обратно, т.е., код будет и раздуваться, и тормозить.


Для знаковой арифметики разницы в сгенерированном для char и int асме почти не будет. Переполение знаковых переменных — UB, поэтому компилятор будет обращаться с char как с int в плане использования регистров (да и не только поэтому, а integer promotion).
Проливать из регистров в стек тоже будет как 4 байта.
Передача из/в функцию — так же, как int.

Максимум где будет отличие — в сохранении в массив char-ов или в структуру, если padding-байтов не хватает для сохранения char-а как int-а
932617932709
#410 #932617
>>932616

> (да и не только поэтому, а integer promotion).


*А скорее из-за integer promotion
#411 #932619
>>932514

>Хочешь рассказать нам об удивительной жизни с CHAR_BIT != 8?


ДиЭсПи, чуть больше чем на половину.
Обычно там char == int
#412 #932621
>>932514

> то внутри будет char, а если нет - int или еще что-нибудь


Пизда.

Стоит полностью переходить с обычных типов на stdint с его фастами? Это ведь, в теории, сплошной профит, правда код будет плохо выглядить, особенно если использовать fast. Названия длинные будут. Текста много. Но профит.

И ещё. Есть одна либа xcb, где этими интами всё обмазано, но погрепав её я не обнаружил ни одного int_fast/least. Почему там это не используется? ЧТО МНЕ ДЕЛАТЬ Я ЗАПУТАЛСЯ
932622932627932652
#413 #932622
>>932621

>Это ведь, в теории, сплошной профит


В каком месте тут профит?
932623
#414 #932623
>>932622
Использование stdint — профит. Я экономлю. Я пишу более понятный код. А использование фастов просто свод недостатков stdint на нет, если тот Анон не пиздит.
#415 #932625
Аноны, не подскажете какую-нибудь обертку над libcurl для работы с rest json-документами? Или самому писать?
932658
#416 #932627
>>932621
Долбоёбов полон тред!
Блять, да возьми тыуже ебёный gcc, скомпиль пару тестов с o0 и 03. Открой отладчик да посмотри как это выглядит на твоей платформе.
Напиши тест оцени время выполнения.
В 99.95% случаев - это выигрыш на спичках.
Если блять совсем риалтайм-ультраперформанс, всё равно прийдётся на ассемблере разворачивать циклы и тулиться в регистрах с минимумом обращений к памяти.

Ну хуй знает, возможно у меня просто нет подходящего опыта и я слишком узко мыслю
932636
#417 #932636
>>932627
Мне похуй как это выглядит на моей платформе. Я знаю, что это экономия на спичках. Но надо ведь идти к идеалу! К лучшенькому! В теории эти инты всем лучше дефолта, но я хочу узнать как на практике и не только на моём железе, тут вопрос не про это.

Была, кстати, статейка перевод на швабре про то, что всем поголовно нужно переходить на stdint, а дефолтные типы — прошлый век. Читал я её когда был ваще полным ньюфагом, уже толком ничего не помню, хотел бы ещё раз перечитать, но не могу нагуглить. Доставьте, может знает кто. Хорошая статья была, и срачи под ней тоже хорошие были.
#418 #932652
>>932621

> Почему там это не используется?


Тот анон пишет про какой-то волшебный компилятор который возможно сможет сделать так что с char скорость работы будет такая же как и с интами. Тогда будет выигрыш по памяти. Авторы библиотеки про которую ты говоришь скорее всего несколько скептично относятся к вероятности что их библиотеку будут копмилировать на таком волшебном компиляторе, поэтому просто не заморачивались на эту тему.
932657932660
#419 #932657
>>932652

> какой-то волшебный компилятор


Какой, в жопу, волшебный компилятор, довен?
https://godbolt.org/g/7ZhxR0 вот, смотри.
Где там " постоянное перепидорашивание числа из какого-нибудь 8-битного AL в 32-битный EAX и обратно"?
932660
#420 #932658
>>932625
Оказывается с гномом люди какой-то libsoup используют, буду пробовать, не в том направлении я гуглить начал.
40 Кб, 740x272
#421 #932660
>>932652
>>932657
https://godbolt.org/g/uAvFic intel c compiler-у вообще похуй
932666
#422 #932666
>>932660
А вто gcc соснул:
https://godbolt.org/g/ijCJDt
932669
#423 #932668
Только пойми меня правильно, довен. Использовать char ради экономии оперативной памяти — с вероятностью 98% долбоёбизм. Для хранения на диске нескольких миллиардов данных, если выходит так, что значения влезуют в char — это ещё нормально.
932670932680932686
51 Кб, 643x456
#424 #932669
>>932666

>gcc соснул:


А?
932709
#425 #932670
>>932668

> Использовать char ради экономии оперативной памяти — с вероятностью 98% долбоёбизм


Двачую кстати.
932678
#426 #932678
>>932670
поддвачну, однако
#427 #932680
>>932668
Но к лучшенькому! Например если в коде есть тип с uint8_t, то сразу понятно, что там небольшое значение. С учётом контекста легко понять для чего оно и что вообще тут происходит. А ещё и экономия какая!
#428 #932686
>>932668
что посоветуешь, если ОЗУ 32 кБ?
932689
#429 #932689
>>932686
Ну если 32кБ, то ладно.
Я думал речь про десктоп.
sage #430 #932709
>>932616

> Где там " постоянное перепидорашивание числа из какого-нибудь 8-битного AL в 32-битный EAX и обратно"?


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

>>932616

> Переполение знаковых переменных — UB, поэтому компилятор будет обращаться с char как с int в плане использования регистров


Представлять байтики как signed char (а фиксированные типы пользуют обычно для байтиков, вордов и двордов) опасно, а переполнение unsigned уже не UB.

> Передача из/в функцию — так же, как int.


Я тоже так думал, отреверсил функцию, написал int вместо short, а потом однажды мне студия положила в стек eax с мусором в старших битах. Был сеанс увлекательной отладки. Впрочем, это к делу не относится.
932711
186 Кб, 1920x1080
#431 #932710
>>931278

>Чем бы таким заняться можно было, пока руки чешуться написать чего-нибудь гуишного?


Решил таки написать свою йобу на питоне с гуишным клиентом на gtk по типу keepassx. Хз, нечем после работы заняться. Посмотрим, что через пару месяцев выйдет.
10 Кб, 200x200
#432 #932711
>>932709

>студия


Понятно, откуда у тебя такие извращённые представления о компиляторах и ужасах, связанных с char против int
932713932715
#433 #932713
>>932711
так чё ставим генту или арч?
932716
sage #434 #932715
>>932711
Зря ты так. Студия в последние годы все больше похожа на нормальный компилятор, и оптимизирует она неплохо.
932718
#435 #932716
>>932713
Если из этих двух, то арч.
А вообще ставь абанту, если ты язык собрался учить, а не пердолиться с конфигами.
932818
#436 #932717
это случилось, тред официально засран, от начала и до конца.
932719
#437 #932718
>>932715
Оптимизирует она неплохо с ещё не вышедшей версии, в которой спиздили SSA-based оптимизатор из clang-а.
932723932724
#438 #932719
>>932717
У этого треда два состояния: либо он висит полудохлым по два месяца, либо в нем кто-то снова не прав.
932735
#439 #932723
>>932718

> в которой спиздили


Узнаю M$!
sage #440 #932724
>>932718
Не смотрел еще на 2017, но и родной C2 был неплох. А они точно спиздили? Не припомню в анонсах про кодогенератор новостей./spoiler]
932729932730
#441 #932727
кстати, что так у студии в относительными путями к проектам в решении?
Слышал, что, начиная с 2015
932752
180 Кб, 1440x844
30 Кб, 716x187
#442 #932729
>>932724

> родной C2 был неплох


Не знаю что за C2, вот слайд с cppcon 2016 про новый SSA-оптимизатор

> А они точно спиздили?


Неточно, но откуда ещё они могли взять SSA-оптимизатор? И если ты скормишь код со слайда clang-у, ты получишь тот же асм-код, с точностью до переименования регистра, в котором передаётся параметр в данном ABI. Ах, да. Ещё 2*reg против reg+reg. Ну, peephole-оптимизатор натравили, чтобы замести следы.
932730932732932738
#443 #932730
>>932729

>> родной C2 был неплох


>Не знаю что за C2, вот слайд с cppcon 2016 про новый SSA-оптимизатор


Забыл дописать: если это C2 на слайде, то он плох. >>932724
#444 #932732
>>932729
Кстати, и тут оптимизатор MSVC соснул, ибо
8d 04 4d 02 00 00 00 lea eax,[rcx2+0x2]
8d 44 09 02 lea eax,[rcx+rcx
1+0x2]
932734
#445 #932734
>>932732
8d 04 4d 02 00 00 00 lea eax,[rcx*2+0x2]
8d 44 09 02 lea eax,[rcx+rcx+0x2]
932738
#446 #932735
>>932719
видимо я так часто попадал на одно состояние.
#447 #932738
>>932729

>peephole-оптимизатор натравили, чтобы замести следы.


В свете >>932734 скорее ещё не успели спиздить.
932743
#448 #932743
>>932738

>В свете


Правильнее, наверное, "С учётом".
Впрочем, похуй.
M$ соснул и это главное.
#449 #932752
>>932727

>Слышал, что, начиная с 2015


Я набрал 20 кг за одно посещение двача. Как? Нужно просто
#450 #932818
>>932716

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


Вообще арч довольно просто установить и накатить какую-нибудь гуишное окружение потом.
sage #451 #932970
>>931769
Русский за язык у программистов не считается? Никто не кодит кириллицей и даже не комментирует по-русски?
932974933020
#452 #932971
>>931760
Хорошая книга, спасибо.
#453 #932974
>>932970
1С жи есть.
#454 #933020
>>932970

>даже не комментирует по-русски


я комментирую и доки пишу, англопидоры в моем проджекте ненужны
937476
#455 #933348
Вопрос по конфигурации решения/solution в студии с несколькими вложенными проектами, которые суть зависимости/dependencies рабочего

Пример с установкой Bullet Physics Engine. Прелестно описано тут:
http://bulletphysics.org/mediawiki-1.5.8/index.php/Creating_a_project_from_scratch

Всё получается, НО... вложеные проекты прописаны абсолютными путями, что убивает возможность тоскать папочку между десктопами разных компов (пути разные из-за <username>). Держать тупо в корневом на c:\ работает, но это некрасиво.

ВОПРОС: как перенастроить вложеные проекты под относитеьные пути? Где они вообще прописаны, чтобы поменять?
933433
sage #456 #933433
>>933348
Я хуй знаю, как там сейчас в студии, но никто тебе не мешает открыть .vcxproj/.sln и тупо заменить все общие префиксы путей на точку.
933589
#457 #933488
Пишу консольный файловый менеджер "в стиле" suckless и встал вопрос по поводу синхронизации помеченных для копирования/удаление фалов между различными сессиями. Например, выделяю файлы в some_session в some_dir, захожу в other_session, открываю other_dir, перемещаю в неё выделенное. Пока вижу решение в виде реализации клиент-серверной архитектуры. Но, мне кажется, не особо suckless way - такую архитектуру городить ради такого небольшого профита. Есть идеи как еще можно это реализовать?
933495
#458 #933495
>>933488
Записывай список выделения в файл. Другие сессии при попытке переместить или копировать будут этот файл читать.
933536933713
#459 #933536
>>933495
Обдумывал этот вариант, забыл написать про него и почему он не годиться. Хотелось бы, чтобы выделенные файлы были помечены визуально во всех сессиях, чтобы можно было их удалить из выделенных. Для этого придется при смене директории каждый раз проверять, изменился ли этот файл. Из этого есть выход - сделать поток с inotify. Опять же, по дополнительному потоку на каждую сессию для такой хуйни... Всё равно, благодарю.
#460 #933589
>>933433
Я тоже думал о таком варианте. Спасибо.
sage #461 #933713
>>933495
Вопрос снят. Нашел хорошее решение для этого варианта.
6 Кб, 548x86
12 Кб, 602x331
#462 #933723
>>924123 (OP)
В общем вот часть задания вторая часть с вводом/выводом, но не суть, вот, к примеру, имеем (( )), программа скажет что скобки стоят верно, а если имеем )) ((, то скажет также, но математически это неверно, может анон подскажет? Могу заново переписать
933731933762934952
#463 #933731
>>933723
Дам тебе подсказку:

проходя строку по буквам, считаешь открывающие и закрывающие

Пока строка не пройдена полностью, количество открывающих >= закрывающих
Если это условие хоть раз нарушено, уже невосполнимый пройоб

Когда встретишь \0, колвы должны быть равны
#464 #933762
>>933723
Нужно просто проверку на отрицательность в цикл занести.
#465 #933850
>>924653
Хакинг искусство эксплойта 2-е издание Эриксона.
#466 #934689
Вот хожу я по массиву таким образом "*arr++", а как мне выполнить не просто "++", а "+ 20"? Например. Чтобы на 20 элементов сразу скакнуть а потом опять хуячить ++.
934692
sage #467 #934692
>>934689
arr += 20;
934696935596
#468 #934696
>>934692
Спасибо, саженяша.
41 Кб, 449x375
#469 #934848

>2017


>sizeof(arr) / sizeof(arr[0]);

934964934965
#470 #934952
>>933723
Решается стеком.
935221
249 Кб, 559x496
#471 #934964
>>934848

> 2017


> C

934965
#472 #934965
>>934848
>>934964
Попрошу не выёбываться.
Каждый день пишу на С свои наукоёмкие библиотеки
934983
#473 #934983
>>934965

> наукоёмкие библиотеки


Представляю какой там жуткий говнокод.
934988
#474 #934988
>>934983
Неосилятор в сишном тхреаде!
#475 #935027
>>924123 (OP)
Сап, пр, есть файл с символами( у меня это скобки), в коде нужно из этого файла считать эти символы в массив и дальше с ним работать, я перечитал пару справочников и статью в учебнике и нигде не нашел примеров, погуглив также ничего годного не нашел, можете написать сам кусок кода в котором массив заполняется символами.
935042
#476 #935042
>>935027
Отмена! Я ультрадаун, мой компилятор не читает с notepada++, поставил обычный блокнот и все..
935112
#477 #935112
>>935042
Лолшто не читает?
935188
#478 #935188
>>935112
Ну да, поменял на дефолтный блокнот и строчку символов считало в массив, с нотепада ничего не происходило, хз почему
935217
#479 #935217
>>935188
То есть ты брал файл, созданный в нотепад++, и не получалось, а получилось с тем же контентон, сохранённым в файл из шиндовского блокнота?
Кодировка, в которую дефолтный почти не может?
#480 #935221
>>934952
двачую, хоть одно человечское решение, а не это ебаное говно
935249935283
#481 #935249
>>935221
Охуеть. Но теперь объясни ему, как ему этот стек сделать.
sage #482 #935283
>>935221

> человечское решение


Один тип скобок. Стек вот просто нахуй не нужен. Тупые люди с шаблонным мышлением тоже.
935418
sage #483 #935418
>>935283
действительно, неужели никто не писал парс для скрипт-языка собственного сочинения?
#484 #935467
C - это же легкий язык программирования. Зачем для его обучения читать целые книги?
935479935480
4 Кб, 626x77
#485 #935478
>>924123 (OP)
Аноны, для построения графиков нужно пользоваться openGL? И сложно ли будет написать код для построения такой функции с базовыми знаниями си?
935480935497935516
#486 #935479
>>935467
Попробуй потоньше.
935526
#487 #935480
>>935478
>>935467
У вас соревнование толстяков?
935484935526
9 Кб, 672x133
#488 #935484
>>935480
А что не так? Просто у меня препод ничего не объясняет и все лабы я делаю с помощью учебника и двача
#489 #935497
>>935478
В общем случае OpenGL не очень-то хорошо подходит для построения произвольных графиков. Зависит от конкретной функции - от того что поддерживает видеокарта, так как шейдер не может выполнить произвольный код. Правда, конкретно твою можно просчитать и на современных GPU, так как с определенного момента они вроде как умеют вычислять синусы, еще и дохуя быстро (скорее всего по таблицам). Но общий алгоритм такой что ты формируешь пиксельный буфер с графиком на CPU, а потом как-то выводишь: OpenGL, SDL, может вообще просто на диск сохранить в чем-то типа png. Возможно у преподователя спроси.
#490 #935516
>>935478
а что там сложного, открываешь опенгл, учишь, как строить линию по точкам. делаешь вот эту формулу, применяешь ее к точкам. p - это точки а параметр умноженный на синус функции. функция - это линия из точек. как-то так.
#491 #935526
>>935479
>>935480
А в чем анон не прав?
Чтобы писать на С нужны только мозги. Понял как работают указатели - молодец, ознакомься со спецификой архитектур, спеку мк почитай и вперед. А если под десктоп или сеть писать - все еще проще.
935527935578
#492 #935527
>>935526

>сеть писать - все еще проще


паржал с дебика
935530
#493 #935530
>>935527
Ну у меня уже был 2-летний опыт на первой работе, надо было свой велосипед поверх udp писать и поддерживать, после такого это кажется не очень сложным.
935532
#494 #935532
>>935530
в сетевом погромирование очень много ньюансов о которых нужно знать, теже опции сокетов например
#495 #935578
>>935526
Чтобы писать на си нужно знать стандартную библиотеку, а более говенной с.б. чем в си нет в природе.
935587935609
sage #496 #935587
>>935578

> МК


> стандартная библиотека

#497 #935596
>>934692
А как просто задать ему значение? Что-то вроде arr = 20, но чтобы работало.
935698935702
#498 #935609
>>935578

>нужно знать стандартную библиотеку


Нахуя? Когда понимаешь, как это работает все, написать свой аллокатор памяти под конкретный девайс не столь сложно, как это кажется вначале. Или числа/строки вручную сложно конвертить?
935615
#499 #935615
>>935609
Ну если ты только хеллоу ворлд делаешь то безусловно, но в реальных задачах везде требуется взаимодействие с коллекциями, строками, потоками, файлами, сетью и ещё кучей различной поебени.
#500 #935629
Как сделать ассемблерную вставку? Мне надо чтобы было так:

org 0x7C00

startboot:
cli
xor ax,ax
mov ds,ax
...
...
...

org 0x7E00

start:
код на си
...

mov ax,peremennaya поместить в ax значение переменной
...
...
...

У меня в начале программы загрузчик операционной системы, который занимает 512 байт, а потом уже главная часть программы. С помощью кода на си там считается всё, потом перемещается значение из нужной переменной в регистр ax.
935631935696
#501 #935630
На меня снизошло озарение и просветление. Спешу поделиться.
Идеального кода по крайней мере на си не существует. Это миф!
Всюду используются свои правила, свои стандарты свои методы и правила оформления. Кое где, встречаются удачные решения. Но в общем, везде бардак, а идеала нет.
#502 #935631
>>935629
КОМПИЛЯТОР?!!
935654
#503 #935654
>>935631
gcc. Забыл написать, а ведь собирался.
sage #504 #935696
>>935629
Если ты - тот кун из RE-треда, предлагаю не ебаться с ассемблерными вставками - это плохой и неудобный путь. Пиши то, что требует ассемблера на ассемблере в отдельных файлах, а то, что хочется писать на Си - на Си. А время лучше потрать на чтение туториала про ld, ld-скрипты и objcopy.
115 Кб, 640x480
#505 #935698
>>935596
arr+=20;
#506 #935702
>>935596
*arr = 20
935703935705
Dmitry #507 #935703
>>935702
absolute value for array pointer? Lol.
*arr+=20;
935705
Dmitry #508 #935705
>>935702
>>935703
not *
arr+=20;
#510 #937476
>>933020
Нафига вообще комментить? Код должен читаться без комментариев, имена функций/переменных коммендируют сами себя, вместо магических констант - дэфайны.
А теперь представьте ситуацию: над проектом работают несколько комментаторов-патриотов, и каждый срёт в каментах в своей кодировке. Иногда правится один и тот же файл в разных кодировках. И читать это дело потом - адов пиздец, хорошо если кодировки быстро переключаются по хоткею, а если надо в менюшку лазить? Нет ребята, такой хоккей нам не нужен.
937650
#511 #937650
>>937476

> Нафига вообще комментить? Код должен


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

> кодировке


Аргумент устарел, UTF-8 есть везде, но комментировать все равно нужно по-английски, за исключением случаев, когда это 1C или какой-нибудь локальный продукт, который никому кроме его разработчиков нахуй не всрался.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 24 апреля 2017 года.

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

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