М.Двач / Программирование

Этого треда уже нет.
Это копия, сохраненная 5 января 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

78 Кб, 792x1023
C Programming Language #35 /clang/ # OP 31 окт, 08:10 1287378 В конец треда | Веб

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

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

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (он же C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (он же C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- man/Dash/zealdocs

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

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

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

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

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

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

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

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

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

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

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

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

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

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

- №32: https://arhivach.tk/thread/375538/
- №33: https://arhivach.tk/thread/383767/
- №34: https://arhivach.tk/thread/398890/

Ответы287380289445292932294165295772296103296340296784297246297630297682298643299660

2 31 окт, 08:18 2 1287380

>>1287378 (OP)
Первыйнах1

3 31 окт, 15:51 3 1287550

ПравоСССССССССлавный перекот.

806 Кб, 1280x720
4 31 окт, 16:28 4 1287565

Вкатился и упал на спинку..

5 31 окт, 19:45 5 1287722

Стоит ли ставить линукс, если собираюсь всерьез заняться сями?

Ответы287723287729

6 31 окт, 19:51 6 1287723

>>1287722
Да.

Ответы287728

7 31 окт, 19:53 7 1287728

>>1287723
А зачем?

Ответы287731

8 31 окт, 19:54 8 1287729

>>1287722
Нет.

9 31 окт, 19:55 9 1287731

>>1287728
Он не дырявый как венда. Да и с такими вопросами пиздуй в /s.

Ответы287741

10 31 окт, 20:10 10 1287741

>>1287731
Там не пояснят зачем это нужно как программисту, там в /pr отправят.

Ответы287743

11 31 окт, 20:14 11 1287743

>>1287741
Ну, как программисту это тебе нужно для ручной автоматизации сборки скриптиками на баше или мейком. Хотя это можно и в сигвине вроде делать. Пожалуй на этом вроде заканчивается. Дальше идут особенности операционки: меньше вирусов, меньше тормозов, но зато ебля с драйверами и пердолинг с конфигами. Хотя против венды ещё скажу, что очень много языков поставляется из коробки в большинстве основных дистров.

Ответы287746287752287856

12 31 окт, 20:17 12 1287746

>>1287743
Ну я с cmake и make и на винде могу работать. меня больше волновал вопрос нужности знания лигукс апи.

Ответы287750287757

13 31 окт, 20:19 13 1287750

>>1287746
Но если ты на винде в студии пишешь, то ты говно, а не сишник, если что. ИМХО

Ответы287755287808

14 31 окт, 20:20 14 1287752

>>1287743
В линуксе удобно ставить языки и либы через apt install или pacman -S и т.п. Это вот точно удобно.

15 31 окт, 20:22 15 1287755

>>1287750
Пишу на mingw через vscode или clion. Довольно удобно. И не занимает 30 гигов как студия.

16 31 окт, 20:22 16 1287757

>>1287746
Линукс АПИ? Дак, это вроде Си использует винАПИ. Потому что для линуксов си - родной язык, на котором ядро в общем-то пишется.

Ответы287758

17 31 окт, 20:24 17 1287758

>>1287757
Ну как это назвать, системные вызовы вроде.
У самого какой дистр стоит?

Ответы287760291088

18 31 окт, 20:25 18 1287760

>>1287758
Убунту. Самый лучший для переката с венды.

Ответы287764

19 31 окт, 20:25 19 1287762

Поясните за звездочку перед названием функции.
Это значит, что функция возвращает массив?

Ответы287766

20 31 окт, 20:26 20 1287764

>>1287760
Kubuntu, xubuntu или чисто бубуха?

Ответы288009

21 31 окт, 20:27 21 1287766

>>1287762
Привели пример кода, я тебя не понял.

Ответы287770

27 Кб, 492x806
22 31 окт, 20:30 22 1287770

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

Ответы287779

23 31 окт, 20:35 23 1287779

>>1287770
Это звездочка не перед названием функции по сути, это звездочка относится к типу возвращаемого значения. Ты можешь писать
int✡ func
int ✡func
int ✡ func
Разницы это не имеет. Просто главное что ты возвращаешь указатель на тип данных int. Если ты не знаешь что такое указатель - то прошу читать книжки и статьи, ибо рассказывать это здесь нет смысла - все и так разжевано.

Ответы287783287787

24 31 окт, 20:38 24 1287783

>>1287779
Нет я в курсе.
Просто получается если не ставить звездочку возле функции. То компилятор будет думать, что возвращает не массив , а просто int единицу?

Ответы287789

13 Кб, 200x200
25 31 окт, 20:42 25 1287787

>>1287779
>✡
угарно

Ответы287790

26 31 окт, 20:42 26 1287789

>>1287783
Да. Но желательно пойми суть указателей.
Например arr[3] это равнозначно *(arr+3). Потому что стандартный массив это указатель вроде на первый элемент, и написывая [3] ты указываешь на то, что надо отчитать 3 блока памяти размером с тип данных указателя и взять оттуда блок памяти размером с тип указателя.

27 31 окт, 20:44 27 1287790

>>1287787
Хохму отмочил.
Двумерный жидомассив:
int✡ ✡ shekeli = (int✡ ✡ )malloc(YOUR_MUM_MONEY);

28 31 окт, 20:46 28 1287791

Ой-вей. Обожаю наёбывать гоев на байтекели.

29 31 окт, 21:11 29 1287808

>>1287750
> Но если ты на винде в студии пишешь
Если ты не умеешь в современные IDE, то ты говно, а не программист. Иди дальше sed-ом рефакторь, а less-ом логи gprof листай.

Ответы287825

30 31 окт, 21:38 30 1287825

>>1287808
Студия как по мне слишком громоздка. Продукты от jetbrains лаконичней, имхо.

31 31 окт, 22:42 31 1287856

>>1287743
На винде тоже есть шелл-скриптинг и ее автоматизациияведь билл всегда следит за юникс системами и пиздит оттуда идеи

Ответы287862

32 31 окт, 22:57 32 1287862

>>1287856
Неоднозначная ситуация. С одной стороны вонючая командная строка, с другой стороны, чтобы переехать на повершелл у всех сборка из коммандной строки и никто ни за что в повершелл не переедет, продолжая жрать говно из комнадной строки. В пинусе же баш в основном как шел используется в терминале. С этим тут всё более однозначно, хотя выбора никто не лишён. Хотя есть кое-какая проблема у баша. Он не поддерживает работу с плавающей точкой. Повершелл поддеживает. Может можно как-то исправить, не велосепидируя собственных утилит?

Ответы287870288011288224

33 31 окт, 23:21 33 1287870

>>1287862
В винде есть батники, есть mingw со всеми линуксовыми утилитами, в том числе и с bash. А повершелл - это высер, превращающий командную строку в какие-то тормозные заклинания. Ненужен.

29 Кб, 345x336
sage 34 1 ноя, 00:44 34 1287896

> 2018
> не интерпретация

Ответы287903287931288224

17 Кб, 400x214
35 1 ноя, 00:53 35 1287903

>>1287896

15 Кб, 184x200
36 1 ноя, 03:11 36 1287931

>>1287896
>2018
>долбят говно Си когда есть элегантный и такой же быстрый Crystal

Ответы287936288012288022288041288224289693

9 Кб, 200x200
37 1 ноя, 03:26 37 1287936

>>1287931
Ну ка расскажи, насколько у этого новоиспеченного языка большая библиотека? Насколько большое комьюнити? Все ли протестено и возможно?

Ответы287941288012288224288340

14 Кб, 151x200
38 1 ноя, 04:04 38 1287941

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

У Кристала как минимум пакетный менеджер есть. И есть уже компании которые его в проде используют. Дело лишь за популяризацией.

Ответы287947288008288012288291289691

39 1 ноя, 04:14 39 1287947

>>1287941
Еще один хипсторский мертворожденый язычок, ясно.

40 1 ноя, 10:17 40 1288008

>>1287941
Лучше бы про божественный interop с сишным кодом сказал.

41 1 ноя, 10:19 41 1288009

>>1287764
Ты это, ещё три DE забыл перечислить. Различия между ними только в DE.
В чём «чистота» «чистой убунту»?
Есть даже all-in-one дистрибутив

42 1 ноя, 10:21 42 1288011

>>1287862
> Может можно как-то исправить, не велосепидируя собственных утилит?
Да, попробуй программу bc.

Ответы291090

14 Кб, 472x464
43 1 ноя, 10:24 43 1288012

>>1287941
>>1287936
>>1287931
Эй, васьки, вы про Nim-то слышали?

44 1 ноя, 10:56 44 1288022

>>1287931
>Crystal
Очередной ноунеймЯП уровня йопта-скрипта с сишным синтаксисом. Причём это среднестатистическое описание любого языка младше 2000 года. Я не глядел описание, честно. Давай просто сравним количество гаедов к обоим ЯП. Всё, отсыхай.

Ответы288036288060288106

45 1 ноя, 11:09 45 1288036

>>1288022
>с сишным синтаксисом
Не, там какое то говно между Паскалем и Питухоном

class Object
def has_instance_var?(name) : Bool
{{ @type.instance_vars.map &.name.stringify }}.includes? name
end
end

Ответы288037288060

46 1 ноя, 11:15 46 1288037

>>1288036
>end
>2018

47 1 ноя, 11:30 47 1288041

>>1287931
О, а вот и сойбойчик подъехал, всю сою слизал?

48 1 ноя, 12:23 48 1288060

>>1288022
>>1288036
Долбоебы, вы руби хоть раз видели?

Ответы288064

49 1 ноя, 12:30 49 1288064

>>1288060
>руби
говноед, уходи пожалуйста

Ответы288224

50 1 ноя, 13:41 50 1288106

>>1288022
>сишный синтаксис
>я не глядел
Оно и видно, что не глядел. Там Рубишный (то есть самый идеальный) синтаксис.

Ответы288111288179

51 1 ноя, 13:47 51 1288111

>>1288106
Как же вы заебали набеги устраивать. Треды нужны не для ЯП срачей, дауны.

52 1 ноя, 15:45 52 1288163

Нахуя в си тип unsigned? Типа почему бы блять тупо функцией принтф не указывать способ вывода: %u или %d имея лишь тип int. Или я чего то недопонимаю

Ответы288189288389

53 1 ноя, 16:05 53 1288179

>>1288106
>Рубишный (то есть самый идеальный) синтаксис
Турецкое говно не нужно.

54 1 ноя, 16:14 54 1288189

>>1288163
unsigned поддерживает битоебство, добавляет бит в диапазон значений, для него определено поведение при overflow/underflow
а ещё пачка возможных багов при сравнениях signed-unsigned и вообще при неосторожном использовании unsigned
карочи, нужен ровно в тех местах, где надо битоёбствовать, в остальных местах лучше использовать int

Ответы288211

55 1 ноя, 16:54 55 1288211

>>1288189
Я так и понял, а на переносимость это может повлиять?хотя какая нахуй переносимость че я блять несу, о какой блять переносимости может идти речь если уже давным давно есть языки-конструкторы вроде питона, мда ну пиздос

Ответы288215

56 1 ноя, 17:05 56 1288215

>>1288211
да

57 1 ноя, 17:31 57 1288224

>>1288064
Он просто указал с чего взят синтаксис у Crystal. Что ты петушишь? Неадекват что ли?
>>1287936
>насколько у этого новоиспеченного языка большая библиотека?
Вроде либа поддерживает либы с Ruby, так что с этим почти нет проблем.
>>1287931
>такой же быстрый Crystal
Ты хотя бы тесты сам проделай прежде чем вбросы делать.>>1287896
>> 2018
>> не интерпретация
Поинтерпретируй ты мне тут в лоу левел программировании, петушок.
>>1287862
>и никто ни за что в повершелл не переедет, продолжая жрать говно из комнадной строки
Powershell как по мне то еще говно. Все равно у юниксов пизже

Ответы288295

58 1 ноя, 18:54 58 1288291

>>1287941
Ну вот как популяризуете свой язычок, так и приходите (через лет 15)

9 Кб, 200x200
59 1 ноя, 18:59 59 1288295

>>1288224
>насколько у этого новоиспеченного языка большая библиотека?
Вроде либа поддерживает либы с Ruby, так что с этим почти нет проблем.

>вроде

60 1 ноя, 19:37 60 1288340

>>1287936
Вот биндинги к С либам https://crystal-lang.org/docs/syntax_and_semantics/c_bindings/ . Все, что есть в С, доступно в кристале с минимумом усилий.

Ответы288384

61 1 ноя, 20:31 61 1288384

>>1288340
>C не нужен
>мы используем C либы
>Ой, а вот этого нет, сишники, когда новая либа?
>C не нужен

62 1 ноя, 20:38 62 1288389

>>1288163
> Типа почему бы блять тупо функцией принтф не указывать способ вывода
Это работало бы, если бы у тебя было только сложение и вычитание. А вот реализации деления и умножения разные для signed/unsigned.

63 2 ноя, 11:54 63 1288701

Какие части программы целесообразно переписывать на Си? Городить абстракции гораздо удобнее на С++, так ещё и неймспейсы помогают писать менее громоздко, что приятно видеть в проектах чуть больше хелоуворда, но что в проекте точно должно быть на Си?

Ответы288702288785

64 2 ноя, 11:56 64 1288702

>>1288701
>в проекте
Коком проекте?

Ответы288717

65 2 ноя, 12:30 65 1288717

>>1288702
Vasya Pupkin’s home page

66 2 ноя, 14:25 66 1288785

>>1288701
ничего

67 2 ноя, 23:12 67 1289056

Степан Прата молодца, хорошо зделали

68 2 ноя, 23:14 68 1289059

K&R - больше справочник, от шарящих шарящим. Для, собстенно, обучения не подходит.

Ответы289062

69 2 ноя, 23:16 69 1289061

прохожу его. и искренне охуеваю от заданий уровня "Напишите операционную систему" на первой главе.

Ответы289062289064

70 2 ноя, 23:16 70 1289062

>>1289061 это насчёт этого >>1289059

Ответы289066

71 2 ноя, 23:17 71 1289064

>>1289061
>прохожу его. и искренне охуеваю от заданий уровня "Напишите операционную систему" на первой главе.
Ты о чем, уважаемый? Я седьмую закончил, нет там такого.

Ответы289068

72 2 ноя, 23:19 72 1289066

>>1289062
А, ясно.
Непонятно почему KR советуют новичкам везде.

Ответы289106

73 2 ноя, 23:22 73 1289068

>>1289064
Упражнение 1.24. Напишите программу, проверяющую Си-программы на элементарные синтаксические
ошибки вроде несбалансированности скобок всех видов. Не забудьте о кавычках (одиночных и двойных),
эскейп-последовательностях (\...) и комментариях. (Это сложная программа, если писать ее для общего
случая.)
Последняя задачка первой главы. Вроде как самая челленджная. Предыдущая немногим проще. Даже ковыряя Си один год. Это всё равно становится нетривиальной задачей даже для человека, знакомого с языком.

Ответы289107

21 Кб, 688x719
74 2 ноя, 23:24 74 1289071

У меня два вопроса, можно ли так много использовать if else в цикле while?
И 2) Как переносить текст в printf, а то слишком длинный в право
алсо че то нихуя не печатается

Ответы289075289097

75 2 ноя, 23:29 75 1289075

>>1289071
погугли switch(variable) case of RANGE:
С ним и красивее будет и компилятор более конкретный ассемблерный код сгенерирует, что немного время исполнения сократит.
А в printf() можно переносить, если в конце строки поставить бэкслэш. И писать в новой строке.

Ответы289078

3 Кб, 446x117
76 2 ноя, 23:34 76 1289078

>>1289075
Спасибо.
А что можешь сказать на счет такого вывода?
с этой функции

Ответы289080289096289392

77 2 ноя, 23:38 77 1289080

>>1289078
Бля... У тебя же в коде типо юникод... А в винде в консольке какая-то особая кодировка. Попробуй перед printf() написать такую хуйню
system("chcp 1251");
для этого нужно stdio.h подключить
потом после printf() вернуть кодировку на стандартную
sytem("chcp 866");
И тогда вроде лучше напишет. Вообще вся эта тягомоть с локалями и кодировкой мне самому покоя не даёт, нужно либу себе велосепедировать для этого. Либо вообще откажись от русских букв в выводе printf(). Что в лучшую сторону повлияет на твою культуру кода.

Ответы289081289085

78 2 ноя, 23:39 78 1289081

>>1289080
>stdio.h подключить
пизжу. Нужно stdlib.h подключить.

79 2 ноя, 23:50 79 1289085

>>1289080
>А в винде в консольке какая-то особая кодировка.
Бляяя, нахуя они так делают?
>system("chcp 1251");
Вставил в начало функции. Что-то не работает.
Может в main надо пихать?
Вообщем переписал все на инглишь.

Ответы289915

80 3 ноя, 00:06 80 1289093

Почему
unsigned long long num = 1 << 32;
Выдает ошибку shift count >= width of type [-Wshift-count-overflow]?

Ответы289096

81 3 ноя, 00:17 81 1289096

>>1289078
-fexec-charset=866 -finput-charset=utf-8

>>1289093
Потому что 1 влезает в int, значит 1 - int. Пиши 1ULL << 32.

Ответы289101

82 3 ноя, 00:20 82 1289097

>>1289071
Боже. Если ты все равно уже умеешь в массивы, какого хуя у тебя по переменной на каждую цифру? Сделай массив и сократи все это до трех строк. Алсо, <= kol там наверняка ошибка, и ты хотел < kol.

Ответы289098

8 Кб, 428x75
83 3 ноя, 00:24 83 1289098

>>1289097
Ахаха, да я просто делал на быструю руку. В красоту думал в конце привести. И знаешь так и вышло, один хуй прога не работает.
Вот к примеру блядский scanf тупо не читает число.
Запускаю прогу, просит ввести что-то. Ввожу к примеру 3489,
Он пишет vi brosili 0 kibikov podryad.
Блять я уже все перебрал спецификаторы!!!

Ответы289102289103

84 3 ноя, 00:42 84 1289101

>>1289096
>1ULL << 32.

Теперь работает. Спасибо.

85 3 ноя, 00:44 85 1289102

>>1289098
Потому что тебе нужно убрать все из scanf и оставить только "%d"

Ответы289105

86 3 ноя, 00:45 86 1289103

>>1289098
> Вот к примеру блядский scanf тупо не читает число.
Ты не просил у него число. Ты просил фразу вида vvedi klv broskov 3489. Вот и вводи ее. Целиком со словами. scanf() принимает параметром не сообщение с просьбой что-то ввести, а спецификатор.

Ответы289105

87 3 ноя, 00:45 87 1289105

>>1289102
>>1289103
Бляяяя вот это я дебил ахахахахаха

88 3 ноя, 00:47 88 1289106

>>1289066
Учить С по KR это как учить оптику по трудам Ньютона.

Ответы289110

89 3 ноя, 00:53 89 1289107

>>1289068
Мне кажется, что это вообще троллинг когда советуют K&R для полных нубов, для нубов есть Кочан, Прата и т.д. а после можно и K&R почитать.

Ответы289110289112

90 3 ноя, 01:03 90 1289110

>>1289106
>>1289107
учил си на первом курсе по k&r
сквозь боль делал упражнения, перечитывал раз за разом непонятные места, включая и приложения где формально язык описан
хз что с вами не так
у англичан даже что-то вроде поговорки есть, что ты не поймешь по настоящему что написано в книге пока она не начнет разваливаться у тебя в руках

Ответы289111

91 3 ноя, 01:09 91 1289111

>>1289110
суука ржу
неудивительно что англичанин придумал линукс

92 3 ноя, 01:10 92 1289112

>>1289107
Я учил Си по K&R первой редакции (другого не было) и по чужим исходникам. Мне было норм, но я пришел с ассемблера. Сейчас я всем рекомендую Прату, но всегда находится кто-нибудь, кто с пеной у рта защищает K&R. Похуй, всегда можно скачать обе и выбрать ту, которая больше понравится.

Ответы289113

159 Кб, 520x566
93 3 ноя, 01:14 93 1289113

>>1289112
Бля, вот думаю K&R распечатать, не люблю книги с компа читать.
Но у нас распечатка стоит 5 рублей за страницу КАРЛ!.
Это 1700рублей. Интересно сколько выходит рублей у людей,у которых есть принтер и собственная краска печатнуть 350стр?

Ответы289114289117289128289133289462

94 3 ноя, 01:17 94 1289114

>>1289113
Да ты просто купи бэушную на авите. Даже с доставкой будет сильно дешевле штуки.

Ответы289125

95 3 ноя, 01:26 95 1289117

>>1289113
k&r всегда в книжных магазинах есть, даже в мухосрансках
имхо, эта так книга которую стоит иметь

Ответы289125

96 3 ноя, 01:59 96 1289125

>>1289114
Нету, смотрел
>>1289117
в магазе 1500р

Для меня дорого

Ответы289126

97 3 ноя, 02:00 97 1289126

>>1289125
Это ты в своем городе смотрел. Попроси почтой отправить.

98 3 ноя, 02:17 98 1289128

>>1289113
Ты собираешься страницу во весь лист а4 печатать? Нужно печатать по 2 страницы с двух сторон, итого нужно 288/4=72 листа.
Распечатать это может бесплатно любой знакомый офисный работник. На лазерном принтере на котором регулярно перезарпавляют тонер себестоимость печати страницы копеек 50.
А малому бизнесу нужно деньги зарабатывать, вот и получается по 5 рублей.

99 3 ноя, 02:58 99 1289133

>>1289113
Вам шашечки или ехать

277 Кб, 1136x640
100 3 ноя, 09:19 100 1289168

О каком буфере речь? Разве данные не печатаются в стандартный поток вывода? Или я опять туплю

Ответы289184289192289200

101 3 ноя, 10:38 101 1289184

>>1289168
> О каком буфере речь?
Ну на пике же подробно описано. У каждого FILE есть свой буфер (банально массив char) и три режима: нет буферизации (каждый getchar()/putchar() и т. п. летит сразу в ОС), построчная буферизация (ввод читается из ОС до Enter, т.е., построчно, а вывод кладется в буфер и выплевывается, если в буфер больше не помещается или если в буфер прилетела \n) и полная буферизация (буфер читается из ОС, когда полностью пуст, или пишется, когда буфер полностью заполнен). Плюс есть принудительный сброс буфера вне зависимости от режима с помощью flush()/fflush() со stdin не работает. Если хочется, режим и буфер можно задать самостоятельно с помощью setbuf()/setvbuf(). Буферизация сделана потому, что обращение к буферу в тысячи раз быстрее по сравнению с походом в ядро ОС из-за каждого байта.

> Разве данные не печатаются в стандартный поток вывода?
Печатаются, но режим буферизации зависит от реализации стандартной библиотеки. В винде, если я правильно помню, по традиции буферизация у stdout/stderr отключена (и все тормозит!), в линуксе обычно буферизация отключена только у stderr, а вот у stdout включена построчная буферизация.

Т.е., если ты в линуксе сделаешь:
#include <stdio.h>
#include <unistd.h>

int main(void) { printf("Hello, "); sleep(2); printf("world!\nAnd bye!"); sleep(2); }

Оно положит первый "Hello, " в буфер, подождет 2 секунды (ничего выведено не будет), положит в буфер "world!\nAnd bye!", увидит \n в буфере и выведет строку, ты сразу увидишь "Hello, world!", потом оно поспит еще 2 секунды, и уже при завершении программы стандартная библиотека, чтобы ничего не проебать, принудительно очистит буфер с помощью fflush(stdout), и только тогда ты увидишь "And bye!".

Ответы289393297934

102 3 ноя, 10:49 102 1289191

Как сравниваются числа типа unsigned int и просто int? Допустим имеется 2 переменных с одинаковым расположением битов однако одна из них имеет тип инт а другая Unsigned int, но при сравнении они не равны, вопрос почему? Типа биты же в одинаковой последовательности расположены

Ответы289194

103 3 ноя, 10:50 103 1289192

>>1289168
Каждый тред находится мозгоёб с этим буфером, заметили?

Ответы289197

104 3 ноя, 11:09 104 1289194

>>1289191
> Как сравниваются числа типа unsigned int и просто int?
Гугли integer promotions или даже arithmetic promotions. Вкратце, суть в том, что для любой арифметической операции, в том числе и для сравнения, Си преобразует операнды к одному типу, обычно к более широкому или точному из двух.

> но при сравнении они не равны, вопрос почему?
Потому что ты где-то облажался. Если типы отличаются только наличием знака, то ранг одинаковый, и signed преобразуется в unsigned (на абстрактной машине (unsigned int) -1 = -1 + (UINT_MAX + 1) = 0xffffffff, на реальной оно "само" так будет, потому что представления одинаковы), получаем одинаковое представление, числа равны. Поэтому сравнивать signed/unsigned между собой - это опасное занятие, и если уж очень хочется, стоит скастить signed к более широкому типу.

105 3 ноя, 11:17 105 1289197

>>1289192
Много лет назад у меня был телефонный справочник, его автор навелосипедил свой парсер DBF, и этот парсер читал базу на десяток метров отдельными вызовами ReadFile побайтово - поиск адски тормозил несколько минут. Так что пусть лучше аноны спрашивают, чем пишут подобное говно.

106 3 ноя, 11:22 106 1289200

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

Ответы289202

107 3 ноя, 11:28 107 1289202

>>1289200
В прошлый раз было про сканф и про макос.

108 3 ноя, 20:54 108 1289392

>>1289078
Среда какая? Пердоль кодировку файла с сырцами или найди уже наконец setlocale(LC_ALL, "rus").

109 3 ноя, 20:56 109 1289393

>>1289184
С stdin вроде же неопределенное поведение, у меня буфер вполне себе очищается.

110 3 ноя, 20:58 110 1289396

Реквестирую какую-нибудь программу на голом Си, с открытыми исходниками, где реализовано ГУИ. Хочу на C + SDL2 игрушку наваять, и тут маленько завис, пытаясь сделать меню.

Ответы289398

111 3 ноя, 21:00 111 1289398

>>1289396
nuklear

Ответы289401

112 3 ноя, 21:15 112 1289401

>>1289398
Ну, это наверное не совсем то. Мне бы принципы подсмотреть, а то пока под каждую менюшку отдельная функция в цикле крутится, что, наверное, не очень хорошее решение.

Ответы289419

113 3 ноя, 22:16 113 1289419

>>1289401
> а то пока под каждую менюшку отдельная функция в цикле крутится
Если менюшки полноэкранные, то тебе нужны сцены: структурка с необходимыми данными и указателями на функции Update (обработка пользовательского ввода и всякая анимация), Render и, если нужно, Activate/Deactivate. Делаешь в разное время разные сцены текущими, а единый главный цикл дергает у текущей сцены Update/Render.

Ответы289437289671

3 Кб, 356x154
114 3 ноя, 22:22 114 1289423

Сап синоны,
Почему данный цикл генерирует лишь одно число в sum? Я же srand тоже положил в цикл, разве он не должен каждый раз обновляться.
Или данный алгоритм возможен лишь в рекурсии?

Ответы289425289426

115 3 ноя, 22:23 115 1289425

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

116 3 ноя, 22:25 116 1289426

>>1289423
Алгоритм отрабатывает за одну и ту же секунду. Убери нахуй srand из цикла, поставь перед while.

Ответы289427

117 3 ноя, 22:27 117 1289427

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

Ответы289429

118 3 ноя, 22:35 118 1289429

>>1289427
В смысле? rand() оставь в цикле.

Ответы289432289434

119 3 ноя, 22:42 119 1289432

>>1289429
Cделал, сработало. А в чем логика то?

Ответы289461

120 3 ноя, 22:43 120 1289434

>>1289429
В цикле же он как бы каждый раз должен был сдвигать начальное число на секунду, а вне цикла нет вроде. Так как сработало то?

121 3 ноя, 22:58 121 1289437

>>1289419
И у каждой сцены, выходит, свои функции update и render? А если, например, содержимое неоднородно? В одном меню - несколько условных кнопок, в другом - условный текстбокс. Но в любом случае спасибо за направление.

Ответы289461

122 3 ноя, 23:15 122 1289445

>>1287378 (OP)
Что быстрее?

c = a;
a = b;
b = c;

или

a ^= b;
b ^= a;
a ^= b;

Ответы289453289461

123 3 ноя, 23:48 123 1289453

>>1289445
Прогони в цикле 10000000000 раз. И проставь время перед циклом и после цикла в обоих вариантах. Вообще по идее должно получиться быстрее вторым способом. Но как оно окажется на деле - хз.

124 4 ноя, 00:18 124 1289461

>>1289432
> Cделал, сработало. А в чем логика то?
Логика в том, что rand() генерирует псевдослучайную последовательность путем каких-то преобразований внутренней переменной (или переменных) seed. При вызове rand() seed изменяется, поэтому каждый новый вызов rand() генерирует новое число, тебе ничего не нужно никуда "сдвигать". srand() нужен не для того, чтобы обновлять состояние генератора или что-то там еще, что ты себе напридумывал вместо чтения документации. Он нужен, чтобы при разных запусках программы rand() выдавал разные последовательности. Т.е., если ты srand() вообще не используешь, то в seed будет что-то по умолчанию (0 или 1, например), а так как результат rand() целиком и полностью зависит от того, что лежало в seed, то без вызова srand(), ты будешь каждый раз получать одну и ту же последовательность, основанную на этих 0 или 1. То же самое происходит, если ты вызываешь srand() в цикле и кормишь его таймером. У time() разрешение - 1 секунда, т.е., велика вероятность, что каждый раз в seed будет попадать все та же константная секунда, в течение которой успевает отработать твой цикл. Одно и то же значение в seed - один и тот же выхлоп. А чтобы все работало правильно, нужно вызывать srand() один раз за все время жизни программы (или потока, если у тебя есть потоки). Лучше всего, где-нибудь в начале main(). И, разумеется, все вышесказанное не касается криптографии, там все иначе, там за использование rand() пинают по лицу.

>>1289437
Общие функции для всех меню, но своя для рендера самой игры. А дальше нужно больше абстракций. Меню - это указатель/индекс активного элемента и массив элементов управления, каждый из них - тип (класс!) и какие-то данные. render() для меню по очереди рисует каждый элемент, update() для меню стрелочками меняет активный элемент, а остальной ввод обрабатывает в зависимости от типа элемента. Можно опять же для каждого типа завести свои render()/update(), и там уже switch-ем выбирать нужный (или сделать в элементе вместо типа сразу указатель на таблицу функций методов этого типа). И потом это все можно обернуть еще дальше, чтобы магия происходила под капотом, и у тебя получится еще один наколеночный GUI-фреймворк.

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

124 4 ноя, 00:18 124 1289461

>>1289432
> Cделал, сработало. А в чем логика то?
Логика в том, что rand() генерирует псевдослучайную последовательность путем каких-то преобразований внутренней переменной (или переменных) seed. При вызове rand() seed изменяется, поэтому каждый новый вызов rand() генерирует новое число, тебе ничего не нужно никуда "сдвигать". srand() нужен не для того, чтобы обновлять состояние генератора или что-то там еще, что ты себе напридумывал вместо чтения документации. Он нужен, чтобы при разных запусках программы rand() выдавал разные последовательности. Т.е., если ты srand() вообще не используешь, то в seed будет что-то по умолчанию (0 или 1, например), а так как результат rand() целиком и полностью зависит от того, что лежало в seed, то без вызова srand(), ты будешь каждый раз получать одну и ту же последовательность, основанную на этих 0 или 1. То же самое происходит, если ты вызываешь srand() в цикле и кормишь его таймером. У time() разрешение - 1 секунда, т.е., велика вероятность, что каждый раз в seed будет попадать все та же константная секунда, в течение которой успевает отработать твой цикл. Одно и то же значение в seed - один и тот же выхлоп. А чтобы все работало правильно, нужно вызывать srand() один раз за все время жизни программы (или потока, если у тебя есть потоки). Лучше всего, где-нибудь в начале main(). И, разумеется, все вышесказанное не касается криптографии, там все иначе, там за использование rand() пинают по лицу.

>>1289437
Общие функции для всех меню, но своя для рендера самой игры. А дальше нужно больше абстракций. Меню - это указатель/индекс активного элемента и массив элементов управления, каждый из них - тип (класс!) и какие-то данные. render() для меню по очереди рисует каждый элемент, update() для меню стрелочками меняет активный элемент, а остальной ввод обрабатывает в зависимости от типа элемента. Можно опять же для каждого типа завести свои render()/update(), и там уже switch-ем выбирать нужный (или сделать в элементе вместо типа сразу указатель на таблицу функций методов этого типа). И потом это все можно обернуть еще дальше, чтобы магия происходила под капотом, и у тебя получится еще один наколеночный GUI-фреймворк.

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

Показать весь текст

125 4 ноя, 00:23 125 1289462

>>1289113
В библиотеку запишись

Ответы289463

126 4 ноя, 00:26 126 1289463

>>1289462
Там по ебанутому, в нашей библиотеке технические кгини даже нельзя забирать домой, лишь только у них на месте читать,лол.
забирать домой можно только худлит

Ответы289503

127 4 ноя, 00:32 127 1289464

rand() srand() и т.д уже давным-давно obsolete и заменен на arc4random() во всех ОС кроме Linux

Ответы289470

128 4 ноя, 01:00 128 1289470

>>1289464
Не путай ОС и стандарт языка.

Ответы289473

129 4 ноя, 01:10 129 1289473

>>1289470
с gets() тоже так было.

Ответы289477

130 4 ноя, 01:34 130 1289477

>>1289473
gets() сломан искоробки, а rand() можно реализовывать как угодно, лишь бы выполнялось требование псевдослучайности (идентичные последовательности для одинаковых seed) и если начальный seed для srand() влезает в unsigned int. Поэтому нет, не выкинут.

Ответы289481

131 4 ноя, 02:01 131 1289481

>>1289477
В том и дело, что из-за srand() уязвимости

132 4 ноя, 05:41 132 1289503

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

Ответы289687

133 4 ноя, 16:52 133 1289671

>>1289419
Поясните в целом за геймдев на си. Знаю только gtk+ GUI для созданий интерфесов, но это не совсем геймдев. А вот анимации и геймплей создавать сложно в целом? Что надо знать, какие то драйвера, директ их или какие то другие теории? Просто для меня это целая непонятная вселенная, знаю что графика есть растровоая ,векторная. но что это? Из каких частей состоит игра?

Ответы290117

159 Кб, 520x566
134 4 ноя, 17:14 134 1289687

>>1289503
Мудро

135 4 ноя, 17:31 135 1289691

>>1287941
>пакетный менеджер
>один финн чисто для лулзов запилил ядро для пакетных менеджеров для це и называет это ядром ОС, опять же, для лулзов

136 4 ноя, 17:40 136 1289693

>>1287931
>class Greeter
> def initialize(@name)
> end
> def salute
> "Hello #{@name}!"
> end
>end

>етот донный синтаксис

137 4 ноя, 17:54 137 1289697

https://ideone.com/wx2mMf
Анон, можешь помочь с интерпретатором shell? В теории работать должно, но пытаюсь понять где оподливился.

Ответы289701289702

138 4 ноя, 18:03 138 1289701

>>1289697
>https://ideone.com/wx2mMf
argc - int, а не массив
##argv -char. двумерный массив всех параметров шела
вот так должно быть:
int main(int argc, int ##argv)
{
}
##-звездочки

Ответы289825

139 4 ноя, 18:04 139 1289702

>>1289697
ой сори)

140 4 ноя, 23:16 140 1289825

>>1289701
какие же некошерные звёздочки.

Ответы289884

anonymous 141 4 ноя, 23:40 141 1289832

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

Ответы289904290117

13 Кб, 200x200
142 5 ноя, 01:17 142 1289884

>>1289825
>какие же некошерные звёздочки.

143 5 ноя, 02:33 143 1289904

>>1289832
Что имеется введу под словом "столбец" ?

144 5 ноя, 05:28 144 1289915

>>1289085
>Бляяя, нахуя они так делают?
Ребята не стоит вскрывать этот код. Вы молодые, хакеры, вам все легко. Это не то. Это не ядро линукс и даже не ГНУ. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте компилятор и забудьте что там писалось. Я вполне понимаю что данным сообщением вызову дополнительный интерес, но хочу сразу предостеречь пытливых - стоп. Остальные просто не найдут.

145 5 ноя, 14:13 145 1290065

Вопрос про processor cutch(Это же тоже самое что КЭШ?).
Допустим есть массив в котором 0-ой указатель сдвинут впрёд, то-есть можно обращаться к отрицательным элементам.
Передаю в функцию указатель на 0-ой элемент массива, комп подготавливает сразу кусок памяти. Вопрос: он готовит только правую(впереднюю) часть данных? Ну то-есть, обратись я в функции к отрицательному элементу компу придётся подготавливать уже другой кусок памяти и будет промах КЭШа?

Ответы290067290117

146 5 ноя, 14:14 146 1290067

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

Ответы290076

147 5 ноя, 14:22 147 1290076

>>1290067
Ну я ж у специалистов полюбопытсвовать хотел, к тому результат моей проверки может быть не универсален.

Ответы290083

148 5 ноя, 14:40 148 1290083

>>1290076
Понятно.

149 5 ноя, 15:40 149 1290117

>>1289671
> А вот анимации и геймплей создавать сложно в целом?
В целом просто, на практике сложно.

> директ их
C OpenGL в сишечке приятнее.

>>1289832
> мне важен сам алгоритм перебора
В массиве array[num_rows][num_cols], для каждого столбца c, для каждой строки r: если array[r][c] нолик, ставишь флаг, что столбец зашкварен и выходишь из цикла по r.

>>1290065
> cutch(Это же тоже самое что КЭШ?).
Не знаю такого.

> Передаю в функцию указатель на 0-ой элемент массива, комп подготавливает сразу кусок памяти.
Это немного не так работает. Вряд ли твой компилятор генерирует явный префетч, а сам процессор закэширует кусок массива при первом обращении, а не при передаче параметров. Гугли кэшлайн (cache-line, линейка кэша). На границы массива и указатели процессору насрать. Если какого-то значения нет в кэше, он прочитает из памяти сразу блок размером с кэшлайн (64 байта), выровненный на кэшлайн (т.е., может заодно прочитать память и чуть ниже того адреса, на котором был промах). Соответственно, если массив был выровнен по кэшлайну, то по отрицательному индексу будет промах, а если нет (malloc выравнивает только на 8 байт, например), то промаха может и не быть.

Ответы290133

Аноним 150 5 ноя, 16:07 150 1290133

>>>>1290117
премного благодарю,как у вас тут говорят "цистерну чая этому сударю"

151 5 ноя, 17:18 151 1290157

Есть еще какие легкие ИДЕ под винду, кроме как CodeBlocks?

Ответы290172290175290182

152 5 ноя, 18:06 152 1290172

>>1290157
sublime text (надо поднастроить)
notepad++
JetBrains для си++
pelles C

Ответы290175290191

153 5 ноя, 18:10 153 1290175

>>1290172
>>1290157
Правда сублим и нотпэд - не компилируют. Это просто Иде

Ответы290181

154 5 ноя, 18:18 154 1290181

>>1290175
Это не иде, а обычные текстовые редакторы с плагинами. IDE это не просто редактор кода.

155 5 ноя, 18:19 155 1290182

>>1290157
Мде... Перевелись нынче байтоёбы. Вот батя мой компилировал в командной строке, а писал на превокартах. Ещё писал порой прямо в оперативке, приатачиваясь к процессам дебагером.

Ответы290185290306

156 5 ноя, 18:20 156 1290185

>>1290182
>превокартах
перфокартах* фикс

157 5 ноя, 18:40 157 1290191

>>1290172
CLion вот вообще ни разу не легкий.

Ответы290239

anonymous 158 5 ноя, 18:50 158 1290198

внатуре cLion как вижла)

159 5 ноя, 19:48 159 1290239

>>1290191
в пизду платные программы

Аноним 160 5 ноя, 22:12 160 1290289

Аноны, не подскажите с чего начать изучение С?

161 5 ноя, 22:47 161 1290306

>>1290182
Я тоже пишу на перфокартах. Хорошие, качественные картонки, не выкидывать же их!

162 5 ноя, 23:04 162 1290311

Для чего изучать Си? Подойдёт как первый язык? До какой степени стоит его освоить?

Начал 1,5 месяца назад, для меня это первый язык, идёт очень туго, сейчас с уверенностью могу сказать что понимаю что такое указатели и как ими пользоваться, и вот думаю стоит ли продолжать. Сам никуда не спешу, если анон посоветует дойти до понимания каких-то тем, а потом перекатиться на условно джаву или пхп что бы через 3 года быть уверенным джуном или даже сеньером. Готов принять ваши советы, не смотря на тугость изучения мне нравится то, что я делаю.

Кстати что за тема со звёздочками?
*

Ответы290450290481290594

163 6 ноя, 01:42 163 1290450

>>1290311
Тож жду ответа на твой пост.
Алсо, сам не так давно начал Си изучать.
Ну думаю , что все так да. Раз уж начал, то доводи до конца. Хотя бы ознакомится со всеми возможностями и синтаксисом точно надо, не думаю, что это долго.
Долго - это изучать всякие библиотеки и писать что-то серьезное.

164 6 ноя, 04:10 164 1290481

>>1290311
>с уверенностью могу сказать что понимаю что такое указатели и как ими пользоваться
как относятся друг с другом указатели и массивы
зачем возвращать из функции указатель на указатель?
как работать с указателями на функции и зачем это надо?
особенности работы с нетипизированным указателем и зачем он нужен?
вангую, что ты еще ни одной сложносвязанной структуры данных не запилил, не говоря уж про хоть какое-то подобие библиотеки решающей часть своего функционала через каллбеки, например
ну или ничего не писал, что читает из бинарного файла или из сети в банарном формате

Ответы290578290825290849

165 6 ноя, 13:08 165 1290578

>>1290481
Правильно вангуешь про структуры и прочее, на первые 3 вопроса я могу дать ответ без Гугла, что такое "нетипизированный" могу только догадываться.
интересно кто-нибудь писал сложные структуры и то что написано в том посте всего через 1,5 месяца изучения Си

Ответы290706

166 6 ноя, 13:55 166 1290594

>>1290311
макаба фейлит текст с несколькими звездочками техст

29 Кб, 358x474
167 6 ноя, 15:45 167 1290634

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

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

Вообщем, прошу помощи.

Благодарю.

Ответы290703290752290851296119

168 6 ноя, 17:47 168 1290703

>>1290634
на либгене нет электронной копии, есть data structures using pascal тех же авторов
на амазоне можно купить не новую за 1.5 бакса

Ответы290733

169 6 ноя, 17:49 169 1290706

>>1290578
нетипизированный указатель это void
но речь не о том чтобы знать что он существует, а о особенностях работы с ним и зачем вообще применять
..

170 6 ноя, 18:23 170 1290733

>>1290703
>data structures using pascal
Не, спасибо, уж очень олдскул.

171 6 ноя, 18:47 171 1290750

Почему я могу сделать так:
char s;
s="abc"; (это кстати расширение gcc что ли?(присваивание строки после инициализации))
Но не могу так:
int i ={1,2,3};
В чём принципиальная разница? И где находиться та строка, на стеке?

Ответы290753290755

172 6 ноя, 18:49 172 1290752

>>1290634
Поддвачну.
Есть вообще хорошиая книга про Data Structures в С?
<spoiler>Как введение в алгоритмы, например.</spoiler>

173 6 ноя, 18:49 173 1290753

>>1290750З
Блин звёзды испарились, char(звезда) int(звезда).

174 6 ноя, 18:51 174 1290755

>>1290750
> s="abc"
А почему бы и нет? У тебя указатель, у строкового литерала есть адрес.

> Но не могу так:
> int i ={1,2,3};
Давно уже можешь. Тип укажи только. int ∗i = (int[]) {1,2,3}

Ответы290760290856

175 6 ноя, 19:00 175 1290760

>>1290755
Офигеть, сколько про С ни читаю в интернете "int ∗i = (int[]) {1,2,3}" такого не встречал, спасибо.

176 6 ноя, 20:48 176 1290825

>>1290481
Кто-нибудь итт сможет ответить на эти вопросы?

Ответы290829

177 6 ноя, 21:00 177 1290829

>>1290825
>Кто-нибудь итт сможет ответить на эти вопросы?
все могут

178 6 ноя, 21:17 178 1290849

>>1290481
>как относятся друг с другом указатели и массивы
Массив это и есть указатель, только он указывает на начало связных блоков памяти.
>зачем возвращать из функции указатель на указатель?
Тем самым мы возвращаем двумерный массив.
>как работать с указателями на функции и зачем это надо?
Я хз, пусть другие дополнят
>особенности работы с нетипизированным указателем и зачем он нужен?
Что бы принять данные которые нам не известны (их тип нам не известен)

Ответы290863290877

179 6 ноя, 21:18 179 1290851

>>1290634
Рутрекер чекал?

Ответы290996291043

180 6 ноя, 21:21 180 1290856

>>1290755
>у строкового литерала есть адрес.
А у нестрокового нету что ли адреса? Че за фигня..

181 6 ноя, 21:26 181 1290863

>>1290849
>Я хз, пусть другие дополнят
Чтобы передавать другие функции как аргументы для функций, но я про это только читал, сам не делал. Ещё такая хрень нужна, чтобы организовать функциональное программирование, но что это значит я тоже не знаю. Там на педивикии написано, что высшие функции - это те функции, которые принимают в качестве аргументов другие функции.

Ответы290880290881

182 6 ноя, 21:41 182 1290877

>>1290849
>Массив это и есть указатель
неверно
>зачем возвращать из функции указатель на указатель?
>Тем самым мы возвращаем двумерный массив
неверно

Ответы290880290883

183 6 ноя, 21:43 183 1290880

>>1290863
> Чтобы передавать другие функции как аргументы для функций
Тогда вопрос с подвохом: почему это компилируется и работает (нет, макаба не сожрала звездочки)?
static void hello(void) { puts("Hello, world!\n"); }
static void invoker(void func(void)) { func(); }
int main(void) { invoker(hello); }

>>1290877
Второе с некоторой натяжкой верно. Можно организовать двумерный массив как массив указателей на одномерные.

Ответы290924

184 6 ноя, 21:46 184 1290881

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

Ответы290925

185 6 ноя, 21:48 185 1290883

>>1290877
тогда свои ответы давай, если так крут

186 6 ноя, 22:23 186 1290924

>>1290880
Потому что они заинлайнятся?
мимо

187 6 ноя, 22:24 187 1290925

>>1290881
Буквальные колбеки для имитации полиморфизма.

Ответы290931

188 6 ноя, 22:35 188 1290931

>>1290925
>полиморфизма
Нинужен, ООП для пидоров

Ответы290933290934

189 6 ноя, 22:41 189 1290933

>>1290931
>ООП для пидоров
Поясни за гон

190 6 ноя, 22:43 190 1290934

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

Ответы290935290955

191 6 ноя, 22:46 191 1290935

>>1290934
> а колбеки в виде указателей на функции вместо полиморфизма
Как будто в этих ваших крестах не так. Ой, они называются по-другому.

Ответы291370

192 6 ноя, 23:22 192 1290955

>>1290934
И чо бля? Причем тут ООП парадигма?

Ответы291370

193 7 ноя, 00:29 193 1290996

>>1290851
Хм. Нет.
Спасибо, доберусь до компа поищу.

Ответы291011

194 7 ноя, 01:18 194 1291011

>>1290996
Через тор, а то он в рф забанен

Ответы291041

195 7 ноя, 02:26 195 1291041

>>1291011
Rutracker.org?
У меня все работает.
Но я не в РФ.

196 7 ноя, 02:29 196 1291043

>>1290851
Нету :(((
Проблема усугубляется тем, что книгу под абсолютно тем же названием написал индус, и именно она вылазит изо всех дыр.

197 7 ноя, 09:29 197 1291088

>>1287758
вызовы ядра тебе не нужны. из юзерспейса у тебя есть набор библиотек предоставляющих тебе какие-то стандарты.

например gnu c lib:

> This section discusses the various standards and other sources that the GNU C Library is based upon. These sources include the ISO C and POSIX standards, and the System V and Berkeley Unix implementations.

> • ISO C: The international standard for the C programming language.
> • POSIX: The ISO/IEC 9945 (aka IEEE 1003) standards for operating systems.
> • Berkeley Unix: BSD and SunOS.
> • SVID: The System V Interface Description.
> • XPG: The X/Open Portability Guide.

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

198 7 ноя, 09:35 198 1291090

>>1288011
советую qalc (command line version of Qalculate)

199 7 ноя, 09:57 199 1291098

засрали всё, говно жрут.

подумал тут в в аллокаторе свой хедер заделывать, хотя-бы чтобы всё отчищать было проще, при выходе с ошибкой из фрейма. так норм определение выравнивания?:

#ifdef ULLONG_MAX
#define LLONG_T long long
#else
#define LLONG_T char
#endif

#ifdef LDBL_DIG
#define LDOUBLE_T long double
#else
#define LDOUBLE_T_T char
#endif

#define ALIGNOF(T) offsetof(struct { char c; T member; }, member)

#define ALIGN_MAX ALIGNOF(union { char a; sint b; int c; long d; LLONG_T e;\
void@ f; float g; double h; LDOUBLE_T i;})

Ответы291142

200 7 ноя, 12:16 200 1291142

>>1291098
Почему дефайны вместо тайпдефов?

> offsetof(struct { char c; T member; }
Куча невнятного говна в отладочной информации из-за тестовых анонимных структур. Чем тебя stdalign.h не устраивает, зачем велосипеды?

> ALIGN_MAX
У различных SIMD-типов выравнивание может быть от 16 до 32 (в зависимости от компилятора и платформы). alignof(long double) не спасает, в 32-битном коде на винде оно даже меньше, чем alignof(double).

Ответы291165

201 7 ноя, 13:42 201 1291165

>>1291142
>Чем тебя stdalign.h не устраивает, зачем велосипеды?
тем что он есть только в с11. мне поебать на отладочную информацию, я отлаживаю принтами и gdb когда падает.

> alignof(long double) не спасает, в 32-битном коде на винде оно даже меньше, чем alignof(double).
какая разница, если я их всех перечислил?

> Почему дефайны вместо тайпдефов?
и нахуя мне тейпдефами засирать пространство имён? я в этом же файле undef сделаю и всё.

202 7 ноя, 18:53 202 1291325

Приветствую уважаемые эксперты.
Вот тут описывается создание битового массива:
http://www.mathcs.emory.edu/~cheung/Courses/255/Syllabus/1-C-intro/bit-array.html

Этот кусок показался мне странным:
https://pastebin.com/mhykVexw

Это нормально такие трюки проводить между int и unsigned int?
Не лучше ли использовать только unsigned int в таком случае?

Ответы291327291397

203 7 ноя, 18:55 203 1291327

>>1291325
Не понял почему пейсбин не высрался.
Вот код:
int A[100]; // A = 0 means false, A = 1 means true

int i = k/32; // i = array index (use: A)
int pos = k%32; // pos = bit position in A

unsigned int flag = 1; // flag = 0000.....00001
flag = flag << pos; // flag = 0000...010...000 (shifted k positions)

A = A | flag; // Set the bit at the k-th position in A

Ответы291371

204 7 ноя, 20:20 204 1291370

>>1290935
>ваших
Я пишу на си, расслабься.
>>1290955
Да, действительно, причём.

205 7 ноя, 20:23 205 1291371

>>1291327
А что такого собственно?
Что именно тебя смущает?

Ответы291445

206 7 ноя, 21:33 206 1291397

>>1291325
> Это нормально такие трюки проводить между int и unsigned int?
Более или менее. Но бессмысленно, потому что

> Не лучше ли использовать только unsigned int в таком случае?
Лучше. Я еще лучше uint32_t, а то в инте не обязательно 32 бита.

> pro version
Фууу. x[index >> 5] |= 1u << (index & 0x1f)

Ответы291449291450

207 7 ноя, 22:30 207 1291445

>>1291371
>int A[100];
>unsigned int flag = 1;
>A = A | flag;

int | unsigned int меня смущает

Ответы291508

208 7 ноя, 22:31 208 1291449

>>1291397
>еще лучше uint32_t, а то в инте не обязательно 32 бита.
Хотел спросить кстати, но подумал что наверное вообще нубский вопрос, стыдно

Ответы291515

209 7 ноя, 22:33 209 1291450

>>1291397
>Фууу. x[index >> 5] |= 1u << (index & 0x1f)
не понил

Ответы291515

210 7 ноя, 23:42 210 1291508

>>1291445
Ну у тебя к инту идёт битовое или, так что норм, если бы было наоборот могли бы возникнуть проблемы из-за знакового бита, а так вполне все норм, тут же unsigned просто как бит используется.
Но вообще странно, что так сделано, т.к. если вдруг будет 1 << 31, то возникнет сюрприз.

211 7 ноя, 23:53 211 1291515

>>1291449
uint32_t макрос кроссплатформенный, который гарантирует тебе беззнаковую 32-битную переменную.
>>1291450
Это не проверсия, это нечитаемое говно, не пытайся это понять, это не сложно, но такой говнокод понимать а уж тем более писать не стоит.
если коротко index >> 5, тоже самое, что index / 32, 1u << это беззнаковая единица, а нужное для неё место даёт index & 0x1f, 0x1f это 32 в хексе, соответственно index & 0x1f тоже самое, что index % 32, думаю соответствие с кодом, который ты скинул сам найдёшь

Ответы291517291522296120

212 7 ноя, 23:55 212 1291517

>>1291515
Добавлю, размер инта не управляется стандартом и зависит от платформыкомпилятора
А ещё я там опечатался, 0x1f это 31 в хексе, но % 32 это верно.

213 8 ноя, 00:10 213 1291522

>>1291515
> это нечитаемое говно
Вот деление и остаток - нечитаемое говно. А тут сразу ясно, какие биты индекса за что ответственны. И это практически идиоматичный код, он такой везде. Ты либо понимаешь побитовые операторы, либо выбираешь другой язык.

Ответы291659

214 8 ноя, 01:12 214 1291543

Привет, аноны.
В коде:
char a, b;
scanf("%c", &a);
scanf("%c", &b);
Столкнулся с проблемой переноса line feed (\n) в буфер stdin и последующей инициализацией переменной b при вызове scanf этим символом \n. Погуглив, нашел это
https://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c
Тред мне очень помог, я понял, почему возникает такое поведение, и как от этой "проблемы" избавляться.
После этого решил немного аналогично поиграться, но уже с массивами char'ов. Написал простенький код, чтобы увидеть line feed в массиве.
#include <stdio.h>

int main () {
char a[10];
char b[10];
scanf ("%s", a);
scanf("%s", b);
for (int i = 0; i < 10; i++) {
printf("%d\n", a);
}
printf("new\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", b);
}
return 0;
}
Вводные данные:
Hello
World
Что я ожидаю увидеть:
72
101
108
108
111
0
10 //аски-код \n
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Что я вижу на самом деле:
72
101
108
108
111
0
мусор
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Где код line feed символа?

214 8 ноя, 01:12 214 1291543

Привет, аноны.
В коде:
char a, b;
scanf("%c", &a);
scanf("%c", &b);
Столкнулся с проблемой переноса line feed (\n) в буфер stdin и последующей инициализацией переменной b при вызове scanf этим символом \n. Погуглив, нашел это
https://stackoverflow.com/questions/7898215/how-to-clear-input-buffer-in-c
Тред мне очень помог, я понял, почему возникает такое поведение, и как от этой "проблемы" избавляться.
После этого решил немного аналогично поиграться, но уже с массивами char'ов. Написал простенький код, чтобы увидеть line feed в массиве.
#include <stdio.h>

int main () {
char a[10];
char b[10];
scanf ("%s", a);
scanf("%s", b);
for (int i = 0; i < 10; i++) {
printf("%d\n", a);
}
printf("new\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", b);
}
return 0;
}
Вводные данные:
Hello
World
Что я ожидаю увидеть:
72
101
108
108
111
0
10 //аски-код \n
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Что я вижу на самом деле:
72
101
108
108
111
0
мусор
мусор
мусор
мусор
new
87
111
114
108
100
0
мусор
мусор
мусор
мусор
Где код line feed символа?

Показать весь текст
Ответы291545291763

215 8 ноя, 01:15 215 1291545

>>1291543
быстрофикс
в "что я ожидаю увидеть" у World тоже должен быть код \n, т.е.
...
new
87
111
114
108
100
0
10 //аски-код \n
мусор
мусор
мусор

216 8 ноя, 03:13 216 1291558

Прочел седня такой пост на форуме:

"самое главное понять самую важную вещь. в С++ многомерные массивы - не настоящие. они все равно представляют собой одномерный массив.
например int [2][2][2]; все равно будет как int [8] в памяти лежать, а первая запись лишь языковая форма вводящая новый тип. поняв это ты придешь к простой истине, что имея указатель на 0-й элемент любого массива ты получаешь начало массива любой размерности.

поэтому int #p = &mass [0][3][5][8]; - будет показывать на определенную точку в этом многомерном массиве а int
#p = &mass [0][0][0][0]; гарантирует тебе его начало. а далее игра смещений

иначе будешь использовать синтаксис монстров int (#a)[4][4]
---- # = звездочки
Вопрос, в Сишке так же?

Ответы291563291572291763291999

217 8 ноя, 04:10 217 1291563

>>1291558
в си и с++ нет многомерных массивов на уровне языка
все
очень легко
как и, например, нет строк
нет подсистемы ввода-вывода

Ответы292064

218 8 ноя, 05:56 218 1291572

>>1291558
>многомерные массивы - не настоящие. они все равно представляют собой одномерный массив
У тебя память одномерная, какие "настоящие" многомерные массивы вообще могут быть? Пиши свои типы на псевдо-ООП чтобы они тебе их имитировали.

Ответы292064

219 8 ноя, 11:43 219 1291659

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

10 Кб, 499x651
220 8 ноя, 11:49 220 1291663

ПОЧЕМУ??

Ответы291668291671291672291763292478

221 8 ноя, 11:58 221 1291668

>>1291663
Компилятор понял, что значение б ты не меняешь, а т.к. это не указатель, то и адрес ты не поменяешь, и он скорее всего, чтобы лучше понять чекни асм просто выкинул твой вызов, не создавал переменную б, а тупо распечатал 3 как строковый литерал.

Ответы291669

222 8 ноя, 12:00 222 1291669

>>1291668
И правда кстати посмотри код на асме, может въедешь, что случилось.

Ответы292481

223 8 ноя, 12:02 223 1291671

>>1291663
А вообще ты сделал какую-то хрень.
Ты взял адрес переменной и пытался присвоить этому адресу другой адрес.

Ответы291674

224 8 ноя, 12:04 224 1291672

>>1291663
a[0] = c

Ответы291675

225 8 ноя, 12:04 225 1291674

>>1291671
Чтобы было понятнее.
Если ты хочешь поменять значение переменной, то передавай её адрес, если ты хочешь поменять адрес, то тебе нужен указатель, который содержит в себе именно адрес, который ты можешь поменять, короче сделай б указателем на инт и передавай в функцию без амперсанда, должно сработать.

226 8 ноя, 12:05 226 1291675

>>1291672
Насколько я понял он хочет не значение, а адрес подменить.

227 8 ноя, 12:32 227 1291689

>myClass& my func(x,y,z...).
Зачем из функции передавать ссылкой, а не копированием?

Ответы291714291821

228 8 ноя, 13:40 228 1291714

>>1291689
Чтобы словить segmentaion fault

229 8 ноя, 15:39 229 1291763

>>1291543
> Где код line feed символа?
Продолжу повторять итт, что scanf - нелогичное, неюзабельное говно. scanf перед чтением очередного значения пропускает из входного потока все isspace() (т.е., и \n тоже), кроме случаев с charset-ом %[], потому что он может содержать пробелы и %с, потому что пробелы - тоже символы. А %s, как все остальные спецификаторы, сначала пропускает все пробелы, а потом читает до первого пробела.

>>1291558
> в С++ многомерные массивы - не настоящие
Бред. Любой массив настоящий, если с ним можно работать, как с массивом. Без разницы, как он там реализован - как массив массивов или как массив указателей на массивы. А так, да, в сишке так же, оно из сишки в кресты и пришло.

>>1291663
> ПОЧЕМУ
Аргументы функций полностью аналогичны локальным переменным (кроме того факта, что их инициализирует вызывающая функция). Ты изменил локальную переменную a, это ни на что не повлияло.

Ответы291803291830292064

230 8 ноя, 17:31 230 1291803

>>1291763
>Любой массив настоящий, если с ним можно работать, как с массивом.

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

Ответы291813

231 8 ноя, 18:00 231 1291813

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

Ответы291818291823291828291830

232 8 ноя, 18:07 232 1291818

>>1291813
>>1291813
в системе типов си нет многомерных массивов

233 8 ноя, 18:13 233 1291821

>>1291689
Если тебе нужно поле класса передать в другую функцию не член класса и там изменить, например.

39 Кб, 640x480
234 8 ноя, 18:25 234 1291823

>>1291813
>Это никак не доказывает, что многомерных массивов нет,
Уносите

Ответы292317

235 8 ноя, 18:30 235 1291828

>>1291813
>Это никак не доказывает, что многомерных массивов нет
Ну как бы я согласен, что если что-то выглядит и ведет себя как утка, то это утка, но по факту же это одномерный массив указателей.

236 8 ноя, 18:32 236 1291830

>>1291763
>>1291813
Ну и хуйню ты несёшь, братишка.

237 8 ноя, 23:03 237 1291999

>>1291558
Да, в C тоже. Связано с тем что указатель на начало статического массива в памяти процесса нигде не лежит.
type arr[size];
Понятно что:
(&arr)[m][n] == (&arr + m)[n] == arr[msizeof(arr) + n]
Можно создать динамическое подобие &arr, которая будет работать аналогично. Перемешивать обыкновенные указатели и массивы нельзя:
if ((void) &arr == (void*) arr) printf("Wtf\n");

Ответы292001292064

238 8 ноя, 23:06 238 1292001

>>1291999
>(&arr + m)[n]
Звездочку забыл

239 9 ноя, 00:25 239 1292030

а что значит настоящий многомерный массив? это когда указатели хранятся или когда размер каждого измерения?

Ответы292037

240 9 ноя, 00:53 240 1292037

>>1292030
это когда в языке есть тип данных "многомерный массив"
например, как в фортране

241 9 ноя, 02:03 241 1292064

>>1291563
>>1291572
>>1291763
>>1291999
sps

242 9 ноя, 03:25 242 1292082

Какие есть фичи и особенности с, которых нет в с++?

Ответы292086

243 9 ноя, 03:52 243 1292086

>>1292082
Красивые обои

67 Кб, 700x466
244 9 ноя, 04:44 244 1292090

зачем-то сделал вам массивы. теперь можете перекатываться в c.

https://pastebin.com/ZVchQVUm

Ответы292719

245 9 ноя, 15:52 245 1292317

>>1291823
Скажем так, они для наших глаз есть. Но просто хранятся в фиической памяти по другому. А так все есть

Ответы292367

246 9 ноя, 16:37 246 1292367

>>1292317
> Но просто хранятся в фиической памяти по другому
Давай, неси пример из языка с многомерными массивами и показывай, чем в практическом смысле они отличаются от сишных, какая разница в генерируемом коде и как именно они по-другому хранятся.

Ответы292510

247 9 ноя, 17:01 247 1292380

Больше всего меня раздражают операторы * и & для разыменования, и взятия указателя. Надо было выбрать что-то другое.

Ответы292386

248 9 ноя, 17:08 248 1292386

>>1292380
Какие твои предложения?

>взятия указателя
Не знаю такой операции.

249 9 ноя, 19:29 249 1292478

>>1291663
Что за IDE?

Ответы292501

250 9 ноя, 19:31 250 1292481

>>1291669
> посмотри код на асме
Это где?

Ответы292536

251 9 ноя, 20:02 251 1292501

>>1292478
Vusial Studio, если глаз не обманывает

252 9 ноя, 20:08 252 1292510

>>1292367
А хуйнаны шпаны не показать ?

253 9 ноя, 21:07 253 1292536

>>1292481
Тебе неправильно ответили.

Ты взял указатель и передал его в функцию.
В той функции ты изменил значение ЛОКАЛЬНОЙ переменной a на некоторое другое значение, потом вышел. При этом в main ничего не поменялось.

а - локальная переменная в функции. Действия с ее значением без на main никак не влияют. Тебе нужно чем-то выстрелить по этому указателю.
Например: a = 4. Или a = c.

В asm смотреть за этим не нужно.

И еще, ты просто так не сможешь сделать так, чтобы b в main ссылалась на какое-то другое место в памяти. Можно только пошатать значение.

Ответы292539

254 9 ноя, 21:10 254 1292539

>>1292536
\a = \4
\a = \c

255 9 ноя, 22:03 255 1292557

Подскажите сортировку для 5000000 элементов, надо только название, код сам напишу. Время очень критично. Массив целочисленный.

Ответы292559

256 9 ноя, 22:08 256 1292559

>>1292557
Radix

257 10 ноя, 11:32 257 1292719

>>1292090
Какой пиздец. Эталонный говнокод. Прям образец для, рамки не хватает, как программировать нельзя.

Ответы292817

258 10 ноя, 14:25 258 1292817

>>1292719
или ты просто хейтерок, завидующий моему глубинному пониманию вопроса.

Ответы292826292870

75 Кб, 224x225
259 10 ноя, 14:33 259 1292826

>>1292817
>наговнокодил
>глубинное понимание

Ответы292837

84 Кб, 605x807
260 10 ноя, 14:53 260 1292837

>>1292826

261 10 ноя, 15:32 261 1292870

>>1292817
Я конечно понимаю, что юношеский максимализм помноженный на сексуальную неудовлетворённость дурманит твой мозг, но переменные вида pmss/vd, вложенные циклы и прочие «алгоритмы» это фиаско.

Ответы292900

262 10 ноя, 15:57 262 1292900

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

263 10 ноя, 16:00 263 1292905

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

264 10 ноя, 16:53 264 1292932

>>1287378 (OP)
Здравствуйте, мне нужна помощь, суть такова. У меня есть динамический массив, сделанный через realloc. Мне необходимо иметь указатель на один из элементов данного массива. Всё бы хорошо, но у меня есть ещё и второй динамический массив тоже сделанный через realloc и когда я увеличиваю размерность этого второго динамического массива, то указатель уже указывает не на один из элементов первого массива, а на непонятно на что. Олды, подскажите как быть?

Ответы292947294074

265 10 ноя, 17:19 265 1292947

>>1292932
Храни индексы, а не готовый указатели, очевидно же.

Ответы292953

266 10 ноя, 17:27 266 1292953

>>1292947
Мне нужен именно указатель.

Ответы292955

267 10 ноя, 17:30 267 1292955

>>1292953
Сочувствую, но указатели на элементы и realloc несовместимы.

Ответы292959

268 10 ноя, 17:37 268 1292959

>>1292955
Тогда как динамически выделить память под второй массив?

Ответы293185

269 10 ноя, 21:55 269 1293185

>>1292959
Еще раз. У тебя так: ты хранишь указатель на массив, хранишь указатель на элемент внутри массива, realloc() перемещает массив в новое место памяти, и указатель на элемент начинает указывать на мусор (возможно, не после первого же realloc, а возможно, как у тебя, после realloc другого массива - это все зависит от реализации менеджера памяти). Но можно так: хранишь указатель на массив, хранишь индекс элемента (смещение внутри массива), можешь хоть смещение в байтах хранить, если у тебя элементы разного размера - похуй. Больше данных ты от этого хранить не станешь, но доступ становится сложнее на целую одну операцию. Там, где ты писал ∗elem_ptr или elem_ptr[0], ты будешь писать ∗(array_ptr + index) или array_ptr[index]. Если тебя это чем-то не устраивает, покажи кусок кода с примером того, что ты пытаешься сделать.

Ответы293521

67 Кб, 488x576
270 11 ноя, 14:07 270 1293521

>>1293185
Да это понятно, я сначала так и хотел делать, но дело в том, что мой массив - это массив структур, у которых поля - это указатели на элементы этой же структуры (по сути сеть). И если я хочу перейти от одного узла сети к другому, мне необходимо менять указатель на текущий элемент, который я возьму из поля текущего элемента. Я не могу взять индекс массива следующего узла сети, потому что в формате элемента он отсутсвует, понимаешь?

Ответы293538

271 11 ноя, 14:30 271 1293538

>>1293521
Ты что-то делаешь очень неправильно.

> у которых поля - это указатели на элементы этой же структуры
Ты все еще можешь хранить офсеты вместо указателей. Ты можешь даже хранить офсеты внутри указателей, хоть это и UB, и вообще дикий говнокод.

> потому что в формате элемента он отсутсвует, понимаешь?
Понимаю. Отсутствует - добавь.

Но если уж очень хочется, есть другой вариант. Храни массив кусочками. Выделяешь массив под свои структуры с запасом (ну там сколько не жалко, допустим, сразу пару сотен элементов), хранишь количество заполненных элементов или помечаешь неиспользованные как-нибудь - похуй. Когда этот кусок полностью заполнится, вместо того, чтобы realloc()-ом менять его размер, выделяй другой, новый кусок malloc()-ом и начинай заполнять его. Естественно, тебе придется хранить указатели на все куски твоего массива, хотя бы для того, чтобы потом все это освободить правильно. Тебе придется поддерживать какой-нибудь free-list для удаленных элементов, чтобы можно было втыкать поверх них новые элементы. Т.е., фактически придется написать небольшой кастомный аллокатор. К тому же, из-за того, что массив перестанет быть непрерывным, тебе будет сложнее его обходить. Но третьего варианта тут нет.

Ответы293543

272 11 ноя, 14:39 272 1293543

>>1293538
>Отсутствует - добавь
Добавил ещё вчера, вроде нормально. Просто не хотелось поначалу засорять структуру, вот и пришёл сюда в поисках более элегантного решения, но раз такого нет, то придётся оставить как есть. Спасибо.

Ответы293573

273 11 ноя, 15:33 273 1293573

>>1293543
Если тебе о нем не сказали, не значит, что его нет.
80% проблем идут от хренового дизайна, уверен, если ты года через два попробуешь сделать тоже самое, ты найдёшь намного более интересный подход

274 11 ноя, 17:15 274 1293648

Что происходит, когда пытаешься сложить/вычесть строки
"1345" - "1345", "1345" + 1 и т.д.

Ответы293669

275 11 ноя, 17:57 275 1293669

>>1293648
Просто вспомни, что "строка" - это массив char с неявным \0 на конце. Когда ты используешь массив в выражениях, он кастится к указателю. Вот и твои вопросы сводятся к тому, что будет, если вычесть один указатель из другого или прибавить что-то к указателю.

> "1345" - "1345"
ptrdiff_t x = адрес одной строки - адрес другой строки. Разница между адресами строк в штуках char (т.к. строка - массив char). Но вообще тут undefined behavior: одна из возможных проблем в том, что если компилятор схлопнет эти два одинаковых литерала в один, разница будет 0, а если не схлопнет - какое-то число. Поэтому вычитание указателей работает правильно только когда указатели указывают на разные части одного и того же объекта.

> "1345" + 1
(адрес "1345") + 1, т.е., указатель, указывающий на "1345" + 1 = указатель на "345".

anonymous 276 11 ноя, 22:07 276 1293828

Двач,выручай!
Выделить под массив динамически память.
Обращаться к элементам массива необходимо используя указатель.

1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: - сумму отрицательных элементов массива;
- произведение элементов массива, расположенных между максимальным и минимальным элементами

Ответы293837294075294110294128294362

277 11 ноя, 22:22 277 1293837

>>1293828
double array = malloc(N sizeof(double));

278 12 ноя, 00:46 278 1293915

Как начать писать маленькие проекты если никогда ничего серьёзного не писал кроме задач на 3 функции максимум. Что почитать, посмотреть?

Ответы293989

279 12 ноя, 02:36 279 1293951

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

280 12 ноя, 08:10 280 1293989

>>1293915
попенсорс проект найди, читай код, фикси баги простые.
Например https://github.com/neovim/neovim/labels/good first issue

Ответы294040

281 12 ноя, 11:16 281 1294040

>>1293989
Спасибо, попробую

282 12 ноя, 12:10 282 1294074

>>1292932
Запили свой динамический массив, который использует не realloc, а выделяет память чанками некоторого размера. Перегрузи всякие операции типа ++ и будет тебе счастье.

283 12 ноя, 12:13 283 1294075

>>1293828
https://ideone.com/A3li5K

Надеюсь шарящий анон поправит.

Ответы294103294105294264

Аноним 284 12 ноя, 13:11 284 1294103

>>1294075
премного благодарен

285 12 ноя, 13:13 285 1294105

>>1294075
Полный бред. Числа не вещественные ни разу, какие-то промежуточные копирования массива, хотя ты его и так не модифицируешь, задание не прочитал - произведение не то. Реально задача решается максимум двумя циклами.

Аноним 286 12 ноя, 13:18 286 1294110

>>1293828
по-моему этот код лучше

/ Задание 1: Написать программу в соответствии с вариантом, выделив под массив динамически память.
Обращаться к элементам массива необходимо используя указатель.

1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: - сумму отрицательных элементов массива;
- произведение элементов массива, расположенных между максимальным и минимальным элементами./

#include <stdio.h>
#include <conio.h>
void main ()
{
int i,n,tmp1=0,tmp2=0;
int proizv=1,sum=0, max, min;

//vvod massiva
do{
printf("Vvedite kol-vo elementov massiva (<30)\n");
scanf("%d",&n);
}
while (n>=30);

float b[n];
for (i=0;i<n;i++)
{
printf("Vvedite element [%d]\n", i+1);
scanf("%f",b+i);
}

for (i=0;i<n;i++){
if ((b+i)<0){
sum+=(b+i);
printf("Summa otriz elementov matrici = %d\n", sum);
}
}

//max
max=b;

for (i=0;i<n;i++)
{
if ((b+i)>max)
{
max=(b+i);
tmp2=i;
}}
printf("Max element matrici = %d\n", max);

//min
min=(b+1);
for (i=0;i<n;i++)
{
if ((b+i)<min)
{
min=(b+i);
tmp1=i;
}}
printf("Min element matrici = %d\n", min);

for (i=tmp1+1;i<tmp2;i++)
{
proizv=proizv(b+i);
}
printf("proizv mezhdu min i max :%d",proizv);
}

Аноним 286 12 ноя, 13:18 286 1294110

>>1293828
по-моему этот код лучше

/ Задание 1: Написать программу в соответствии с вариантом, выделив под массив динамически память.
Обращаться к элементам массива необходимо используя указатель.

1. В одномерном массиве, состоящем из n вещественных элементов, вычислить: - сумму отрицательных элементов массива;
- произведение элементов массива, расположенных между максимальным и минимальным элементами./

#include <stdio.h>
#include <conio.h>
void main ()
{
int i,n,tmp1=0,tmp2=0;
int proizv=1,sum=0, max, min;

//vvod massiva
do{
printf("Vvedite kol-vo elementov massiva (<30)\n");
scanf("%d",&n);
}
while (n>=30);

float b[n];
for (i=0;i<n;i++)
{
printf("Vvedite element [%d]\n", i+1);
scanf("%f",b+i);
}

for (i=0;i<n;i++){
if ((b+i)<0){
sum+=(b+i);
printf("Summa otriz elementov matrici = %d\n", sum);
}
}

//max
max=b;

for (i=0;i<n;i++)
{
if ((b+i)>max)
{
max=(b+i);
tmp2=i;
}}
printf("Max element matrici = %d\n", max);

//min
min=(b+1);
for (i=0;i<n;i++)
{
if ((b+i)<min)
{
min=(b+i);
tmp1=i;
}}
printf("Min element matrici = %d\n", min);

for (i=tmp1+1;i<tmp2;i++)
{
proizv=proizv(b+i);
}
printf("proizv mezhdu min i max :%d",proizv);
}

Показать весь текст
Ответы294128

287 12 ноя, 13:36 287 1294128

>>1294110
А если индекс максимального элемента меньше, чем индекс минимального? И вообще, кто-нибудь здесь способен решить ОДНИМ циклом >>1293828 ?

Ответы294196

288 12 ноя, 14:26 288 1294165

>>1287378 (OP)
в Pelles C 9.0 C17 подвезли
http://www.smorgasbordet.com/pellesc/changes_800_900.htm

Ответы294185

289 12 ноя, 14:47 289 1294185

>>1294165
Ну, C17 - это мелкие фиксы, никаких фич. И гораздо хуже, что Pelle дропнул поддержку 32-битных ОС. Компилятор, который не только не кроссплатформенный, но даже на собственной платформе не везде работает - это эталонное нинужно.

290 12 ноя, 14:57 290 1294196

>>1294128
Поиск минимального и максимального элемента это уже два цикла, чисто в теории можно объединить в один, но нахуя? Есть такое условие в задаче?

Ответы294203294212

291 12 ноя, 15:02 291 1294203

>>1294196
За один можно управиться. А вот найти сумму между ними - уже второй.

292 12 ноя, 15:13 292 1294212

>>1294196
> чисто в теории можно объединить в один, но нахуя?
Потому что гонять два цикла для такой простой вещи - идиотизм даже в нашем современном мире.

> Есть такое условие в задаче?
Нет. Но быть макакой стыдно.

293 12 ноя, 16:03 293 1294263

Есть какой-нибудь источник в котором описаны сокращение типа if (!str) или while (str) и подобные. Часто читая код натыкаюсь на подобные сокращения и по пол часа ищу их в гугле

Ответы294270

294 12 ноя, 16:04 294 1294264

>>1294075
Кстати, никто не мешает написать так
for (int j = 0; j < size; j++)
{
if (numbers[j] < min)
min = numbers[j];
if (numbers[j] > max)
max = numbers[j];
}
и не нужно создавать кучу циклов

295 12 ноя, 16:17 295 1294270

>>1294263
> сокращение типа if (!str)
Глава про операторы в твоей книжке про Си.

296 12 ноя, 17:57 296 1294362

>>1293828
Пришел домой и сделал с одним циклом, если кому-то интересно: https://ideone.com/E5nsnf

anonymous 297 12 ноя, 19:29 297 1294411

двачик,выручай
Двумерный массив, содержащий равное число строк и столбцов, называется магическим квадратом, если суммы чисел, записанных в каждой строке, каждом столбце и каждой из двух больших диагоналей, равны одному и тому же числу. Определить, является ли данный массив А из n строк и n столбцов магическим квадратом.(размерность с клавиатуры+это должно быть решено чере указатели и должна быть выделена память через ,malloc)
если западло не пишите код,мне бы просто логику усвоить ,я делал аналогичную хрень без указателей ,но с ними ничего не выходит

Ответы294418

298 12 ноя, 19:42 298 1294418

>>1294411
В обычном массиве a[n][n] ты адресуешь элемент как a[y][x]. В динамическом массиве a[n ∗ n] ты адресуешь элемент как a[y ∗ n + x]. Суммы циклом посчитаешь, ничего сложного там нет.

1,2 Мб, 1920x1080
299 12 ноя, 19:51 299 1294426

Почему нихуя не выводит, двач? Почему отрицательная обыкновенная дробь, меньшая единицы по модули, в СИ не меньше 0? Т.е. -6/6 СИ понимает что она меньше нуля, а вот -5/6 и т.д не понимает?

Ответы294435

300 12 ноя, 20:03 300 1294435

>>1294426
-5/6 == 0
-5/6.0 == -0.83

Ответы294442

301 12 ноя, 20:21 301 1294442

>>1294435
Спасибо

302 12 ноя, 20:59 302 1294468

Господа. Не так давно узнал, что все (или во всяком случае те, что используются большинством) операционных систем, используют для адресации виртуальной памяти лишь 48 бит из 64 битного указателя (на 64 битных архитектурах, само собой). Что означает, что старшие 16 бит фактически можно использовать для данных. Так же слышал, что это используется для реализации tagged pointers.

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

Ответы294503

303 12 ноя, 21:39 303 1294503

>>1294468
> почему ОС просто не игнорирует их
Потому что ОС их как раз игнорирует, а вот процессор очень обижается, если адрес не в канонической форме.

> надо эти 16 бит обнулять
Если бы. Туда надо дублировать 47-ой бит. Две лишних инструкции вместо одной.

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

Алсо, если тебе нужно меньше бит (например, флаг какой-нибудь указателю поставить), лучше используй выровненные указатели, они портабельнее, и их фиксить проще: например, обычный malloc() без дополнительных телодвижений выравнивает на alignof(double) == 8 (обычно), и 3 младших бита - твои.

304 13 ноя, 02:41 304 1294649

Хвощ, ковыряю Си, запрашиваю объяснение сего. Если я правильно понимаю, s содержит адрес первого элемента массива. Функция печатает элемент массива, затем меняет адрес, хранящийся в s, на адрес следующего элемента массива.

Но загадкой для меня является сочетание while (s).
Что это значит? Адрес, который s содержит, рано или поздно выйдет за границы массива. Если он пустой, то указателю присвоится значение 0 и цикл прервется. Но что если по этому адресу хранится какое-нибудь значение?

int puts (const char s)
{
while (s) putchar (s++);
return 1;
}

Ответы294650294651

305 13 ноя, 02:44 305 1294650

109 Кб, 516x4724 Кб, 258x110

>>1294649
Блять сложно. Почему звездочки не ставятся то

Ответы294651

306 13 ноя, 02:52 306 1294651

>>1294650
>>1294649

Ай блять, вспомнил, нуль терминатор в конце же

Ответы294655

307 13 ноя, 03:00 307 1294655

>>1294651
>терминатор
Как же я обожаю это название нулевого символа.
мимо

Ответы294793

39 Кб, 700x448
308 13 ноя, 12:48 308 1294793

>>1294655

6 Кб, 640x21
309 13 ноя, 16:23 309 1294893

Как правильно понять эту строку?
Если строка "пустая" ИЛИ выделено ноль памяти?

Ответы294924

612 Кб, 1280x921
310 13 ноя, 16:59 310 1294924

>>1294893

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

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

Ответы294935

311 13 ноя, 17:07 311 1294935

>>1294924
>автор данной строки либо лиственник, либо конченный долбоёб.
Хуйня, норм код доя смузихлебов. Если по хардкору, то в чанк можно побайтово и копировать, без подсчета длины строки, если не додумался хранить длину в переменной.

312 14 ноя, 02:44 312 1295216

##mas;
А когда мы очищаем двойной массив с помошью функции free(mas), то массивы внутри этого двойного массива тоже автоматом чистятся ?:)

Ответы295310

313 14 ноя, 11:34 313 1295310

>>1295216
Нет, это сишка, ничего автоматом не чистится.

Ответы295507

309 Кб, 700x462
314 14 ноя, 18:05 314 1295507

>>1295310

Карьера байтоеба в российских реалиях 315 14 ноя, 19:37 315 1295541

Реально ли вкатиться в байтоебство и найти работу в России?
Собираюсь через переехать в спб из своей мухосрани, но есть еще 1-2 года в запасе, которые можно будет потратить на изучение разных штук и технологий. Я понял, что успешный байтоеб в 2019 году должен уметь: в C, C++, Linux, Linux Kernel и какой-нибудь скриптовый язык вроде питона и систему контроля версий, а также алгоритмы и структуры данных для собеседования.
Стоит ли игра свеч? Или лучше оставить байтоебство как хобби, а работать где-нибудь в вебе или энтерпрайзе?

Ответы295657

316 15 ноя, 01:35 316 1295657

>>1295541
>энтерпрайзе
ЧТо это такое кстати?

317 15 ноя, 01:41 317 1295660

union {
int i; short b;
}

Как сделать union у которого бы b выводило старшую, а не младшую половину? Что-то типа

union {
int i; struct { short a, b } b;
}

Но только чтобы обращаться к старшей половине можно было бы не union.b.b, а просто union.b?

Ответы295754295760295831

318 15 ноя, 09:47 318 1295754

>>1295660
чем тебя так не устраивает?
union {
int i; short a; short b;
}

Ответы295755

319 15 ноя, 09:48 319 1295755

>>1295754
а стоп, я туплю

320 15 ноя, 10:00 320 1295760

>>1295660
вот так, если компилятор поддерживает анонимные структуры
union {
int i; struct { short a, b };
}

Ответы295842

321 15 ноя, 10:55 321 1295772

>>1287378 (OP)
ой код
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a=1000,c,b;
stop:
scanf("vvedite cteneh:%d",&c);
for(b=0;b!=INT_MAX;b++)
{
a=a>>b;
if(b==c)
{
break;

}
printf("%d\n",a);
}
goto stop;
}

322 15 ноя, 13:16 322 1295831

>>1295660
Сделай это битовой операцией, хули ты. Обращаешься в твоём случае к i, и делаешь (i & (0xFFFF << 16))

Ответы295837295838295842

323 15 ноя, 13:26 323 1295837

>>1295831
Это если инт 32 битовый.
Естественно.

26 Кб, 403x497
324 15 ноя, 13:27 324 1295838

>>1295831
Но лучше не используй инт, используй unsigned int, а то после такого сдвига настанет пиздец знаковому биту.

325 15 ноя, 13:32 325 1295842

>>1295760
Алсо можно ещё так.
union { int i}
Что-то-там = i & 0s //старшие биты I
Если хочешь получить старшие биты как просто биты, то ещё можешь сдвинутьно бля не двигай знаковые переменные, иначе тебя бог накажет
>>1295831-кун

326 16 ноя, 02:19 326 1296103

>>1287378 (OP)
Аноны, может кто нибудь знает как найти параметры функции в памяти? И как они вообще расположены?
Возможно есть статейки на эту тему.

Ответы296459

327 16 ноя, 02:31 327 1296104

Например есть функция
int sum (int n, ...)
Как найти адрес в памяти остальных параметров?

Ответы296331

63 Кб, 534x438
328 16 ноя, 05:11 328 1296119

>>1290634
В последний раз попрошу анона помочь найти в оцифрованном виде и больше не буду вскрывать эту тему.

329 16 ноя, 05:34 329 1296120

>>1291515
>index & 0x1f тоже самое, что index % 32,
Я реально сейчас в катарсисе. Почему я не знал об этом? Это же гениально.
Что быстрее вычисляется, остаток или AND, я думаю вопрос риторический.

Хотя:
Optimizing compilers may recognize expressions of the form expression % constant where constant is a power of two and automatically implement them as expression & (constant-1). This can allow writing clearer code without compromising performance.

Ответы296216

sage 330 16 ноя, 14:19 330 1296216

>>1296120
> Optimizing compilers may recognize expressions
Да. Каждый первый компилятор умеет в умножение через lea и/или сдвиги, деление через сдвиги и остаток через &. И еще умеют деление умножением заменять. Но

> This can allow writing clearer code
это хуйня полная. В варианте с & сразу видно, что оно маскирует биты, видно, сколько битов и все такое. А с % надо об этом думать. Традиционно, для улучшения понимания происходящего, даже после того, как компиляторы научились оптимизировать, если дело касается битоебли, используют сдвиги и логические операторы, а если не касается - нормальные умножение, деление и остаток.

331 16 ноя, 18:26 331 1296331

>>1296104
Ну в памяти оно лежит в все подряд, тебе только нужно определиться что за тип данных, колличество и порядок элементов передающихся в такую функцию, выцеплять можно через указатель, например. Просто добавить к нему 1 и получишь следующий после адреса "n" адрес.

https://rsdn.org/forum/cpp/418970.1
Первая же ссылка в Гугле, можешь ещё по теме поискать.

Ответы296404

171 Кб, 700x703
332 16 ноя, 18:34 332 1296340

>>1287378 (OP)
Анончи, можно ли на Си создать двумерный массив, второй элемент которого является массивом переменной длины:

[
...
[0, [1, 2, 3, 4, 5]],
[1, [1, 2]],
[2, 0]
...
]

Ответы296363

333 16 ноя, 18:48 333 1296363

>>1296340
как вариант массив структур с указателем на массив
struct s
{
int a;
int *pt;
}

Ответы296392

334 16 ноя, 19:37 334 1296392

>>1296363
А как это все инициализировать в хедер? Мне нужно статически.

Ответы296404

335 16 ноя, 19:58 335 1296404

>>1296331
> Ну в памяти оно лежит в все подряд
> выцеплять можно через указатель
Ни в коем случае нельзя так делать. Это работало с 32-битным __cdecl в x86. В современном мире параметры могут лежать и в SIMD-регистрах, и в обычных, и в стеке, в зависимости от их типа и ABI в целом (т.е., va_arg(ap, int) и va_arg(ap, float) могут читать из разных мест). Поэтому #include <stdarg.h> va_list, va_start, va_arg, вот это все.

>>1296392
Статически - красиво никак нельзя не заставить компилятор сгенерить безымянные вложенные массивы, и это очень огорчает, когда тебе нужно задавать статически всевозможные древовидные структуры в Си, но можно сделать это явно, по частям, как макака: https://ideone.com/P0qbBE

Ответы296433

336 16 ноя, 21:19 336 1296433

>>1296404
>https://ideone.com/P0qbBE
Пиздос

Ответы296434296681

337 16 ноя, 21:22 337 1296434

>>1296433
Два чаю.

Ответы296454

338 16 ноя, 22:33 338 1296454

>>1296434
А чего вам не нравится? Про руки я пошутил, для ленивых есть кодогенерация. У меня в одном из проектов килобайт этак 60 таких вот массивов, разве что слегка сложнее: там список типов сущностей, списки их свойств и дочерних сущностей, ну и методы всякие, для манипуляции и (де)сериализации. Нужно было такое на крестах писать, но когда я это осознал, было уже поздно.

Ответы296461296511

339 16 ноя, 22:56 339 1296459

>>1296103
Есть соглашения о передаче аргументов в функцию.
Для amd64 Linux, System V ABI:
Первые аргументы в регистрах rdi, rsi, rdx, rcx, r8, r9, иногда еще xmm.
Остальные лежат в стеке задом наперед.

340 16 ноя, 22:58 340 1296461

>>1296454
>есть кодогенерация
Это понятно. Я еще вариант придумал, хранить data в сплошном бинарном массиве, а в инициализации указывать ссылку на этот массив и смещение. Какой вот стул выбрать, пока не ясно. И тут вопрос, не распидарасит ли конпелятор мой бинарный массив, похеря смещения.

Ответы296511

341 17 ноя, 01:14 341 1296511

>>1296461
>>1296454
Анон, переписал твою мокропиську

https://ideone.com/dUllI1

Ответы296681

342 17 ноя, 14:02 342 1296679

Сколько (максимум) строк кода должно быть в одном си-файле, чтобы упростить читаемость?

Ответы296681

343 17 ноя, 14:17 343 1296681

>>1296511
Бля. Ты прав. Я вспоминал об этом варианте, но когда-то раньше у меня с ним были какие-то проблемы, и я даже не удосужился затестить, когда отвечал тут >>1296433. Кстати, можно обернуть инициализатор в макрос, тогда и нуль-терминатор не понадобится.

>>1296679
Сам посчитай: https://www.sqlite.org/2018/sqlite-amalgamation-3250300.zip Похуй, сколько строк в файле. Программу разбивают на модули по смыслу, и чтобы не пересобирать и не линковать лишнее из-за мелких изменений. А к читаемости это никак не относится. Ну, разве что ты пользуешься модными "редакторами" на электроне, но в таком случае ты сам выбрал страдания.

Ответы296689

46 Кб, 704x396
344 17 ноя, 14:25 344 1296689

>>1296681
>Кстати, можно обернуть инициализатор в макрос
Оставить поле длины и подсчитывать макросом? Кокой же вариант выбрать, хм...

345 17 ноя, 17:43 345 1296784

>>1287378 (OP)
Есть ли гайды как запилить свой memory pool?

Ответы296823

346 17 ноя, 19:12 346 1296823

>>1296784
>>1296784
сорцы apr?

347 18 ноя, 16:47 347 1297246

>>1287378 (OP)
Может кто-нибудь посоветовать какую-нибудь литературу по ipc/параллельному программированию в POSIX и System V? Не по основам, с безопасными реализациями алгоритмов.

348 19 ноя, 12:37 348 1297600

main()
{
func1();
func2();
pthread_create();
}

Тут все функции выполнятся строго по порядку, или компилятор может сделать так, что pthread_create() начнёт выполняться раньше?

Ответы297625

349 19 ноя, 13:45 349 1297625

>>1297600
С чего бы им не по порядку запускаться?

Ответы297680

350 19 ноя, 14:00 350 1297630

>>1287378 (OP)

решил я тут пдставить очко под этот ваш си, ебать, че там скачивать нужно, нотпад хуе мое?

стремящаяся-умственно-отсталая-веб-обезьянка

351 19 ноя, 14:44 351 1297663

Анончики хэлп.
Create a function ft_count_if which will return the number of elements of the array that return 1, passed to the function f.
The array will be delimited by 0.

Нужно создать ф-цию которая возрвращает число эл-ов массива который возвращает 1? Или как более точно перевести. Не пойму что требуется в этом задание

Ответы297678

352 19 ноя, 15:10 352 1297678

>>1297663
Нужно создать функцию, которая считает элементы массива которые подходят определенному условию, соответственно тебе нужно сделать так чтобы она принимала сам массив, количество элементов в нем и какой-либо предикат. Вот вроде функции remove_if в этой статье - https://ru.cppreference.com/w/cpp/algorithm/remove

353 19 ноя, 15:20 353 1297680

>>1297625
Где-то читал, что функция создания потока может стартануть раньше, но раз это не так, то ок.

354 19 ноя, 15:24 354 1297682

>>1287378 (OP)
Есть ли библиотеки для написания простеньких игр на Си?

Ответы297690

355 19 ноя, 15:52 355 1297690

>>1297682
SDL2, CSFML, WinAPI, NCurses...

Ответы297699

356 19 ноя, 16:12 356 1297697

Все тянет начать писать игру, но никак не могу придумать, как бы накостылить на SDL2 гуишку для нее.

Ответы297726

357 19 ноя, 16:19 357 1297699

>>1297690
>CSFML
Пробовал установить пару лет назад, ох и поебался я с ней тогда.

358 19 ноя, 17:08 358 1297726

>>1297697
Nuklear и его отродья.

Ответы297727297809

359 19 ноя, 17:09 359 1297727

>>1297726
Не совсем то, мне внутриигровое гуи, надо, но спасибо, потыкаю.

Ответы297809

360 19 ноя, 19:50 360 1297809

>>1297726
>>1297727
Хм, придется руками прикручивать SDL_Renderer. Попробую лучше сделать свое, как нужно конкретно мне. Осталось только придумать, как адекватно коллбэки на кнопках обрабатывать - не хочу городить кучу глобальных переменных, чтобы менять сцены или там текст в текстбоксах обновлять.

361 19 ноя, 22:09 361 1297862

Аноны, а где можно почитать про буферы и буферизацию? Рассказывается ли об этом в K&R или у Прата? Конечно, чтобы понять, что такое fully buffered, line buffered, unbuffered i/o мне хватило парочки тем на stackoverflow. Однако я не понял, почему при буферизации чтения и записи идет выигрыш в производительности. Есть некое абстрактное представление, но хочется конкретики, да и в этой абстрактности я не уверен. Хочется полных и точных объяснений, особенно, когда имеешь дело с Си. Например, мы имеем файл с записью "Hello". Мы fscanf'им его в массив. Так вот, зачем функция помещает эту запись сначала в буфер, а лишь затем - в массив? Ведь буфер - это и есть тот же самый масив. Зачем лишние действия?
Другой пример:
int main () {
printf("Hello");
sleep(3);
system("clear");
printf("World\n");
}
Здесь мы получаем HelloWorld, очевидно, т.к. printf - line buffered
Так же в коде
int main () {
printf("HelloWorld");
while (1) {
}
}
Сообщение HelloWorld никогда не будет выведено на экран.
Однако при
int main () {
printf("HelloWorld");
return 0;
}
сообщение HelloWorld все-таки выводится на экран. Как я понимаю, это происходит на этапе завершения программы, т.е. после return 0 (или при/до return 0?) программа видит, что data, предназначенная для stdout, не была доставлена и все еще висит в буфере, поэтому программа самостоятельно принудительно флашит stdout ("выплескивает" данные из буфера в stdout). Правильно я это понимаю?
Ну и тут снова тот же вопрос, что и с scanf'ом - зачем нам вообще нужно line-буферить printf? Почему бы сразу не кидать все в stdout?
Помимо этого, интересно, какая размерность у буфера?
Можно ли отключить буферизацию?

Ответы297934

anonymous 362 19 ноя, 22:25 362 1297868

двачик,родной ,выручай

Составить функцию для слияния двух упорядоченных по возрастанию массивов целых чисел.(используя функцию вне мэйна)
под слиянием имеется ввиду не сложение соответствующих элементов,типа 0-й из 1-го массива+0-й из 2-го массива=0-й в новом массиве,а именно запись их в ряд по возрастанию
не знаю шо робiтi(

Ответы297891

363 19 ноя, 22:53 363 1297891

>>1297868
Почитай, про сортировку слиянием.

Ответы297893

364 19 ноя, 22:54 364 1297893

>>1297891
Нахуя, я, поставил, там, запятую?

365 20 ноя, 00:31 365 1297934

>>1297862
> Однако я не понял, почему при буферизации чтения и записи идет выигрыш в производительности
В этом же самом треде: >>1289184

> Так вот, зачем функция помещает эту запись сначала в буфер, а лишь затем - в массив?
Иначе fscanf будет ходит в ядро за каждым символом.

> Как я понимаю, это происходит на этапе завершения программы
Выход из main = exit(кодвозврата), exit = fclose всех файлов, fclose = fflush перед закрытием.

366 20 ноя, 11:35 366 1298082

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

Ответы298130

367 20 ноя, 12:59 367 1298130

>>1298082
>Поясните про задачку с getchar, что почти в самом начале.
Что за задачка?

Ответы298231

20 Кб, 798x567
368 20 ноя, 15:27 368 1298208

Почему это код не работает на ideone?
#include <stdio.h>

int main()
{
int i = 1, x = 5, n = 5;
scanf_s("%i %i", &x, &n);

while (n > 0) {
i = i * x;
n = n - 1;
}

printf("%i", i);
return 0;
}

Ответы298210

369 20 ноя, 15:40 369 1298210

>>1298208
Потому что майкрософтоговно ненужно. Используй scanf, а всем, кто будет возникать, говори #define _CRT_SECURE_NO_WARNINGS "Fuck you"

Ответы298248

370 20 ноя, 16:17 370 1298231

>>1298130
1.5.1. Копирование файла
При наличии функций getchar и putchar, ничего больше не зная о вводе-выводе, можно написать
удивительно много полезных программ. Простейший пример — это программа, копирующая по одному
символу с входного потока в выходной поток:
чтение символа
while (символ не является признаком конца файла)
вывод только что прочитанного символа
чтение символа
Оформляя ее в виде программы на Си, получим
#include <stdio.h>

/ копирование ввода на вывод; 1-я версия /
main()
{
int с;
с = getchar();
while (с != EOF) {
putchar (c);
с = getchar();
}
}

Ответы298779

371 20 ноя, 16:43 371 1298248

>>1298210
Почему говно и почему ненужно?

Ответы298261298674

372 20 ноя, 17:12 372 1298261

>>1298248
Потому-что это жирнота.

Ответы298319299008

373 20 ноя, 19:27 373 1298319

>>1298261
Конкретизируй. Если просто говорить новичку в какой-то области "это говно, а вот это не говно", то он никогда ничему у тебя не научится. Надо объяснять почему это говно.

Ответы298345

374 20 ноя, 19:55 374 1298345

>>1298319
>Надо объяснять
Какие охуевшие дети пошли, да...

Ответы298393

375 20 ноя, 21:00 375 1298393

>>1298345
Не можешь аргументировать == ты пидор

Ответы298405299008

376 20 ноя, 21:21 376 1298405

>>1298393
пидор - это когда провели хуем по губам

377 20 ноя, 22:05 377 1298443

Подгоните годное пособие по прогингу микроконтроллеров на С
Желательно AVR, но по факту похуй - надо на чем-то будет набить руку. Знаю азы Си, но хотелось бы погонять его там где он чаще и применяется (плюс у меня специальность радиотехника, с МК часто приходилось иметь дело, но вот сам я их не прогал)

378 21 ноя, 00:07 378 1298528

https://youtu.be/ReVeUvwTGdU

В шапку.

Ответы298531298642298981

379 21 ноя, 00:23 379 1298531

>>1298528
В хуяпку. Пошел нахуй со своими школьниками.

380 21 ноя, 01:31 380 1298574

Потому что под маской всевозможных сканфов/принтфов скрываются системные вызовы read/write. Системный вызов - достаточно дорогая операция, в этом вы можете убедиться, к примеру, написав программу копирования содержимого одного файла в другой с помощью read/write (по 1 символу) и различных функций ввода/вывода из stdio, при это посмотрите время работы обоих программ. Разница будет коллосальна. Решение является буферизация содержимого. То есть вы складываете ваши символы в буффер и изредко его записываете с помощью write. То есть пишете не 1000 раз по 1 символу, а 1 раз 1000 символов, тем самым обращение к ядру, которое является столь долгим, происходит редко.

Ответы298688298829

381 21 ноя, 03:40 381 1298642

>>1298528
заебись, после просмотра я закодил и теперь получаю 100к мес

382 21 ноя, 03:50 382 1298643

>>1287378 (OP)
Есть ли что нибудь встроенное чтобы проверить содержит ли string букву или слог? в идеале что-то вида:
s.contains("xy") -> Boolean

Ответы298674

383 21 ноя, 07:00 383 1298668

Приветствую, эксперты.
Параллельно с Пратой, начал изучать Тененбаума (ОС).
Пришла в голову дикая мысль - а что если купить 486 старый комп как полигон для написания разного софта по книге? Домашний ноут стремно трогать, я же нуб криворукий, сломаю еще что-то.
Совсем дебильная идея, или стоит все-таки?
Собираюсь ковыряться близко к железу.

Ответы298670298671298672

384 21 ноя, 07:19 384 1298670

>>1298668
>Собираюсь ковыряться близко к железу.
VirtualBox

Ответы298674299022

385 21 ноя, 07:23 385 1298671

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

Ответы299022

386 21 ноя, 07:42 386 1298672

>>1298668
Лучше виртуалку, там можно настраивать пека твой, хочешь 2гб памяти, а хочешь 8 мб, процессор, частота, сетевая карта, мышка, все что нужно.

Ответы298674299022

387 21 ноя, 08:00 387 1298674

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

>>1298643
strchr(), strstr(), != NULL

>>1298670
>>1298672
Двачую этих.

388 21 ноя, 09:07 388 1298688

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

389 21 ноя, 11:03 389 1298779

>>1298231
Too slowly! Should be use chunk of bytes for hasteful code, honey!

390 21 ноя, 12:10 390 1298829

>>1298574
>Потому что под маской всевозможных сканфов/принтфов скрываются системные вызовы read/write. Системный вызов - достаточно дорогая операция, в этом вы можете убедиться, к примеру, написав программу копирования содержимого одного файла в другой с помощью read/write (по 1 символу) и различных функций ввода/вывода из stdio, при это посмотрите время работы обоих программ. Разница будет коллосальна. Решение является буферизация содержимого. То есть вы складываете ваши символы в буффер и изредко его записываете с помощью write. То есть пишете не 1000 раз по 1 символу, а 1 раз 1000 символов, тем самым обращение к ядру, которое является столь долгим, происходит редко.

Ну, начнем с того, что это давно уже не так и там давно уже применяется mmap/MapViewOfFile, работающих напрямую со страничным механизмом OS.

Ответы298845

391 21 ноя, 12:28 391 1298845

>>1298829
> mmap/MapViewOfFile
Это когда у тебя программа сегфолтится при вытаскивании флешки, с которой был открыт файл? Хороший механизм.

> что это давно уже не так и там давно уже применяется
Где там?

392 21 ноя, 15:07 392 1298981

>>1298528
Хуета

393 21 ноя, 15:27 393 1299008

>>1298393
Что аргументировать, тебя анон жирно протроллил, я в этом посте на это указал - >>1298261

Дальше отвечал уже не я. Суть в том что те функции которые ты используешь добавлены мелкомягкими чтобы предотвратить гуляние по памяти в случае отсутствия в конце строки нуль-терминатора, по сути они эквивалентны обычным, только в функциях с "_s" в конце ты так же указываешь предел на котором функция должна остановиться в случае отсутствия нуль-терминатора. В IDE под linux и MAC, и на сайте ideone таких функций нет, потому-что они выпускаются не мелкомягкими.

Ответы299216

11 Кб, 214x229
394 21 ноя, 15:49 394 1299022

>>1298670
>>1298671
>>1298672

Спасибо большое, поставить виртуалку как-то даже и в голову не пришло.

Ответы299167

395 21 ноя, 19:04 395 1299167

>>1299022
>как-то даже и в голову не пришло
Ты точно хочешь быть погромистом?

Ответы300564

396 21 ноя, 20:11 396 1299216

>>1299008
> тебя анон жирно протроллил
Где я его потроллил? Предложение задепрекейтить Annex K в С21 как бесполезный и неиспользуемый уже обсуждалось рабочей группой. Хуй знает, правда, приняли или нет, но дело к тому шло.

> чтобы предотвратить гуляние по памяти в случае отсутствия в конце строки нуль-терминатора
Не только. Там есть и другой контроль границ. Например, когда строка не влезла в буфер целиком, в Си она обрезается, а у Microsoft возникает constraint violation. В любом случае, все, что есть в Annex K без возможности выбора, нормальными людьми реализуется по необходимости максимум двумя дополнительными строками кода. Просто майкрософт считает, что это круто, когда нужно повторять повторять размер буфера для memcpy_s().

73 Кб, 740x740
397 21 ноя, 22:59 397 1299291

Привет всем С господинам! Остальные лесом>>>

Подскажите, видел кто в открытом доступе эту книгу, хочу с ней познакомиться!

Ответы299363299393

398 22 ноя, 01:24 398 1299363

>>1299291
на рутреке только по плюсам, джаве, шарпе..

399 22 ноя, 05:26 399 1299393

if (!anglusik)
idti_na_hui(>>1299291);
else
idti_na_libgen(>>1299291);

Ответы299407

400 22 ноя, 07:51 400 1299407

>>1299393
#include <stdio.h>
#include "Fuck_your_mather.h"

void fuck_mather(){
FUNC_FUCK_YOUR_MATHER == TRUE;
}

void main(int argc, char *arhv[]){
while(TRUE){
(FUNC_FUCK_YOUR_MATHER == TRUE) ? printf("Suck me dick bitch!/n") : void fuck_mather();
}
}

401 22 ноя, 08:06 401 1299409

Анончик, где есть интересные задания по Си? Недавно выучил синтаксис, хочу поделать что-то.
Хочется что-то интересное и полезное

Ответы299412299417299419

402 22 ноя, 08:18 402 1299412

>>1299409
>интересное и полезное
пиши малварь

403 22 ноя, 08:57 403 1299417

>>1299409
http://www.pskills.org/c.jsp

https://stepik.org/lesson/34299/step/1?unit=30901

https://www.codewars.com/

Ответы300349

404 22 ноя, 09:11 404 1299419

>>1299409
вливайтся в опенсорс, епт
не шучу
не на гитхаб иди
у того же гнома сотни проектов, систем и программ которые надо доделывать и дорабатывать
https://developer.gnome.org/

Ответы300348300349

405 22 ноя, 17:12 405 1299660

>>1287378 (OP)

Деды, не бейте, лучше обоссыте, но ответьте на вопрос! Нужна библиотека простой 2d графики для сишки. Ну грубо говоря чтобы там можно было визуализировать всякие простые физические процессы например молекула отскочила от стенки сосуда лол, какие-нибудь аналоговые часики сделать, солнечную систему, такого вида Что посоветуете?

Обязательно должно работать в линупсе и желательно, чтобы это была для него родная библиотека.

Ответы299688299715299943

406 22 ноя, 18:18 406 1299688

>>1299660
>Что посоветуете?
Ешь кашу и слушайся родителей

407 22 ноя, 18:57 407 1299715

>>1299660
sdl2 сойдет?

Ответы299718

408 22 ноя, 18:59 408 1299718

>>1299715

Мне кажется это через чур сложная штука для моих задач. Я думал может взять какое-нибудь GTK+, там же есть вроде виджеты, в которых можно рисовать? Но что-то литературы по gtk3 вообще нет, все по gtk2.

11 Кб, 274x184
409 22 ноя, 23:34 409 1299851

Меня притягивает С, но отпугивает то, что в какой-то момент я неизбежно столкнусь с СПО.
Но проблема в том, что СПО на 99,9% состоит из говна (на самом деле на 100%, но не будем категоричны).

Ответы299855299858

410 22 ноя, 23:38 410 1299855

>>1299851
Из моего опыта следует, что ты не прав.

Ответы300211

411 22 ноя, 23:44 411 1299858

>>1299851
Из 100 не СПО, СПО где-то 98,7%

4 Кб, 639x143
412 23 ноя, 01:20 412 1299930

друзья, помогите пожалуйста. учусь в школке и делаю какие-то тупые задачи (c99), но столкнулся вот с некоторой проблемой. задача - считать n строк, как-то там обработать, вывести. при этом использовать динамическую память. проблема внезапно на этапе считывания, причем понять в какой строчке происходит краш не могу. код -- hastebin.com/ibuwucoqif.cpp. при вводе корректных данных типа 4 принтит err1, но не принтит err2. если добавляю в аргумент ф-и scanf_string что-то типа (+ printf("err3\n") - printf("err4\n")), то указатель я как бы не двигаю, но эти строчки прога принтит (т.е. аргумент высчитывается без краша, так ведь?). тогда где вообще может краш произойти, если сразу по вызову ф-и scanf_string должна напечатать err2? короче идейно не понимаю в чем проблема и надеюсь на помощь от богов-профессионалов

Ответы299944299949300212

413 23 ноя, 01:41 413 1299943

>>1299660
Box2d

414 23 ноя, 01:44 414 1299944

>>1299930
Охуительный у тебя враппер конечно

415 23 ноя, 01:49 415 1299949

>>1299930
Аллоцировать 9000001 байт на каждом вызове функции это гениально.

Ответы300080

416 23 ноя, 12:35 416 1300080

>>1299949
Хихикнул.
посоветуйте ему, что поменять, мне его жалко

417 23 ноя, 17:37 417 1300211

>>1299855
Все знают про тысячи полуграмотных индусов, пишуших платное ПО неземного качества?
Так вот СПО пишут те же индусы, только в свободное время, бесплатно и с результатом, за который никто не отвечает.
Все лучшее СПО (те самые 0,01%) суть бывшее платное, чуть допиленное сообществом (кроме GIT). Либо крякнутое. Крякнутое платное ПО - лучшее по качеству, не знаю почему так получается.
Например, некоторые упоротые сравнивают LibreOffice и MS Office.
Казалось бы, как можно сравнивать? Вообще разные весовые категории. Но не стесняются и сравнивают.

Ответы300215300269

418 23 ноя, 17:38 418 1300212

>>1299930
scanf умеет динамически аллоцировать память и возвращает указатель, потом нужно юзать free на поинтер
делой man scanf примерно в конце было даже с примером

Ответы300214

419 23 ноя, 17:40 419 1300214

>>1300212
char *p;
int n;
errno = 0;
n = scanf("%m[a-z]", &p);
if (n == 1) {
printf("read: %s\n", p);
free(p);
} else if (errno != 0) {
perror("scanf");
} else {
fprintf(stderr, "No matching characters\n");
}

420 23 ноя, 17:41 420 1300215

>>1300211

Ты вообще не разбираешься в вопросе.

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

СПО в основном пишут богатые белые представители загнивающего запада, у которых есть свободное время на хобби и не стоит вопрос сдохнуть с голода.

Ответы300217

421 23 ноя, 17:43 421 1300217

>>1300215
>СПО в основном пишут богатые белые представители загнивающего запада
Да ну?? Почитай любые вопрос-ответ треды, каждый первый ответ - ДИНЕШ и РАДЖЕШ
Но.. Если ты прав.. Пиздец. Все гораздо хуже чем я думал.

Ответы300219

422 23 ноя, 17:51 422 1300219

>>1300217

Раджешам семью кормить надо, какое им спо?

Ответы300258

60 Кб, 500x376
423 23 ноя, 19:12 423 1300258

>>1300219
Какая семья в 13 лет??

424 23 ноя, 19:47 424 1300269

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

Ответы300270

425 23 ноя, 19:48 425 1300270

>>1300269
хотя насчет желтых погорячился, китайцы и японцы ебашат спо тоже чутка

426 23 ноя, 22:25 426 1300348

>>1299419
>https://developer.gnome.org/
Можно в кратце что куда кликать ,что бы получить задания которые актуальны?

Ответы300366

427 23 ноя, 22:26 427 1300349

>>1299417
>>1299419
спс

428 23 ноя, 23:33 428 1300366

>>1300348

https://bugzilla.gnome.org/

429 24 ноя, 03:55 429 1300392

Ребят, а что за debuger во всех компиляторах, если в двух словах?
Еще видел онлайн компилятор, который код C показывает в ассемблер виде, но уже не нахожу ссылку

Ответы300394

430 24 ноя, 04:10 430 1300394

>>1300392
https://en.wikipedia.org/wiki/Debugger
https://gcc.godbolt.org/

Ответы300416300420

431 24 ноя, 09:58 431 1300416

>>1300394
Are you a god?

206 Кб, 640x633
432 24 ноя, 10:13 432 1300420

>>1300394
> godbolt

Божественный хуй, ну и имя доя домена кек

Ответы300424300448

121 Кб, 500x504
433 24 ноя, 10:23 433 1300424

>>1300420

434 24 ноя, 11:59 434 1300448

>>1300420
а представь, как мужику живется с такой фамилией

435 24 ноя, 18:24 435 1300564

>>1299167
Ты охуеешь наверное, но мне на днях ещё и 40 исполнилось. Имею твердое желание выкатиться в embedded джуном.

Ответы300571

436 24 ноя, 18:40 436 1300571

>>1300564
Ну тогда начинать с x86 - только время терять.

Ответы300587300594

437 24 ноя, 19:38 437 1300587

>>1300571
Сишечка - она везде сишечка, какая разница.

Ответы300604

438 24 ноя, 19:59 438 1300594

>>1300571
Господин Тененбаум?! Как вас сюда занесло?

439 24 ноя, 20:11 439 1300604

>>1300587
Ну он же написал:
> Собираюсь ковыряться близко к железу.
> Имею твердое желание выкатиться в embedded
Одной лишь сишечкой в embedded не обойтись, всегда будут всякие специфичные для платформы вещи, да и саму платформу понимать стоит, если цель - не хелловорды не только светодиодами мигать. А что касается x86, то железо, используемое там, либо очень сложно программировать для начинающего (современное), либо давно устарело и с embedded не пересекается вообще. Лучше сразу взять какую-нибудь малинку, стмку или даже аврку на худой конец, чем разбираться в давно никому не нужных тонкостях работы 8272A.

Ответы300639302037

440 24 ноя, 21:32 440 1300639

>>1300604
Спасибо за ответ!
Это я спрашивал.
То есть ты даже 286 не советуешь?
А с чего начать? У меня есть такое ощущение, что начинать с Малинки вместо контроллера, это как вместо С учить сразу С#.

Ответы300663

441 24 ноя, 22:16 441 1300663

>>1300639
> что начинать с Малинки вместо контроллера, это как вместо С учить сразу С#
Можно дрова в линуксе писать, а можно экономить байты. Эмбеддед - это не только микроконтроллеры с килобайтом рамы.

Си лучше учить на своей пеке, а не ебаться с кросскомпиляторами и удаленной отладкой. А поиграться со знаниями, почерпнутыми из Танненбаума, можно на qemu-system-xxx, реальная железка не нужна, особенно поначалу.

> То есть ты даже 286 не советуешь?
Можно, конечно, листать пыльного Джордейна, писать демосцены 16-битным кодом, но зачем? Что ты с этими знаниями делать собираешься? Ну ладно в российских вузиках мсдос в студентов пихают, потому что преподы ничего другого не знают. Студенты сдали и забыли, а самостоятельно-то зачем в это вляпываться?

Ответы300703

442 24 ноя, 23:10 442 1300703

>>1300663
Здоровья и счастья тебе.

443 25 ноя, 03:51 443 1300774

Пытался написать программу, которая находит вводимое число в водимом массиве и указывает позицию элемента в массиве, но непонятно откуда перед итоговыми числами появляются нули. Кто-нибудь, объясните откуда нули там незначащие нули.
#include <stdio.h>

int main()
{
int M[100000], n, i = 0, x;
int a=0;

scanf_s("%i %i", &n, &x);

while (i < n) {
i=i+1;
scanf_s("%i", &M);
}
i = 0;
while (i < n) {
i = i + 1;
if (x == M) { a = a + 1; printf("%i", i); }
if (a == 0) printf("%i", a);
}
scanf_s("%i %i", &n, &x);
return 0;
}
Проблема проявляется только когда я пытаюсь добавить в программу проверку на отсутствие числа в массиве, чтобы выводился 0.

Программа работает так: вводишь размер массива, через пробел вводишь искомое число. Далее через энтер заполняешь позиции в массиве, в одной из которых может быть или не быть искомое число. Если число есть, выводится позиция числа в массиве, если числа нету - 0.

Ответы300778

444 25 ноя, 04:12 444 1300778

>>1300774
Ладно, я сам нашёл ошибку. Тема закрыта.

445 25 ноя, 14:30 445 1300902

Хотел написать простенький mymallok(), пишу под Windows, включил <stdlib.h>, <stdio.h>, <stdint.h>, <stdbool.h>, <assert.h>, sys/types.h>, <unistd.h>, <string.h>, <windows.h, но компилятор так и не видит декларацию brk(), sbrk(), mmap(). Что я` не так?

Ответы300955300959

446 25 ноя, 16:01 446 1300955

>>1300902
Ты unix'овые вызовы пытаешься использовать. Лучше поставь linux-виртуалку и там же и пиши.

Ответы300962

447 25 ноя, 16:06 447 1300959

>>1300902
Под Windows у тебя есть VirtualAlloc()/VirtualFree(), их и используй. Ну и еще Pelles C поддерживает _mmap(), в аллокаторе можно им одним обойтись.

Ответы300962

448 25 ноя, 16:16 448 1300962

>>1300955
>>1300959
Ясно, спасибо. Я думал это стандартные функции Си.

449 26 ноя, 18:35 449 1301473

Мой план на ближайшие 9 месяцев:
(В примерно хронологическом порядке)

C Primer Plus -- Stephen Prata
Data Structures Using C -- Langsam, Augenstein, Tenenbaum
Algorithms in C -- Robert Sedgewick
Structured Computer Organization -- Andrew Tanenbaum
Modern Operating Systems -- Andrew Tanenbaum
Computer Networks -- Andrew Tanenbaum

Что потом - не знаю, надеюсь там будет видно.
Цель - эмбеддед/гейм/.... То есть поближе к железу, плюс физика, механика, матрички, вот это вот все.

Ответы301474301480302183

765 Кб, 600x600
450 26 ноя, 18:39 450 1301474

>>1301473

451 26 ноя, 18:47 451 1301480

>>1301473

Если ты со всем этим будешь разбираться, а не просто ЧИТАТЬ, то это минимум года на 2.

Ответы301497301514

452 26 ноя, 19:50 452 1301497

>>1301480
У меня уже есть вышка, я инженер-механик. Мне уже много лет.

Ответы301514301519

453 26 ноя, 20:25 453 1301514

>>1301497
Мне тоже много лет, но я согласен с >>1301480.

Ответы301523

454 26 ноя, 20:31 454 1301519

>>1301497
> У меня уже есть вышка, я инженер-механик. Мне уже много лет.

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

Ответы301527

455 26 ноя, 20:38 455 1301523

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

С благодарностью приму поправки и советы от бывалых.

Ответы301526301530302713

456 26 ноя, 20:41 456 1301526

>>1301523

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

Ответы301528

457 26 ноя, 20:43 457 1301527

>>1301519
Ну почему же. Я программировал, но больше функции для вычислений. Использовал С как продвинутый калькулятор так сказать.
Ну и MatLab в основном.
Я довольно быстро (как мне кажется) схватываю материал, единственное препятствие для меня сейчас - нехватка свободного времени.
Скачал лекции про ОС, слушаю пока еду на работку.

458 26 ноя, 20:47 458 1301528

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

459 26 ноя, 20:55 459 1301530

>>1301523
к&r читани корка от корки, все упражнения сделай, не игнорируй приложение, медитируй над ним, это нужно
по структурам и алгоритмам ебани пару курсов, хотя бы на том же спепике, плюс заебашь 200-250 (больше нахуй не надо) алгоритмических задач хотя бы на том же hackerrank или на любом подобном, десятки их щас
дальше уже ходи по собесам, вкатывайся за еду бля
а так ты скорее с голоду сдохнешь читая весь тот лольный список что ты себе составил

Ответы301538301540

460 26 ноя, 21:01 460 1301538

>>1301530
>по структурам и алгоритмам ебани пару курсов
Я реально быстрее учусь по книгам. Если бы было время смотреть курсы, я бы за это время уже закончил свой лольный список.

Ответы301544

461 26 ноя, 21:01 461 1301540

>>1301530
А пет прожект?

Ответы301545

462 26 ноя, 21:02 462 1301541

хотя вкатываться в 40 лет в геймдев
о хо хо

463 26 ноя, 21:04 463 1301544

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

464 26 ноя, 21:06 464 1301545

>>1301540
вы, кстати, чутка неправильно оборот используете
"пет прожект" это вообще то когда сформировавшийся кодер у которого есть уже основная работа по выходным ебашит что-то приятное ему вдобавок
это как у линукса есть собственно операционка, и пет-прожект это он на qt (лол) пилит какую-то приложуху для учета статистики дайвинга

465 27 ноя, 01:54 465 1301649

В тред призываются опытные системные прогромизды.
Какие вилки у мидлов-сеньеров системных программистов в ДС? Интересуют крупные компании типо Яндекса, мейла, касперского и тд.

Ответы301671301672

466 27 ноя, 05:43 466 1301671

>>1301649
>Яндекса
40к-50к

467 27 ноя, 06:29 467 1301672

>>1301649
120-250к
и, вообще то есть глассдор, всегда можешь глянуть там

Ответы302267

468 27 ноя, 17:07 468 1302037

>>1300604
А вот такой вопрос.
Микропроцессор или микроконтреллер? С чего лучше начинать?

469 27 ноя, 21:15 469 1302183

Привет байтовелители, хочу вкатиться в сириоз девелопмент.
Хочу читать этот список >>1301473, но вместо этого решил читать /pr.
Какие подводные?

470 28 ноя, 00:36 470 1302267

>>1301672
О, спс, не знал про этот сайт. Просто недавно апнули с джуна до мидла, спрашивали сколько я хочу (получилось 130к чистыми, 150 gross), теперь думаю не продешевил ли.

471 28 ноя, 21:36 471 1302656

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

Ответы302658302719304128

472 28 ноя, 21:38 472 1302658

>>1302656
http://alenacpp.blogspot.com/

473 28 ноя, 23:36 473 1302713

>>1301523
Хуйня, не ссы главное сиди днями занимайся этим и перерывы делай. Хотя кому я пизжу, сам сижу каждый день марафоню.

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

Я угараю еще как многие на шлинукс приходят и игнорируют баш скрипты.

Ответы302714302978

474 28 ноя, 23:37 474 1302714

>>1302713
Еще на Гитах сидеть код разбирать. Не надо одни книжки читать, ебаш форумы. Ну я говорю просто как я делал.

Алсо туториалы - Нахуй. Чем ты отличаешься от других тогда, если ебашишь одно и тоже?

Ответы302978

475 28 ноя, 23:38 475 1302715

С туторов можно спиздить что-то, но туторы должны быть бесплатные, иначе это просто способ навариться на ванаби и кста код у этих УЧИТЕЛЕЙ ЕБАНЫХ говнище такое позорное.

Ответы302978

476 28 ноя, 23:39 476 1302717

Но над быть осторожным, чтобы не кончить как Терри Дейвис...

477 28 ноя, 23:40 477 1302719

>>1302656
nullprogram.com

478 29 ноя, 11:46 478 1302978

>>1302713
>>1302714
>>1302715
А ты сам всё ещё учишь или может уже успешный и на работу таки устроился?
мимо

Ответы303437

479 30 ноя, 04:05 479 1303432

Аноны, а помогите найти что-нибудь прочитать про кросс-компиляцию с x86_64 в ARM. Вот у меня есть gcc и есть телефон, нак который я могу скинуть какой-нибудь код. Как компилировать?

Ответы303837

480 30 ноя, 05:26 480 1303437

>>1302978
Я поехавший ванаби который каждый день пишет на Си и мечтает в будущем переехать на ассемблер, планирую в сфере хакинга использовать.

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

Ответы303469

481 30 ноя, 09:37 481 1303469

>>1303437
Это конечно здорово, но ты деньги уже начал зарабатывать?

Ответы304023

482 30 ноя, 19:42 482 1303837

>>1303432
> Вот у меня есть gcc
Кросскомпилятор для AArch64 или обычный для x86-64? Если обычный, то тебе нужен кросскомпилятор. Качаешь http://releases.linaro.org/components/toolchain/binaries/ распаковываешь, компилируешь. А еще лучше качаешь NDK: https://developer.android.com/ndk/downloads/, распаковываешь (компиль в папке toolchains, сисрут внезапно в sysroot), компилируешь.

> Как компилировать?
Точно так же, как обычно, только с правильным --sysroot.

483 30 ноя, 22:37 483 1304023

>>1303469
Неа.

Ответы304184

484 1 дек, 04:10 484 1304128

>>1302656
http://ramblings.implicit.net/

485 1 дек, 11:13 485 1304184

>>1304023
Понятно.ничего удивительного

Ответы304240

486 1 дек, 13:14 486 1304240

>>1304184
А хуль понятного то? Найди мне работу. Я уже заебался на гите и гитлабешнике сидеть.

Ответы304272

487 1 дек, 14:26 487 1304272

>>1304240
Хуй знает, попробуй сам найди, я вообще дрочил полгода плюсы, а потом устроился на работу, сейчас ебашу драйвер на си.

488 1 дек, 19:50 488 1304399

Почему ничего не выводит?
wchar_t wtext[] = L"строка";
wprintf(L"%s\n", wtext);

Ответы304411

489 1 дек, 20:13 489 1304411

>>1304399
L"%ls"

Ответы304421

490 1 дек, 20:26 490 1304421

>>1304411
Тоже самое.

Ответы304459

491 1 дек, 21:03 491 1304459

>>1304421
Вызывал перед этим обычный printf? Покажи полный код.

Ответы304464

492 1 дек, 21:08 492 1304464

>>1304459
Нет, это полный код.

Ответы304502

493 1 дек, 21:52 493 1304502

>>1304464
Винда, MSVC или MinGW, которые линкуются к сломанной майкрософтом CRT, которая хочет %S? Больше идей нет.

Ответы304503

494 1 дек, 21:53 494 1304503

>>1304502
Линукс.

Ответы304508

495 1 дек, 22:05 495 1304508

>>1304503
У тебя вообще ничего не печатало? Локаль выставлял?
#include <wchar.h>
#include <locale.h>

int main(void)
{
setlocale(LC_CTYPE, "ru_RU.UTF-8");
wchar_t wtext[] = L"строка";
wprintf(L"%ls\n", wtext);
}

Ответы304520

496 1 дек, 22:28 496 1304520

>>1304508
setlocale помогло.
Почему к стати если вставить обычный printf, то перестает работать?

Ответы304530

497 1 дек, 22:52 497 1304530

>>1304520
Потому что у потока есть ориентация, и если ты однажды пишешь в него wide, ты больше не можешь mbcs. И наоборот. Можно только явно менять ориентацию с помощью fwide. Связано это с особенностями многобайтовых кодировок, в том числе и UTF-8, но особенно всяких Shift-JIS.

498 2 дек, 02:49 498 1304608

Сап аноны. Помогите найти ключ gcc, который отключает препроцессор. То есть я отдельно вызываю препроцессор, а только потом хочу попытаться вызвать gcc, но он всегда первым делом снова прогоняет препроцессор, а мне это не надо.

Ответы304610

499 2 дек, 03:14 499 1304610

>>1304608
> То есть я отдельно вызываю препроцессор
Генерируй .i, а не .c.

> Помогите найти ключ gcc, который отключает препроцессор
-x cpp-output, но вариант с расширением правильнее.

Ответы304614

500 2 дек, 03:32 500 1304614

>>1304610
Тону чая тебе, антош.

ПЕРЕКАТ # OP 501 3 дек, 05:56 501 1305159

>>1305157 (OP)
>>1305157 (OP)
>>1305157 (OP)
>>1305157 (OP)
>>1305157 (OP)

Тем временем понемногу начинают редактировать черновик C20/21: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2310.pdf

Тред утонул или удален.
Это копия, сохраненная 5 января 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion