Главная Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски

[Ответить в тред] Ответить в тред

Check this out!


<<
Назад | Вниз | Обновить тред | Автообновление
505 | 34 | 158

C Programming Language #30 Аноним # OP  10/05/18 Чтв 11:38:32  1187521  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

- Классика от Отцов: 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 помогает читать сложные сишные декларации.

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

- №27: https://arhivach.cf/thread/325831/
- №28: https://arhivach.cf/thread/339326/
- №29: https://arhivach.cf/thread/347271/

Шапка: http://piratepad.net/bJ1SdmkZyu (иногда лежит)
Аноним 10/05/18 Чтв 11:45:14  1187525
>>1187520
>Слишком категорично

Ну, конкретно, в данном случае (JIT или загрузка исполняемого кода в память) именно логично сделать кучу асмовых реализаций int execute_code(pointer) в папке arch, чем писать кросплатформенную лапшу ифдефов в попытках наебать стандарт, вызвать через указатель на функцию, и все равно выстрелить себе в ногу.
Аноним 10/05/18 Чтв 18:19:11  1187787
>>1187521 (OP)
друзья, не могу никак найти нормального гуида, как загрузить bitmap в 2мерный массив, как его потом обрабатывать, используя стандартные библиотеки. Подкиньте чего, позязя
Аноним 10/05/18 Чтв 18:29:11  1187791
>>1187787
>используя стандартные библиотеки
Никак
Аноним 10/05/18 Чтв 18:40:39  1187796
>>1187791
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
какие тебе ище то надо
Аноним 10/05/18 Чтв 18:54:05  1187803
>>1187787
Используй нестандартные. У всяких libjpeg и libpng вполне себе простой и понятный API.
Аноним 10/05/18 Чтв 19:01:28  1187806
>>1187803
я понимаю, что нестандартными все гораздо проще, но задание так озвучено
Аноним 10/05/18 Чтв 19:07:21  1187812
>>1187806
Значит читай в массив, и ваще что такое битмап? Если бмп всякие читай про формат файла и занимайся байтоеблей
Аноним 10/05/18 Чтв 19:26:48  1187835
>>1187806
Ну тогда выбери себе какое-нибудь подмножество .tga без сжатия, и читай себе его. Там все просто и не нужно возиться с паддингом, как в .bmp. Читаешь заголовок, считаешь, сколько нужно памяти, выделяешь память, читаешь тело. Все. Разве что с 2D-массивом может выйти промашка, потому что размерности сишных массивов определяются при компиляции (если он не VLA).
Аноним 10/05/18 Чтв 20:45:29  1187914
Есть какие-то советы, как васянить псевдографические интерфейсы без сторонних либ?
Аноним 10/05/18 Чтв 23:50:00  1188017
>>1187914
Это невозможно. Используй React Native. Qt не нужен.
Аноним 11/05/18 Птн 01:21:49  1188045
>>1188017
>псевдографические интерфейсы
>React Native. Qt
Аноним 11/05/18 Птн 09:42:39  1188112
>>1187914
Написать свою либу.
Ты реально даже какой-нибудь ncurses не хочешь использовать?
Аноним 11/05/18 Птн 10:14:17  1188128
>>1188112
Да. Ну, желательно, без сторонних либ (помимо API операционки). Я вообще про общие принципы спрашивал скорее, потому как у меня кроме как функции в функции в функции (переход по менюшкам) ничего не выходит. Мб так и надо, конечно.
Аноним 11/05/18 Птн 12:09:36  1188188
>>1188128
>Да. Ну, желательно, без сторонних либ (помимо API операционки).

https://docs.microsoft.com/en-us/windows/console/console-functions

http://invisible-island.net/ncurses/man/ncurses.3x.html
Аноним 11/05/18 Птн 14:07:23  1188235
>>1188188
Да не в этом вопрос. Как эту хрень всю изнутри устроить. Под каждую менюшку свою функцию писать, отдельно обработку клавиш сделать, етц.
Аноним 11/05/18 Птн 14:32:31  1188241
>>1188235
Почитав документацию ncurses'а, ты получишь ответ на свой вопросы.
Аноним 12/05/18 Суб 04:09:35  1188581
Платиновый вопрос: как скомпилировать K&R через GCC?
Ну или как вообще обходиться с K&R в современном мире?
Мне Прата очень не нравится, тонны текста.
Хочу начать с K&R и потом пойти по стандартам.
Аноним 12/05/18 Суб 05:11:50  1188586
>>1188581
Молча. Что конкретно у тебя не компилится?

> Мне Прата очень не нравится, тонны текста.
Зато после праты тебя ждет гораздо меньше удивительных открытий.
Аноним 12/05/18 Суб 22:25:37  1188863
>>1188581
>тонны текста.
А что должно быть?
Аноним 12/05/18 Суб 22:35:34  1188867
image.png (26Кб, 861x271)
Меня обманывают или нет? Вообще не могу понять, что имеет в виду автор статьи
Аноним 13/05/18 Вск 00:49:18  1188919
>>1188867
Вкратце: да, автор пиздит. На пике row-major, в Си нативно тоже row-major, менять местами индексы нинужно.

Короче, в математике опять не смогли между собой договориться, и есть две системы нумерации элементов матриц: row-major и column-major, они определяют, какой индекс указывать первым - строки или столбца соответственно. Проблемы с нотацией приводят к путанице и странным правилам при умножении матриц (хотя если абстрагироваться от индексов, оказывается, что все очень логично, и даже задумываться о порядке умножения незачем). А вот такие авторы статей, не понимая сути, еще добавляют путаницы. Алсо, автор пика пиздит, потому что даже в книжках по математике используются оба варианта, в зависимости от предпочтений их авторов. Но для начала тебе лучше просто забыть всю эту хуйню про строки и столбцы, и считать вместо этого, что матрица - просто вектор, содержащий векторы (просто список векторов, никакой магии). После этого нотация упростится до логичного vector-major: сначала ты указываешь индекс вектора, потом индекс его элемента, а уж как там в книжках эти векторы нарисованы - столбцами, строками или вообще в окружности вписаны, тебя ебать не должно.

К сожалению, элементы матрицы нужно хранить в одномерной компьютерной памяти. Если ты сделаешь struct vector { float x, y, z; }, то компоненты структуры в памяти будут лежать один за другим. Если сделаешь массив векторов struct vector m[4] и заполнишь это данными, то векторы в памяти будут идти один за другим (т.е., m[0].x, m[0].y, m[0].z, m[1].x, m[1].y и т. д.). Чтобы достать оттуда вектор, ты будешь делать m[​i​], а чтобы обратиться к элементу этого вектора - (m[​i​]).y допустим. Если ты вместо массива структур сделаешь массив массивов float m[4][3] (4 вектора по 3 элемента), то расположение элементов в памяти не изменится, не изменится и нотация: ты продолжишь сначала обращаться к вектору m[​i​], а потом к его элементу (m[​i​])[j], и если на бумажке или в книжке у тебя row-major, то нотация совпадет: m[​i​][j]. Это естественно и логично. Но осознай, что это лишь вопрос нотации: ты можешь взять column-major из книжки, писать столбцы в векторы и продолжать использовать m[​i​][j] или наоборот, ты можешь решить, что для каких-то вычислений хранить соответствующие компоненты векторов рядом, т.е., в column-major ({{x0, x1, x2}, {y0, y1, y2}, ...} удобнее и быстрее, и в этом случае нотация для обращения изменится на m[j][​i​].
Аноним 13/05/18 Вск 01:04:08  1188925
>>1188919
Пердачую этого. Хотел объяснить всё то же самое, но он сделал это развернуто и очень понятно, ну и первым. Правда я нихуя не понял из последнего предложения, причем тут column-major, если ты хранишь векторы группируя их по компонентам.
Аноним 13/05/18 Вск 01:09:41  1188928
Screenshot20180[...].png (83Кб, 919x788)
Смотрю исходники GSL (gnu scientific library), возникли вопросы.

1. Там регулярно попадается такая штука:
for(i = 0; i < n; ++i)
{
....const int a = // значение, зависящее от объявленных выше переменных;
....const int b = // значение, зависящее от объявленных выше переменных
....c = // Функция от a и b.
}
Пример такого в прикрепленной картиночке.
Как Си создает/убивает переменные вне области видимости? Не получается ли, что на каждой итерации цикла тратится время на то, чтобы создать переменную, один раз внести в нее значение, и потом уничтожить (освободить память), итого 2 лишних действия для каждой такой переменной на каждый проход цикла?
2. Почти все вспомогательные переменные const в коде. Не константы в основном только счетчики циклов и переменные, которые считаются в цикле (например, сумма элементов массива). Зачем так делать? Это такой стиль, нужный чтобы люди использовали каждую переменную для одной задачи, или в этом есть польза?
Даже переменные переданные по значению в функции const, что совсем странно:
int gsl_fit_linear (const double x[], const size_t xstride, const double y[], const size_t ystride, const size_t n, бла-бла)
Зачем?
Аноним 13/05/18 Вск 01:24:50  1188932
>>1188928
Это тебе не ООП, и переменная здесь - не объект.
Оно в "статической" памяти находится, и, единственное что происходит при входе в цикл - инициализация переменных значениями.
Если что не так сказал - поправьте.

Вообще C - моя единствення любовь, великий язык. Жаль, что не приносит денег в отличии от мамкиных фронтэндщиков 300к/наносек
Аноним 13/05/18 Вск 01:48:27  1188936
>>1188925
> Как Си создает/убивает переменные вне области видимости? Не получается ли, что на каждой итерации цикла тратится время на то, чтобы создать переменную, один раз внести в нее значение, и потом уничтожить (освободить память)
Стандарт ничего не гарантирует, но во всех реализациях автоматические переменные лежат на стеке. Плохому компиляторе для создания переменной или целой области видимости нужна целая одна инструкция (кроме инициализации). Хороший компилятор выделяет в стеке достаточно места для любого вложенного блока кода сразу же при входе в функцию (одной инструкцией), а при выходе все разом освобождает (опять же одной инструкцией), да еще и переиспользует переменные:
void foo(int arg) {
int some_variable = 3;
if (arg) {
for (size_t i = 0; i < n; i++) { some code; }
for (size_t i = 0; i < n; i++) { other code; }
}
}
В этом куске кода на стеке может вообще ничего не выделиться: если sizeof(int) == sizeof(size_t), и у нас 32-битный x86, а arg кроме условия больше нигде не используется, то компилятор может писать i прямо в arg. И даже если нет, то i, скорее всего, все равно будет одна. Поэтому не стоит об этом думать, ты даже с -O0 почти ничего не теряешь.

> Почти все вспомогательные переменные const в коде
Да, это такой стиль, чтобы люди видели константы, чтобы писать самодокументирующийся код, чтобы избегать глупых ошибок. Теоретически, оно еще может немного помочь компилятору с constant propagation. Но напоминаю, что с константами в Си нужно быть осторожным, они сломаны и означают "в этом месте я не буду изменять эту хуйню", автоматические переменные с const еще более-менее дружат, а вот глобальные вменяемо оптимизируются только в паре со strict aliasing и restrict.

>>1188932
> Оно в "статической" памяти находится
Так можно, но по сути тебе все равно приходится скатываться до стека при рекурсии. Поэтому так не делают.
Аноним 13/05/18 Вск 09:18:40  1188978
image.png (76Кб, 802x699)
>>1188919
Ох, спасибо. Этот чувак жутко запутал с пониманием массивов, я уже почти ему поверил, всё-таки статья хорошая была.
Аноним 13/05/18 Вск 12:06:39  1189042
>>1188936
Благодарю.

Правильно ли я понял: можно засрать всю программу переменными в стеке (включая vla?), выделять новую переменную под каждое действие, это (почти) не повлияет на скорость и вес программы?
Аноним 13/05/18 Вск 12:43:24  1189061
>>1189042
Нет, не правильно. У стека есть ограничения зависящие от реализации конпелятора и ОС. Можно изменить эти ограничения, но это костыль.
маллок-хуяллок наше всё.
мимкрок
Аноним 13/05/18 Вск 15:12:20  1189140
>>1189042
Ты почти правильно понимаешь. Но выделять большие массивы (сотни килобайт) не стоит, и при рекурсии нужно осторожно подумать, сколько тебе может понадобиться. Как тебе написали выше, стек не резиновый. Но если ты просто даешь имена промежуточным результатам вычислений:
int foo = a + b; int bar = foo ∗ 2; return bar;
ты ничего никуда не засрешь, потому что с любым уровнем оптимизации, отличным от нулевого, это почти/полностью эквивалентно:
return (a + b) ∗ 2;
И скорее всего, в стек вообще ничего не попадет, все в регистры влезет. Отладочные билды будут медленнее и жирнее, да. На релиз такое не повлияет.

А VLA зло. Если ты не ограничиваешь размер массива, однажды ты попробуешь выделить слишком много и свалишься. Если ограничиваешь - тебе не нужны VLA, ты можешь сразу написать, что хочешь не array[n], а, допусти, array[8192].

>>1189061
Ты забыл сказать, что чаще всего это ограничения уровня нескольких мегабайт.
Аноним 13/05/18 Вск 17:20:19  1189193
Сап, аноны. Подскажите, как реализовать простейший стек на си без плюсов блядь и push/pop/peek для него.
В гуле одни плюсы, которые я не знаю, либо какая-то лютая хурма.
Так же сложности добавляет то, что авторы статей имеют привычку называть плюсы "си", соответственно найти что-либо рабочее не удалось.
Спасибо
Аноним 13/05/18 Вск 17:27:06  1189202
>>1189193
Студентота, учись иди. Хули ты клянчишь? Давай бабки и я так уж и быть покажу как э о реализовать.
Аноним 13/05/18 Вск 17:30:25  1189209
>>1189202
> учись иди
Я бы и рад, но препод-троянишна на лекциях пишет код на доске и он какая неожиданность нихуя не работает.
Аноним 13/05/18 Вск 17:37:23  1189215
>>1189209
Меняй место учебы, это самый мудрый совет в твоей ситуации.
Аноним 13/05/18 Вск 17:51:44  1189224
>>1189215
Отсрочка от армейки на бакалавриате только одна, так что приходится крутиться.
Хотяб с самим стеком можешь помочь?
Аноним 13/05/18 Вск 17:52:37  1189226
Имеется указатель на строку p_str
Если написать
(p_str++) = 6;
То сначала просходит инкремент указателя, а затем его разыменование и присвоение 6?
А если написать
(++p_str) = 6;
То сначала указатель разыменовывается, присваивается 6, а указатель увеличивается на 1?

Или в обоих случаях сначала идет инкремент, а только потом разыменование и присвоение? Тогда я не понимаю, в каких случаях и как именно работает префиксная и постфиксная инкрементация.
Аноним 13/05/18 Вск 17:53:49  1189228
>>1189226
В каждом случае перед скобкой еще стоит звездочка. Здесь, видимо, она обозначает наклонный текст, поэтому ее не видно
Аноним 13/05/18 Вск 17:56:49  1189232
>>1189226
В кажом случае сначала инкремент указателя.
Вот если без скобок, то в первом сначала присваивание, потом инкремент указателя.
Аноним 13/05/18 Вск 18:08:53  1189238
>>1189232
Спасибо. Понял. То есть скобки устанавливают приоритет операции таким образом, что сначала всегда p будет увеличен, а только потом разыменован.
А без скобок, соответственно, приоритеты меняются в зависимости от того, с какой стороны стоит инкремент.
Аноним 13/05/18 Вск 18:27:01  1189247
>>1189232
Сделал разыменование и постинкремент.
Вот кусок кода:
char ch = '4';
'звездочка'p_str++ = ch;
printf("p_str = %c\n", 'звёздочка'(p - 1));
То есть на экран должен выводиться символ 4. Но получаю какой-то мусор. А если написать
printf("p_str = %c\n", 'звёздочка'(p));
То выводится 4.
Почему?
Аноним 13/05/18 Вск 18:27:18  1189249
>>1189209
> троянишна
Жительница Трои?
> и он нихуя не работает.
Вангую, там ошибки уровня отсутствующих ";", просто ты даун и не хочешь думать.
Аноним 13/05/18 Вск 18:44:36  1189260
>>1189193
int push(int element ,int ٭٭stack, int stack_elements, int ٭stack_head) {

if (!(stack_elements - ٭stack_head)) {
return 1;
}

٭(٭stack + (stack_elements-1) - ٭stack_head) = element;
٭stack_head += 1;
return 0;
}

int pop(int ٭element ,int ٭٭stack, int stack_elements, int ٭stack_head) {

if (!(٭stack_head)) {
return 1;
}

٭stack_head -= 1;
٭element = ٭(٭stack + (stack_elements-1) - ٭stack_head);

return 0;
}

int peek(int ٭element ,int ٭٭stack, int stack_elements, int stack_head) {

if (!stack_head) {
return 1;
}

٭element = ٭(٭stack + (stack_elements-1) - stack_head + 1);
return 0;
}

int main(void) {
int ٭stack, stack_elements, stack_head, element;

stack = calloc(1024, sizeof(int));
stack_elements = 1024;
stack_head = 0;
}
Аноним 13/05/18 Вск 19:06:49  1189282
>>1189260
Спасибо большое.
Надо ли тут задавать прототипы функции и подключать библиотеки помимо stdio и stdlib?
Аноним 13/05/18 Вск 19:09:40  1189289
>>1189247
Аноны, ну помогите с кодом. На таком фрагменте уже целый час потерял.
Если пишу звездочкаp = ch;
p++;
printf ("%c", звездочка(p-1));
то все работает. В чем ошибка-то?
Аноним 13/05/18 Вск 19:38:30  1189302
>>1189289
>>1189247
Бля. Сорян, я сделал хуйню. У меня есть два разных указателя p и p_str, соответственно. Второй просто является строкой-дубликатом. Я сошел с ума и инкрементировал p, вместо p_str. Проблема решена
Аноним 13/05/18 Вск 19:40:04  1189303
>>1189302
95% проблем ИТТ решаются так, да
Аноним 13/05/18 Вск 20:09:07  1189325
>>1189193
> простейший стек на си
Вот >>1186430 пока не смыло. Проще некуда уже. (Peek сам осилишь?)
Аноним 13/05/18 Вск 20:20:34  1189336
MinGW и gdb, Шиндоус 7. При попытке отладки падает в Segfault на FillConsoleOutputCharacterA. ЧЯДНТ?
Аноним 13/05/18 Вск 20:22:27  1189340
>>1189336
Откуда мы знаем, что ты там отлаживаешь, и почему оно падает.
Аноним 13/05/18 Вск 20:24:53  1189349
изображение.png (92Кб, 1366x768)
>>1189340
А без отладки все работает нормально (В данном месте).
Аноним 13/05/18 Вск 20:28:51  1189358
>>1189349
> без отладки все работает нормально
Покажи, где в документации написано, что последний параметр может быть NULL?
Аноним 13/05/18 Вск 20:32:21  1189361
>>1189358
Хуй знает, я бы предусмотрел. Ладно, с прикрученным последним аргументом завелось, спасибо.
Аноним 13/05/18 Вск 21:05:24  1189393
>>1189282
Наглеешь, пацан.
мимо
Аноним 13/05/18 Вск 23:28:09  1189439
Блять, походу потребность в OpenGL все таки загонит меня к вам в уютный загончик для бомжей. Порекомендуйте ту единственную интересную книгу, по которой я за месяц смогу вкатится в самые основы чтобы управлять апихой OpenGL позязя.
Аноним 13/05/18 Вск 23:34:29  1189442
>>1189439
OpenGL SuperBible. Если нужен legacy GL (фиксед пайплайн) по каким-то причинам, то 4 редакция. Если только новый - последняя доступная.
Аноним 13/05/18 Вск 23:42:37  1189447
>>1189442
>OpenGL SuperBible
Спасибо конечно... но это копание именно в движке. Именно с OpenGL как концепцией я думаю проблем не будет, у меня есть гайд для своей плотформы, отnуда я понял, что это клиент серверный механизм, в котором на клиенте формируется стек запросов с координатами и пуляется на сервер, который крутится на видеокарте и он всесь стек отрисовывает со скоростью звука и с нетерпением ждёт следующий вагон. У меня gроблема именно с C. Пушто я об нём ничего не знаю. Читал 5 лет назад книжицу в метро, но ничего не понял. Мне сейчас нужна тиресная книжеца по основам основ C )))
Аноним 14/05/18 Пнд 09:36:05  1189530
>>1189447
Хосспаде, K&R и Прата прочитай и достаточно будет.
Аноним 14/05/18 Пнд 10:16:35  1189538
>>1189530
От Прата слишком толстая
Аноним 14/05/18 Пнд 14:28:56  1189654
>>1189439
А демки на нём и пишутся, да?
Аноним 14/05/18 Пнд 15:04:20  1189680
В какой области C прям мастхев? Два раза перечитывал (перелистывал) K&R, но работать над проектами уровня перевода фарангейтов в градусы было лень, поэтому и опыта никакого в C нет.
Интересует что-нибудь близкое к компьютерной графике
Аноним 14/05/18 Пнд 15:20:10  1189684
>>1189680
В основном стримы видео, хиудео, там где надо работать с буферами. Например, пишется клиент серверная либа, которая стримит видео и звук, потом она портируется под работу на разных архитектурах. Запускается на мобильных устройствах и на линуксе. На моб устройствах поверх неё пишут на нативных фреймворках гуи, чтобы юзер мог ей пользоваться.
Аноним 14/05/18 Пнд 16:37:39  1189713
>>1189654
Демки и на DirectX пишутся, и даже софтрендером на голом фреймбуфере от ОС.
Аноним 14/05/18 Пнд 17:00:33  1189726
>>1189684
Там скорее ASSEBMLER тоже надо, без асма хуй там ты видео толком будешь обрабатывать.
Аноним 14/05/18 Пнд 17:03:42  1189727
>>1189680
Embedded, system programming, тоесть прикладное ПО, что на сях не делается так это бек энды. Ну и контроллеры но там уже ASM больше надо.
Аноним 14/05/18 Пнд 17:04:41  1189728
Аноны а что написать можно для портфолио?
Аноним 14/05/18 Пнд 17:05:21  1189729
>>1189726
Попробовал бы ты это в Java треде сказать. А вообще нравится мне ваш раздел. Самый ламповый в програмаче.
Аноним 14/05/18 Пнд 17:21:59  1189737
>>1189729
Да там одни олигофрены, джава окончательно устарела уже, это легаси ковыряние, если есть сильное требование к ресурсам то это конец, джава не потянет. Если средней сложноси алгоритм то будет полная загрузка железа, уродливый жирный тулчейн, ИДЕ почти не глючит и так далее
Аноним 14/05/18 Пнд 21:02:04  1189864
>>1189728
Напиши функцию ssize_t getrandbuf(void ∗buf, unsigned int nmemb, size_t membsize, unsigned short nbits, unsigned int flags)
которая принимает массив buf с число элементов nmemb, каждый размеров membsize, и заполняет каждый элемент слева рандомными битами в кол-ве nbits, полученными от функции getrandom с флагами flags.
От getrandom надо получать не больше рандомных битов, чем требуется (с точностью до байта). Энтропию, мать твою, надо экономить.
Аноним 14/05/18 Пнд 21:08:20  1189869
>>1189727
>system programming, тоесть прикладное ПО
щито
Аноним 15/05/18 Втр 06:49:35  1190055
>>1189713
Есть моар инфы про софтрендер?
Аноним 15/05/18 Втр 08:00:34  1190059
>>1190055

Ну елки-матрелки, их дохуя, начиная с первой кваки и заканчивая драйвером-эмулятором видеокарты llvmpipe.
Аноним 15/05/18 Втр 09:18:07  1190076
>>1189737

Дрочую. Джава-параша сейчас очень сильно устарела если сравнивать с C# например. Там многое фундаментально перепиливать придется чтоб догнать без костылей. А это гроб-гроб-кладбище.

Сравните STREAM API с LINQ (который через экстеншен методы) и все встанет на свои места
Аноним 15/05/18 Втр 09:30:14  1190082
>>1190076
>Джава-параша сейчас очень сильно устарела если сравнивать с C# например.
Чем она устарела? Шарпоговно еще большее днище, а на жабе есть дохуя вкусняшек хэдупы, джибосы, томкаты, солры, нутч и прочее.
Аноним 15/05/18 Втр 09:53:09  1190091
>>1190082

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

Аноним 15/05/18 Втр 10:51:41  1190117
>>1190091
>Джава-параша и рядом не стоит с шарпом.
Давай примеры.
Аноним 15/05/18 Втр 11:15:59  1190136
шлёп
Аноним 15/05/18 Втр 11:44:17  1190174
Пишу в эпичном треде
Аноним 15/05/18 Втр 12:19:41  1190222
image.png (127Кб, 480x360)
уже писал тут раньше насчет этой же проблемы, но она не решилась, а сроки горят
Всем привет, вопрос про написание простейшего драйвера для винды.
Мне по учебе в вузике нужно написать драйвер для Windows, который будете иметь возможность:
1) получать/отправлять значение от консольного приложения в user mode
2) записывать/считывать значение в MSR регистры процессора

Для Линукс написание такого драйвера (модуля ядра) проблем у меня не вызвало. С Windows всё сложнее, не могу разобраться в сэмплах на сайте майкрософта, книги по драйверописанию уже устарели.

Короче, спасите, умираю.
Посоветуйте инфы, чтобы разобраться.
А ещё лучше, напишите драйвер за меня (у шарящего человека это и 30 минут не займет), а я 1500р перешлю за работу на карту.
Или посоветуйте, где за деньги можно попросить такое сделать, потому что на Workzilla и Fl.ru за 1500 рублей никто не нашёлся
Аноним 15/05/18 Втр 12:21:32  1190225
>>1190222
Анан, создай свой топик про драйвер и туси там, ты заебал уже кругом срать.
Аноним 15/05/18 Втр 12:25:03  1190229
>>1190222
>>1190225
Я отписался только в трёх тематических тредах.
ИМХО больше я засрал бы доску бесполезным тредом.
Аноним 15/05/18 Втр 12:26:35  1190232
>>1190229
Нет ты конкретно срёшь в треде про C. И меня заставляешь тоже тут срать! Пидор
Аноним 15/05/18 Втр 13:05:44  1190252
>>1190222
>Посоветуйте инфы, чтобы разобраться.
Качай DDK Млкософта и читай доки.
Аноним 15/05/18 Втр 13:22:36  1190263
>>1190252
WDK оказывается он уже называется
Аноним 15/05/18 Втр 15:02:52  1190313
>>1190222
> уже писал тут раньше насчет этой же проблемы, но она не решилась
Если бы ты вместо походов по биржам просто погуглил, то оказалось бы, что решишь проблему самому быстрее, чем бегать и ныть. Вот тебе твой драйвер: https://github.com/pmolchanov/legacy-driver-helloworld/blob/master/driver/driver.c _readmsr()/_writemsr() вызвать в районе 135 строки осилишь? Клиент с CreateFile/DeviceIoControl осилишь?

> книги по драйверописанию уже устарели
Да ты что? Ты там видеодрайвер пишешь, может быть? Или в винде резко поменялся ядерный апи?
Аноним 15/05/18 Втр 16:27:47  1190375
>>1190263
WDK и WDF это не одно и тоже?
Аноним 15/05/18 Втр 16:38:50  1190383
>>1190375
Когда я с этим говном возился, оно DDK называлось, сейчас вапче нинаю
Аноним 15/05/18 Втр 17:29:57  1190442
https://pastebin.com/SVP47M5n
Объясните пожалуйста, в чем разница между 1,2 и 3 вариантом. В 3м варианте ошибка сегментации. Как static и extern связаны с выделением памяти в куче/на стэке?
Аноним 15/05/18 Втр 17:38:19  1190448
Кочаны, у меня есть циферки
1065353216, 1065353216, 1065353216
это Int32
как мне их мапнуть в Int8, чтобы и значения были между 0 и 255?
Аноним 15/05/18 Втр 18:54:24  1190499
>>1190448
Непонятно
Аноним 15/05/18 Втр 19:19:04  1190510
>>1190448
Здесь одна циферка три раза.
Аноним 15/05/18 Втр 19:24:43  1190518
>>1190510
Да есть такое дело. Но я уже придумал
находим коойициент
к = Инт32.макс / Инт8.макс
И потом делим 1065353216/к
Аноним 15/05/18 Втр 19:46:34  1190541
>>1190442
В первом варианте ты объявляешь статический массив интов, который уже будет в теле образа программы при конпеляции и весь заполнен нулями(инициализирован). Т.е. размер софтины будет конпелированный код+ массив интов. Этот массив будет в области данных(кода софтины?), а не на стеке. Область видимости этого массива будет строго файле исходника.
Второй случай отличается только областью видимости, она уже будет глобальной.
В третьем случае ты запиливаешь массив во времени выполнения софтины и тупо не хватило места на стеке .
Вроде так.
Аноним 15/05/18 Втр 20:54:49  1190601
Насколько сложно рисовать используя GDI+? Для Машины Тьюринга нужна отрисовка графов, а я собственно никогда не рисовал.
Аноним 15/05/18 Втр 21:17:12  1190612
>>1190601
С GDI+ слегка непросто. Это изначально крестовый API, а плоский сишный API, на котором он основан, официально недокументированный (хотя все уже разобрали) и чуть более многословный, чем хотелось бы. С обычным GDI сложностей нет, есть книга www.fengyuan.com, но можно и в MSDN справку смотреть, там все просто.
Аноним 15/05/18 Втр 21:46:42  1190634
>>1190541
>области данных
Это и есть куча? А маллоки нужны для того, чтобы выделять память в куче во время выполнения, я правильно понимаю?
Аноним 15/05/18 Втр 21:50:40  1190638
>>1190612
Ага, спасибо. Значит, GDI. Надо бы свою прогу переписать по всем канонам WinAPI, да не осилю, наверное
Аноним 15/05/18 Втр 23:25:14  1190699
Какой компилятор более-менее дружит с WinAPI и вообще с Шиндой, окромя MSVC?
Аноним 15/05/18 Втр 23:30:43  1190705
>>1190699
openwatcom
Аноним 15/05/18 Втр 23:55:21  1190719
>>1190699
gcc (можно в комплекте с msys, msys2), Pelles C. А этого >>1190705 не слушай, у них все не как у людей.
Аноним 16/05/18 Срд 00:08:10  1190723
>>1190719
>у них все не как у людей
Зато нативный бинарник
Аноним 16/05/18 Срд 01:21:47  1190734
>>1190723
Привет, мы тут на Си пишем, у нас везде нативные бинарники.
Аноним 16/05/18 Срд 03:42:22  1190755
>>1190634
Это статическая память, а не куча. Это память, которую программа просит у системы и куда проецирует свой код и свои статические переменные. Память из кучи - это когда ты в реальном времени просишь еще памяти всякими malloc'ами и система выдает тебе таковую.
Аноним 16/05/18 Срд 07:24:55  1190781
>>1190719
gcc не ест
https://github.com/can1357/CVE-2018-8897
Ошибки типа
error: '__writedr' was not declared in this scope
Какой компилятор знает про __writedr?
https://msdn.microsoft.com/en-us/library/aa983394.aspx
Ну и вторая ошибка такая:
Main.cpp:149:26: error: invalid conversion from 'void ()()' to 'PVOID {aka void
}' [-fpermissive]
Аноним 16/05/18 Срд 07:38:31  1190784
>>1190781

typedef *void PVOID пробовал?
Аноним 16/05/18 Срд 09:21:12  1190813
>>1190755
>Это статическая память, а не куча. Это память, которую программа просит у системы и куда проецирует свой код и свои статические переменные. Память из кучи - это когда ты в реальном времени просишь еще памяти всякими malloc'ами и система выдает тебе таковую.

Только не программа просит, а система при загрузке исполняемого файла читает из исполняемого файла секцию и сама выделяет приложению память. И в случае неинициализированной памяти дескрипторы помещаются в секцию bss, где указывается только размер, файл при этом не увеличивается. А вот если было бы int array[] = {1,2,3,4,5....100500}, то да, размер исполняемого файла вырос.
Аноним 16/05/18 Срд 12:39:02  1190913
>>1190784
За typedef спасибо, но прототип __writedr из воздуха не возьмётся
Аноним 16/05/18 Срд 14:38:20  1190982
>>1190913
> __writedr
Перепиши с инлайн-асмом. Или вон у них там есть Native.asm, ты вполне можешь воткнуть туда еще и это.

> Какой компилятор знает про __writedr
Слишком специфичный интринсик, чтобы поддерживаться где-то еще.
Аноним 16/05/18 Срд 17:20:19  1191062
>>1190913
Он объявлен в хедере intrin.h. В MinGW его нет, например. Зато есть в Mingw-w64. Попробуй его https://mingw-w64.org/doku.php
Аноним 16/05/18 Срд 20:42:39  1191176
>>1191062
> в mingw его нет
В коде есть include <intrin.h>
Там какой стаб стоит? Чё компилятор на отсутствие не ругается?
Аноним 16/05/18 Срд 21:57:32  1191223
Если я делаю небольшую прогу с интерфейсом консольным, то жестко задавать магические номера координат элементов (окошки, надписи, етц) это нормально или быдлокод? Если последнее, то как фиксить?
Аноним 16/05/18 Срд 22:33:31  1191260
>>1191223
>Если последнее, то как фиксить?
как ты в менюшки то тыкаешь? рассчитывай от разрешения экрана и определяй по координатам тыкалки
Аноним 16/05/18 Срд 22:39:57  1191262
>>1191260
Да при буфере строго 80х25 как-то похрену, окошко не увеличивается. Хотя Шиндовс10 каким-то образом это проворачивает!
Аноним 16/05/18 Срд 22:50:04  1191272
>>1191262
>80х25
чего, символов, точек? сколько точек на символ? тыкалка в точках возвращает или в символах?
Аноним 16/05/18 Срд 22:51:18  1191275
>>1191272
Консоль же, аки curses, но не curses. 80x25 символов. Поддержки мыши нет.
Аноним 16/05/18 Срд 22:54:53  1191280
>>1191275
на джвухметровом мониторе тоже будет отмасштабированно на 80x25 символов, панимаешь
Аноним 16/05/18 Срд 22:59:07  1191285
>>1191275
>Поддержки мыши нет.
з.ы. еще можешь следить за путями выбора
Аноним 16/05/18 Срд 23:18:07  1191301
>>1191176
В коде есть. Но он там объявлен как хэдер из поставки компилятора. И где тебе компилятор этот хэдер возьмет, если его нет?
Аноним 17/05/18 Чтв 00:12:04  1191347
Бля, не бейте: не могу сделать прогу, которая переводила бы набор из 128х128 цифр от 0 до 9 из .txt в .png, придавая пикселям цвет в зависимости от значения соответствующей цифры. Вроде, простая хуйня, но никак не успеваю разобраться. Поясните, что там знать нужно? (уровень 1: едва ли работаю со строками)
Аноним 17/05/18 Чтв 00:33:21  1191360
>>1191347
Работать с файлами, знать что из себя представляет png
Аноним 17/05/18 Чтв 00:46:23  1191364
>>1191360
>>1191360
В каком плане?
Аноним 17/05/18 Чтв 00:58:48  1191373
>>1191364
Png суть тот же бинарник. Для того, чтобы создать этот бинарник тебе нужно передать на вход свой txt, а на выходе получить png. Но это не значит просто сменить формат, потому что png содержит в себе ещё и служебную информацию. То есть тебе надо знать как устроен PNG. А вообще если ты задаешь такие вопросы то для начала не мешало бы хоть какую-нибудь книжку дочитать. Кури на гитхабе png decoder и разбирайся.
Аноним 17/05/18 Чтв 01:05:26  1191377
>>1191360
>>1191373
Охуенно
Аноним 17/05/18 Чтв 01:06:57  1191379
>>1191347
Let me google that for you: https://www.lemoda.net/c/write-png/
Там в main() есть цикл вложенный по x и y. Твоя задача записать в цветовые компоненты каждого пиксела нужные значения. Например, так:
uint8_t value = цифра - '0';
uint8_t intensity = (uint8_t) (value ∗ 25); // Примерно то же, что value / 10 ∗ 255, но сразу в целых числах.
pixel->red = intensity;
pixel->green = intensity;
pixel->blue = intensity;
А уж как читать цифры построчно или посимвольно, игнорируя или нет пробелы - сам.

Этих >>1191360 не слушай, очень долго будешь на текущем уровне ебаться с форматом и zlib-ом.
Аноним 17/05/18 Чтв 11:01:27  1191450
>>1191347
> .png
А тебе обязательно png или просто нужно получить картинку? Можешь посмотреть на формат .ppm, если пока не хочешь ебаться с DEFLATE и прочей ссакой
Аноним 17/05/18 Чтв 12:00:02  1191463
Нельзя этого сделать на C.
Аноним 17/05/18 Чтв 12:57:13  1191476
Имеется односвязный список, из таких структур.
typedef struct list {
int value;
struct list 'звездочка' next;
} List;
Обычно новый узел добавляется функцией такого вида
List 'звездочка' add(List 'звездочка' elem, int val) {
List 'звездочка' temp, new;
new = (List 'звездочка') malloc (sizeof(List));
temp = elem->next;
elem->next=new;
new->value = val;
new->next=temp;
return new;
}
Можно ли приведенную выше функцию заменить функцией такого вида, если я хочу просто с головы добавить 6 новых узлов?
void add(List 'звездочка' elem, int val) {
elem->next = ++elem; //старому elem->next присваивается elem+1 или новому elem->next присваивается он сам же?
elem->value = val;
}
int main () {
int v = 23;
List 'звездочка' head = (List 'звездочка') malloc (sizeof(List)'умножить'7);
head->value = v;
int addList = 6;
while (addList) {
scanf ("%d", &v);
add(elem, v);
addList--;
}
return 0;
}
Грубо говоря, мой вопрос сводится к тому, что я закомментировал в функции. Как именно там будет работать присваивание? Да и вообще, в целом, корректно ли это теоретически?
Аноним 17/05/18 Чтв 13:00:55  1191479
>>1191463
Почему же? Нужно просто нагуглить либку на C которая может сделать пнг. Опять же можно по пути визальнуть на каком нибудь OpenGL то что получается.
Аноним 17/05/18 Чтв 14:29:10  1191531
Просто пишешь байты в файл, следуя регламенту. Что тут сложного? http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html
Аноним 17/05/18 Чтв 14:51:55  1191547
>>1191476
> Можно ли приведенную выше функцию заменить функцией такого вида
Можно, но при попытке удалить один из узлов, у тебя возникнет множество проблем.

> Как именно там будет работать присваивание?
> elem->next = ++elem;
Хуево. Есть такие sequence points в языке, и между sequence points порядок возникновения сайд-эффектов не определен. В твоем выражении sequence-point - точка с запятой. И поэтому нельзя ничего сказать о том, когда произойдет инкремент, и какому elem->next присвоится указатель.

Алсо не совсем понятно, что ты делаешь с elem в main (откуда он берется). Ты можешь сделать в main:
struct list ∗elem = head + 1;
while (...) {
elem->value = v;
elem[-1].next = elem; // Мы в массиве, так можно.
++elem;
}
elem[-1].next = NULL;


>>1191531
> Просто пишешь байты в файл, следуя регламенту
> Просто реализуешь битстрим
> Просто реализуешь хаффмана
> Просто реализуешь lz77
> Просто реализуешь дефлейт
> Просто реализуешь адлер
> Просто оборачиваешь дефлейт в zlib
> Просто реализуешь crc32
> Просто работаешь с big-endian
> Просто пишешь PNG-чанки в файл
> уровень 1: едва ли работаю со строками
Аноним 17/05/18 Чтв 14:58:27  1191548
>>1191547
Просто пишешь все это на пистоне в одну строчку, а потом конвертируешь в си.
Аноним 17/05/18 Чтв 14:59:39  1191549
>>1191547
>> Просто пишешь PNG-чанки в файл
>> уровень 1: едва ли работаю со строками
Ну он же думал, что это просто. Вот пусть просто и пишет чанки. Потом просто напишет убийцу фотошопа.
Аноним 17/05/18 Чтв 15:06:58  1191552
>>1191549
Так это на самом деле просто: просто линкуешься с libpng, там вон выше и пример есть почти готовый.

А вот на код на пистоне, в котором ты одной строчкой, без import zlib или PIL сгенеришь PNG, я бы посмотрел. inb4: fp.write(b"\x89PNG\r\n\x1a\n\0\0\0\rIHDR...")

>>1191549
> Вот пусть просто и пишет чанки
Ну да, там особой ебли нет, вот только IDAT сжатый и CRC надо считать, и значения в big-endian.
Аноним 17/05/18 Чтв 16:09:56  1191574
>>1191547
О, спасибо. Понял.
В main'е узел создается очень просто. Структура же глобальная. Поэтому просто выделяю память под узел на куче.
А что можно про сайд- эффекты почитать? Там все-таки unexpected behaviour будет?
Аноним 17/05/18 Чтв 18:53:37  1191694
>>1191574
> Там все-таки unexpected behaviour будет?
If a side effect on a scalar object is unsequenced relative to either a different side effect
on the same scalar object or a value computation using the value of the same scalar
object, the behavior is undefined.

> А что можно про сайд-эффекты почитать?
Accessing a volatile object, modifying an object, modifying a file, or calling a function
that does any of those operations are all side effects, which are changes in the state of
the execution environment
.
Аноним 18/05/18 Птн 17:40:19  1192251
>>1191301
@
ЗАДОЛБАЛСЯ, КАЧАЕШЬ MSVC BUILD TOOLS
@
КОМПИЛЯТОРЫ ВЕСЯТ 4 ГБ, ВЫБОРОЧНОЙ УСТАНОВКИ НЕТ
@
cl Main.cpp
@
CANNOT INCLUDE FILE WINDOWS.H: NO SUCH FILE OR DIRECTORY
Аноним 18/05/18 Птн 17:42:47  1192252
>>1192251
>MSVC
это боль, избегай ее
Аноним 18/05/18 Птн 17:44:17  1192256
>>1192252
Можно мне, не упарываясь WinAPI, собрать что-нибудь под Винду, не реализовывая самому какой нибудь ссанный интринсик?
Я ещё не хочу 40 ГБ IDE качать, я вообще имею право после этого сидеть на Винде?
Аноним 18/05/18 Птн 18:05:14  1192268
>>1192256
Что тебе нужно то? mingw64 ставь
Аноним 18/05/18 Птн 18:09:18  1192272
>>1192256
Да ты заебал ныть. Тебе ж сказали поставь Mingw64 и не еби мозг
Аноним 18/05/18 Птн 18:10:30  1192275
>>1192272
Там в хедере intrin.h нужной функции нет, я исходники смотрел
Аноним 18/05/18 Птн 18:20:32  1192283
>>1192275
https://stackoverflow.com/questions/2520683/how-to-cope-with-intrin-h-no-such-file-or-directory

Почему ты такая ленивая жопа?
Аноним 18/05/18 Птн 18:22:13  1192284
>>1192283
Ты что мне скинул?
Там есть этот файл, но он неполноценный.
Аноним 18/05/18 Птн 18:25:28  1192287
>Там в хедере intrin.h нужной функции нет
Ну так в консоли набери. Я решаю дописыванием.
Аноним 18/05/18 Птн 18:27:13  1192290
>>1192284
>но он неполноценный.
ну тогда полноценный только у мекрософта
Аноним 18/05/18 Птн 18:28:43  1192292
и потом нельзя в четыре строки написать компилятор
Аноним 18/05/18 Птн 18:31:09  1192296
>>1192290
В хедерах Шланга видел, надо перепробовать.
Небось, в репах MSYS старый Шланг до жопы
Аноним 18/05/18 Птн 18:52:02  1192314
>>1192296
ты странный, ты мутишь какую то хуйню завязанную на ньюансах мекрософта, ставь вижуал студию и не выебуйся
Аноним 18/05/18 Птн 19:05:02  1192318
Anonymousemblem[...].png (41Кб, 316x316)
>>1192296
>>1192314
ну ладно, теперь здесь
>переход на Шланг
>переход на "странный"

без этого, пожалуйста
Аноним 18/05/18 Птн 19:13:56  1192321
Всё же в Ц дохуя недостатков.
Давайте перечислим самые главные:
-Нет неймспейсов.
-Нет автовывода типов.
Аноним 18/05/18 Птн 19:28:25  1192332
>>1192321
и?
Аноним 18/05/18 Птн 19:35:56  1192335
>>1187521 (OP)
Сишка хороша да только невостребованна
Аноним 18/05/18 Птн 19:47:01  1192344
>>1192332
Бблять
Давай запилим. Может в массы пойдет, а там глядишь и стандарт примут.
Аноним 18/05/18 Птн 19:54:08  1192348
>>1192335
Вижу, русский язык тоже не особо востребован.
Аноним 18/05/18 Птн 20:27:07  1192370
>>1192256
Что только не сделают люди, лишь бы не написать две инструкции на асме.
Аноним 18/05/18 Птн 21:17:47  1192390
>>1192370
> Debug resgister
Щто это?
Аноним 18/05/18 Птн 21:40:58  1192398
>>1192390
Набор регистров, используемый для установки точек останова для аппаратной отладки (можно, например, узнать о модификации или чтении памяти). Хранят адреса точек останова, их типы и статус.
Аноним 18/05/18 Птн 22:43:15  1192431
Говорите, вы биты тоже с нуля нумеруете?
Аноним 18/05/18 Птн 23:54:59  1192463
>>1192431
Да, с младшего и с нуля. А что?
Аноним 19/05/18 Суб 00:45:01  1192477
Нет анонимных функций, нет дженериков, нет промисов.
Аноним 19/05/18 Суб 00:47:13  1192478
Нет замыканий.
Аноним 19/05/18 Суб 00:49:18  1192481
>>1192477
> Нет анонимных функций
Не бывает анонимных функций, бывают проблем с английским.

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

> нет промисов
И слава богу. Нужно - запили сам. Через пару лет осознаешь свою ошибку и выпилишь.
Аноним 19/05/18 Суб 01:55:06  1192492
>>1192481
Что не так с анонимными функциями?
Аноним 19/05/18 Суб 02:28:29  1192498
>>1192492
Если ты ее не назвал, ее назовет компилятор, потому что линкеру нужно имя. А раз имя все равно будет, то почему бы его не придумать?
Аноним 19/05/18 Суб 07:51:55  1192547
>>1192463
Так хочется со старшего нумеровать)000.
Когда иду по массиву чаров, я же инкрементирую указатель, и мне идти также слева направо по битам
Аноним 19/05/18 Суб 08:03:07  1192549
>>1192481
> кроссплатформенный ассемблер
Бессмысленный набор слов.

>>1192498
>ее назовет компилятор, потому что линкеру нужно имя.
Не у всего есть linkage, дебич.

>> нет промисов
>И слава богу.
Люмпен от программирования as is.
Аноним 19/05/18 Суб 08:10:13  1192550
В CLion на винде вообще возможно запускать программу в отдельном окне консоли, а не встроенном в IDE?
Аноним 19/05/18 Суб 08:13:12  1192551
>>1192477
>функций
Анонимные функции - синтаксический сахар.
>>1192477
>нет дженериков
Не дженериков, а шаблонов, ты откуда такой вылез?
>нет промисов
нинужно
Рассматриваем Цэ, как удобный кросплатформенный ассамблер
Аноним 19/05/18 Суб 08:19:18  1192552
>>1192478
Лямбды с замыканими, по сути тоже сахар.
Передавай указатель на функции вместо лямбд и явно передавай параметры вместо замыканий.
Аноним 19/05/18 Суб 08:24:49  1192553
>>1192549
> кроссплатформенный ассемблер
>Бессмысленный набор слов.
ОКЭ, область применения - сверхэффективный быстрый системный, прикладной софт и числодробительные библиотеки.
Т.е. не делаем из С хипстеропарашу, а добавляем комфорта при решении текущих задач.


>> нет промисов
>И слава богу.
Люмпен от программирования as is.
При желании можешь написать сам. Но тут нет асинхронной парадигмы, поэтому нинужно.
Аноним 19/05/18 Суб 09:35:08  1192563
>>1192551
>Анонимные функции - синтаксический сахар.
Это, прежде всего, освобождение глобального неймспейса от ненужного хлама.
>нет промисов
Можно сделать с помощью longjmp/setjmp
Аноним 19/05/18 Суб 09:43:09  1192565
>>1192498
>потому что линкеру нужно имя
>статическая функция
Пиздец, какие же здесь дауны сидят.
Аноним 19/05/18 Суб 11:23:55  1192591
>>1192565
>кичится знанием базовый вещей
Мань, ты задачи бизнеса-то решать сможешь?
Тебе ставят большую задачу написать распределенное приложение. Что делать будешь, байтомакака?
Аноним 19/05/18 Суб 12:36:42  1192615
>>1192591
Кто ж поставит байтомакаке такое задание? В лучшем случае отпрофилируют и тормозное говнецо отдадут переделать.
Аноним 19/05/18 Суб 12:50:58  1192618
>>1192615
Два чаю. Си сейчас меют тендецию к заниманию прослойки между сетевым/графическим хардвером и макакским апи для конечного клиента, еси мы говорим о бизнессе
Аноним 19/05/18 Суб 13:06:45  1192632
>>1192550
Бампану. Или посоветуйте пожалуйства, годную и легкую IDE для Си
Аноним 19/05/18 Суб 14:25:57  1192681
names.png (15Кб, 648x485)
>>1192549
> Не у всего есть linkage, дебич.
А линкерам надо работать вне зависимости от того, какими асбтракциями это обмазали в стандарте.

>>1192565
> статическая функция
> Пиздец, какие же здесь дауны сидят.
Действительно.
Аноним 19/05/18 Суб 14:46:59  1192688
>>1192632
нотепад++
Аноним 19/05/18 Суб 15:03:14  1192698
>>1192688
Ну это уже перебор.
Аноним 19/05/18 Суб 15:11:42  1192704
>>1192632
Про Pelles C написано в шапке. Если тебе только Си и только винда, его будет достаточно.
Аноним 19/05/18 Суб 15:22:57  1192707
>>1192498
>А раз имя все равно будет, то почему бы его не придумать?
А раз компилятор генерирует машкод, то почему бы его не писать руками?

Л — Логика.
Аноним 19/05/18 Суб 15:26:13  1192709
>>1192591
>>1192615
>>1192618
Одинэсники отакуэ няшный тренд, все в налоговую.
мимо jsмокаг
Аноним 19/05/18 Суб 16:07:42  1192751
>>1192709
>мимо jsмокаг
ну вы заебали, это единственный илитарный трхед, был...
Аноним 19/05/18 Суб 16:22:12  1192757
>>1192751
Он и остается илитарным. Всякие js макаки тут не задерживаются, если не интересуются сями.
Аноним 19/05/18 Суб 16:25:29  1192762
>>1192751
Я на С 12 лет назад лабы делал в универе. Первая любовь. А JS - стал нужен пару лет назад сугубо из практических, но не корыстных целей (расширения браузера). Трхед незапятнан.
Аноним 19/05/18 Суб 16:31:00  1192765
152182385815453[...].jpg (118Кб, 700x393)
>>1192762
>Трхед незапятнан.
Ну тогда хорошо
Аноним 19/05/18 Суб 16:35:12  1192766
>>1192765
Он запятнан макакой.
Аноним 19/05/18 Суб 17:13:19  1192775
>>1192463
Хмм, с порядком байтов всё понятно, x86-Little-endian.
Но вот про порядки битов я дохрена разного нашёл.
Кое-где связывают Little-endian с нумерацией с МЗБ, а big-endian связывают с нумерацией с СЗБ.
Аноним 19/05/18 Суб 20:05:39  1192867
>>1192775
Железячники с младшего нумеруют. Intel (если уж мы об x86) с младшего нумерует. Разброд и шатания начинаются, когда нужно упаковать/распаковать поток битов в байты или слова, тогда, действительно, бывает и со старшего записано, и даже задом наперед - кому как удобнее.
Аноним 19/05/18 Суб 20:11:52  1192870
>>1192867
И вообще даже сама запись двоичного числа - это bitn-1×2n-1 + bitn-2×2n-2 + ... + bit2×22 + bit1×1i + bit0×20, номер бита логически вытекает из соответветствующей ему степени двойки.
Аноним 19/05/18 Суб 20:13:46  1192875
>>1192870
> 1i
bitn-1×2n-1 + bitn-2×2n-2 + ... + bit2×22 + bit1×21 + bit0×20
Ну вы поняли. Не могу ответить итт и не облажаться.
Аноним 19/05/18 Суб 21:27:13  1192909
Снимок.PNG (17Кб, 594x600)
Сап аноны, есть одна программа, которая сношает мне мозг, а я сношаю мозг ей.
В общем суть такая, делаю имитацию оргазма функции vector на СИ, я хочу что бы пользователь вводил нужну. длину вектора, а он сам выделял под себя место и все такое. Он делает все, но данные загоняются не корректно. Я создал цикл for, самый обычный, classic, там каждый раз генерируется рандомное число, преобразуется в стринг и заносится в массив, но если вручную все это работает (когда сам забиваешь массив в вектор), то через цикл он загоняет туда последнее число цикла, хотя в том же цикле добавлен принтф и все зоебись. Надеюсь вы хоть что то поняли из моего потока сознания.
На скрине сначала числа по порядку, преобразованные в стринг, а потом уже числа из вектора. Третяя группа это операции над вектором, там все ок.
>int main(void)//Тестирование функций
{
int noe=0;
int k=0;
char m[10];
vector v;
vector_create(&v);//Создаем вектор
printf("Enter number of elements: ");
scanf("%i\n", &noe);
for(k=0; k<noe; k++){
sprintf(m, "%d", k);
printf("%s\n", m);
vector_push_back(&v, m);
}
/vector_push_back(&v, "1");//Добавляем данные в вектор
vector_push_back(&v, "2");
vector_push_back(&v, "3");
vector_push_back(&v, "4");
vector_push_back(&v, "5");
/
Аноним 19/05/18 Суб 21:35:55  1192919
>>1192909
https://ideone.com/jxEyXC
Заебашил код сюда, что бы пацанам понятнее было. Спасибо
Аноним 19/05/18 Суб 21:50:46  1192930
>>1192919
Ну все правильно, ты ведь не выделяешь память под каждый новый элемент, а кладешь каждый раз один и тот же указатель на один и тот же буфер (m), и ты в цикле его затираешь все новыми и новыми данными, в результате твой вектор содержит 6 одинаковых указателей на буфер, в котором осталось последнее записанное туда значение. Напиши себе реализацию strdup, чтобы оно работало, как ты ожидаешь.

В push_back можно обойтись только realloc(), вспомнив, что realloc(NULL, size) - это то же, что malloc(size) - тогда тебе не нужно будет городить две раздельные ветки ради одного и того же.
Аноним 19/05/18 Суб 22:15:36  1192941
>>1192632
vim/emacs + gdb + ctags
Аноним 19/05/18 Суб 22:19:08  1192942
>>1192930
Я слишком тупой для таких вывертов, помоги позязя с strdup
Аноним 19/05/18 Суб 22:19:08  1192943
>>1192941
И мозоли, мозоли!
Аноним 19/05/18 Суб 22:20:07  1192944
>>1192632
codeblocks, 80мб
Аноним 19/05/18 Суб 22:23:17  1192946
>>1192942
char ∗strdup(const char ∗s) {
size_t length = strlen(s) + 1;
char ∗res = malloc(length);
if (res) memcpy(res, s, length);
return res;
}
...
vector_push_back(&v, strdup(m));

Можно еще не забыть проверку на ошибки: ругаться, если strdup() вернет NULL. А можно и не делать. При удалении вектора не забудь free() каждому такому элементу сделать. Хотя в твоей лабе можно и обойтись.
Аноним 19/05/18 Суб 23:19:27  1192970
изображение.png (169Кб, 500x322)
Ребята, а кто-нибудь из вас работает на C? Че делаете хоть? Сервера какие-нибудь пишете?
Аноним 19/05/18 Суб 23:48:13  1192983
>>1192970
Да, автомотив. Пишу логику сенсоров для электромашин будущего.
Аноним 19/05/18 Суб 23:49:37  1192986
Нет аннотаций/декораторов.
Аноним 20/05/18 Вск 00:02:52  1192994
>>1192983
>автомотив
Компания АвтоМотив это интернет магазин оборудования для автосервиса и СТО.
Аноним 20/05/18 Вск 00:06:11  1192996
>>1192698
Почему? Хуярю на нем, всем доволен, иногда на вим перескакиваю.
Аноним 20/05/18 Вск 00:07:25  1192998
>>1192994
>АвтоМотив
Автомотив, это не компания, автомотив компании это даймлер, бэ эм дабл ю, волксваген и харман, генерал мотрос.
Аноним 20/05/18 Вск 00:10:56  1192999
>>1192998
https://avto-motiv.ru
Аноним 20/05/18 Вск 13:03:23  1193165
Image.jpg (1970Кб, 2000x2610)
>>1187521 (OP)
Поясните, как создать графический интерфейс на чистом Си и что для этого лучше всего использовать? Gtk+ плох для нелинукс систем, Qt объектно-ориентированный, а wxWidgets судя по всему вобще не совместим с чистым Си (если всё-таки совместим подкиньте гайдов). Толко не советуйте WinAPI.
Аноним 20/05/18 Вск 13:12:17  1193175
>>1193165
Ты просишь готовую либу или как написать свой велосипед? Ты не совсем корректно выразился поэтому непонятно, что тебе посоветовать: пойти нахуй или использовать готовую либу.
Аноним 20/05/18 Вск 13:14:54  1193179
>>1193175
Я просто хочу найчиться делать программы с GUI на чистом Си, желательно самым простым способом.
Аноним 20/05/18 Вск 13:15:33  1193181
>>1193179
*научиться
Аноним 20/05/18 Вск 13:22:10  1193189
>>1193179
Простых способов нет.

Смотря для чего тебе GUI. Так-то навалом библиотек, в том числе кроссплатформенных.

Я даже не знаю, что тебе посоветовать. Qt и gtk+ в общем-то просты. Остальное не имеет дезайнера форм и поэтому придется ебаться в «слепую» с дизайном.

Как по мне вот простая либа https://github.com/vurtun/nuklear/blob/master/Readme.md

Есть tcl/tk...
Аноним 20/05/18 Вск 13:27:59  1193208
>>1193189
Возможно ли создать GUI на чистом Си с использованием Qt? Я знаю, что это объектно-ориентированный фреймворк, а в Си нет ни классов, ни поддержки ООП. Оно разве будет работать?
Аноним 20/05/18 Вск 13:33:51  1193221
>>1193208
Да
Аноним 20/05/18 Вск 13:45:53  1193252
image.png (7Кб, 446x191)
>>1193221
Тогда как? Я использую Qt в связке с Visual Studio, но когда создаю новый проект, мне на выбор предлагают только Visual C++.
Аноним 20/05/18 Вск 13:48:33  1193259
>>1193252
Пиши либу на Си и линкуй с крестовой гуидятиной
Аноним 20/05/18 Вск 13:52:13  1193266
image.jpeg (145Кб, 600x450)
>>1193259
Аноним 20/05/18 Вск 13:57:51  1193275
1526737886402.jpg (212Кб, 1218x1015)
>>1193266
Вот жиза, такие-то советы. Проще уж сразу на C++ писать.
Аноним 20/05/18 Вск 15:05:12  1193353
>>1193165
https://github.com/andlabs/libui
Аноним 20/05/18 Вск 16:09:24  1193404
сап двочеры, подскажите где скачать чистый unix, хочу искупаться в этом дерьме. Раньше ни разу не использовал ОС с интерфейсом командной строки, а теперь понимаю что пора бы и попробовать. Также подскажите отличается ли принцип установки от установки той же винды или убунту или придется попотеть. Будет ли дистрибутив и как записать на флешку образ ОС.
Аноним 20/05/18 Вск 16:38:24  1193421
>>1193404
Ебанашка, ты доски попутал. Гаврюша, пиздуй в /s.

ставь дебиан net install без ДЕ и прочих пряников, будешь в голой сосноле пердолиться. Не так страшно на самом деде, зависит от задач. Что-то даже проще будет делать, чем сидеть в GUI
Аноним 20/05/18 Вск 16:50:33  1193428
>>1193252
Пиши либу на Си, а интерфейс на Qt на крестах. Кроссплатформенных UI для Си нет. То, что есть - выглядит отвратительно. Лучше всего использовать Gtk на линуксах и Windows API на винде. Да, пилить два интерфейса. Да, долго и сложно. Зато не будет выглядеть как 99% опенсорса.
Аноним 20/05/18 Вск 17:09:48  1193436
>>1193428
Пиздеж и кукареканье. Tcl/tk, gtk, qt — все кроссплатформенное. Есть еще немного маленьких библиотек с тем же функционалом. 2 уже выше приводили.
Аноним 20/05/18 Вск 17:26:54  1193442
>>1193436
> Пиздеж и кукареканье
Научись посты целиком читать.

> Tcl/tk
Тормоза и буэ на любой ОС. И это не считая тикля в комплекте.

> gtk
На Linux отлично, зато все то же самое выглядит как говно на Windows.

> Qt
Не для Си. Лучше из сортов говна, но: не только GUI, куча ненужных возможностей (CSS, JS и прочие квики), медленно, ненативно, поведение приводится к общему знаменателю для всех реализаций, из-за чего везде выглядит чуждым, лицензия. Не говоря уже о том, что эта либа подталкивает писать не интерфейс на Qt, а целиком софт на Qt, используя их собственные аллокататоры, работу с файлами и сетью.

Алсо, в Windows не поддерживается фирменное движение наискосок для перехода в подменю, из-за чего Qt-шным меню пользоваться просто невозможно. И это никогда не починят, потому что нехуй кастомные меню рисовать, когда есть системные.

> Есть еще немного маленьких библиотек
Либо кастомная отрисовка со всеми возможнными недостатками (ограниченно подходит для игр, не подходит для приложений), либо очень ограниченные возможности уровня окна/кнопки/поля ввода.
Аноним 20/05/18 Вск 17:31:44  1193446
>>1193442
Qt есть минимал или как-то так. На этом движке пилят lxqt продолжение lxde.

> ограниченно подходит для игр, не подходит для приложений
Охуительные истоии уровня /зк. Игры, блядь, пишут на юнити и анрил энжин, а не на gui либах.
Аноним 20/05/18 Вск 17:34:56  1193449
>>1193442
Забыл добавить, что gtk на винде нормально выглядит. Audacious media player или cherrytree тому пример. Вполне себе нативно.
Аноним 20/05/18 Вск 17:44:05  1193453
>>1193446
> Игры, блядь, пишут на юнити
Да ты что, никогда бы не подумал! А интерфейсов в играх нет, и кнопка "Выйти из этой индипараши и удалить ее нахуй" появляется магически?
Аноним 20/05/18 Вск 17:46:21  1193455
>>1192766
Что тогда ей не запятнано? Ответ "хуита и бред на апачан.нет" не принимается.
Аноним 20/05/18 Вск 17:48:57  1193459
>>1193453
А ты точно пишешь на С и знаком с юнити? Мне кажется ты залетный из js треда.
Аноним 20/05/18 Вск 17:54:00  1193461
>>1193459
С юнити почти не знаком, но слово "индиговно" должно было тебе намекнуть, что кроме игр на крупных движках есть еще и поделки, в которых из чужого кода максимум SDL. И вот они используют всякие nuklear, потому что нормальный UI писать долго, а кнопочки нужны. Итт достаточно давно обитаю, больше десяти лет пишу на Си.
Аноним 20/05/18 Вск 17:57:21  1193463
>>1193461
Ну и где ты тогда противоречия увидел? Спор ради спора?

Игры на SDL пишут? Нет. На чистом С игры пишут? Нет. Даже для рогаликов соснольных юзают курсес-бэсед фреймворки.

Нахуй ты упираешься и давишь?
Аноним 20/05/18 Вск 17:58:31  1193464
>>1193463
> Игры на SDL пишут? Нет. На чистом С игры пишут? Нет
Ты сказал?
Аноним 20/05/18 Вск 17:59:24  1193465
С чего начать изучать тему, если я хочу написать свою либу уровня graphics.h или curses, используя WinAPI? Ну или просто маленький фреймворк для менюшек консольных.
Аноним 20/05/18 Вск 18:01:55  1193468
>>1193464
Опровергни тогда. Ах да, примером из этого тысячилетия. Чтобы и УИ и все прочее на С без всчких сторонних библиотек. Ну давай, удиви кукаретик ебаный, с 10 годами стажа. Ха ха врунишка.
Аноним 20/05/18 Вск 18:11:44  1193476
152679001819955[...].jpg (96Кб, 700x933)
Мне кажется в наш илитарный тредик начали набигать всякие.
Аноним 20/05/18 Вск 18:20:48  1193488
>>1193468
> Опровергни тогда
Ты уж как-нибудь сам. Сходи поищи, например, среди игр с LD, среди опенсорсных игр. Навскиду, GLTron и уебывай в гугл.
Аноним 20/05/18 Вск 18:23:12  1193490
>>1193488
Т.е. ты хотел сказать, что есть 1,5 проекта, которые в гугле на 789 064 255 странице выдачи?

Я не отрицаю, что есть единичные проекты, но индустрия давно уже держится на других слонах.
Аноним 20/05/18 Вск 18:31:31  1193496
>>1187521 (OP)
Есть ли какая-нибудь годная книжка с алгоритмами? А то переводить Цельсии в Фаренгейты не слишком уж интересно.
Аноним 20/05/18 Вск 18:38:45  1193503
>>1193476
>начали
Тебе только кажется, потом что ты сам недавно набижал. Я вот не заходил в пр и в частности в Си тред года 4, зашел - то же самое - пару продвинутых олдфагов, и куча
>помохите лабу сделать
>привет слесарюги
>лучше уж кресты
Аноним 20/05/18 Вск 18:39:58  1193504
>>1193496
Дональд Кнут
Аноним 20/05/18 Вск 18:49:01  1193511
>>1193465
Бамп.
Аноним 20/05/18 Вск 18:58:15  1193516
>>1193490
> но индустрия давно уже держится на других слонах
Так и я этого не отрицаю. Мы с тобой говорили о мелколибах для гуя. Nuklear и последователи востребованы только в таких единичных проектах, ну и еще во всяких редакторах для этих же проектов и прочих визуализациях, т.е., там, где у тебя канвас с графической либой, что-то рисуется, и хотелось бы рядом рисовать еще и кнопочку. Больше оно нахуй никому не нужно, о том и речь была.

>>1193465
А это разве не ты был? >>1190612 там ссылка на книгу.
Аноним 20/05/18 Вск 19:02:57  1193518
>>1193516
Ну, это попутно будет изучено. А вот как вынести все это в dll, например, чтобы оттуда дергать все более высокие самопальные функции? Короче, хочу написать обертку над апи.
Аноним 20/05/18 Вск 19:04:54  1193520
>>1193518
Чтобы от инициализации до обработки меню, с назначением функций на пункты, етц.

Отвалилось почему-то.
Аноним 20/05/18 Вск 19:11:45  1193526
>>1193518
> А вот как вынести все это в dll
__declspec(dllexport) или в .def-файле экспорты перечисли.

>>1193520
В смысле, ты хочешь, чтобы за тебя написали? Или книжку о том, как написать меню? Пишешь эту инициализацию, городишь свою структуру для меню с колбеками, курсор обрабатываешь, рисуешь, в чем проблема-то? Можешь в FAR посмотреть, как там диалоги сделаны.
Аноним 20/05/18 Вск 19:16:26  1193528
>>1193526
> Можешь в FAR посмотреть

Ох бляяяяядь вы только посмомтрите на него. Ну спасибо за разрешение. Чмоня тебе корона не жмёт? Хули ты такой высокомерный? Тебе ебучку что ли всерыть? Попроще я сказал будь, мразота ебаная блядь.

Нормально же спросил к чему это высокомерие хуесос ты четырехглазый.
Аноним 20/05/18 Вск 19:20:55  1193530
>>1193528
Я не четырёхглазый.
Аноним 20/05/18 Вск 19:24:30  1193533
>>1193526
Я, наверное, свои вопросы не смогу объяснить. Так что просто пойду и попробую сделать.
Аноним 20/05/18 Вск 19:30:52  1193538
Почему функция fgets не добавляет символ '\n' в строку?
Аноним 20/05/18 Вск 19:32:28  1193539
>>1193538
Почему она не добавляет \t или \b в начало строки?
Аноним 20/05/18 Вск 19:34:21  1193540
>>1193539
Почему она не проверяет строку на грамматические ошибки?
Аноним 20/05/18 Вск 19:35:57  1193541
image.jpeg (338Кб, 1023x575)
>>1193540
Дебилка блядь в microsoft word набирай код для проверки

ну или aspell инклюдь и проверяйся
Аноним 20/05/18 Вск 19:41:33  1193544
>>1193539
>>1193540
>>1193541
"Символ новой строки прекращает работу функции fgets, но он считается допустимым символом, и поэтому он копируется в строку string."
При вызове fgets(str, sizeof str, stdin) пишу '4'
В строке получаю 4\n\0
Если пишу '-4'
В строке получаю 4\0
Что за хуйня?
Аноним 20/05/18 Вск 19:41:55  1193545
>>1193538
Ты выбрал крайне хуевый тред для таких вопросов. Не нравится fgets - напиши свой. Я тебе больше скажу, просто возьми реализацию и просто чутка подправь.
Аноним 20/05/18 Вск 19:42:26  1193546
>>1193544
>В строке получаю 4\0
-4\0
Быстрофикс
Аноним 20/05/18 Вск 19:43:53  1193547
>>1193546
Какой sizeof(str)?
Если не 3, то у вас просто пространство искривилось.
Аноним 20/05/18 Вск 19:44:40  1193548
>>1193546
Ну а сам как думаешь? Как -4 может быть int? Str это положительная длина, а не отрицательная.
Аноним 20/05/18 Вск 19:45:28  1193549
>>1193533
Отлично, а с проблемами приходи.

>>1193538
Допустимо всего два варианта: либо у тебя EOF возник, либо твой буфер меньше длины строки. Тащи пример на ideone, где оно не работает.
Аноним 20/05/18 Вск 19:45:33  1193550
>>1193548
Он это на stdin пишет, наркоман
Аноним 20/05/18 Вск 19:47:56  1193551
>>1193545
быстрофикс
Только фишка в том, что fgets предназначена для работы в паре c fputs, которая этот символ добавляет
Аноним 20/05/18 Вск 19:49:06  1193552
>>1193547
а sizeof считает память, выделенную в куче?
str = malloc (1002);
Аноним 20/05/18 Вск 19:49:07  1193553
>>1193550
Ты головой ударился? Он пишет из stdin в str
Аноним 20/05/18 Вск 19:50:01  1193554
>>1193552
Епо, ты передаёшь sizeof от указателя на кучу.
Аноним 20/05/18 Вск 19:54:29  1193559
>>1193554
Все, вопрос решен. sizeof (str) = 1 (у меня система 8-битная), то есть считает только размер типа, а указатель в 8-бит системах = 1 байт.
Аноним 20/05/18 Вск 19:56:26  1193562
>>1193559
> у меня система 8-битная
Так, это что значит?
Размер чара 8 бит? И що? sizeof(char)=|Def|=1, пусть он даже 10 бит.
Размер типа считает, да. Но указатель как правило long.
Аноним 20/05/18 Вск 20:01:16  1193566
>>1193562
str - это указатель на тип char
Указатель в 8-бит системах имеет размер 1 байт.
Поэтому sizeof(str) = 1
Аноним 20/05/18 Вск 20:03:29  1193568
>>1193566
str - указатель.
И sizeof(str) не вернёт тебе размер char.
Аноним 20/05/18 Вск 20:21:58  1193590
>>1193554
Ну даже так у него все должно быть нормально в случае "4" и "-4" (на ideone например нормально, потому что размер указателя там 8), хотя он и долбоеб. Если только он не конпелирует какой нибудь устаревшей хуетой типа Турбо Си, где инт - 16-битовый (я знаю что есть преподаватели ебанашки которые не признают современных сред)
Аноним 20/05/18 Вск 20:23:22  1193593
>>1193590
Хз, у него вообще 3 символа вошло, как я понял, в обоих случаях.
Аноним 20/05/18 Вск 20:24:08  1193594
>>1193568
Ты упоротый что ли сука. Тебе же сказали, что у него система восьмибитная. Каким по твоему там должен быть размер указателя?
Аноним 20/05/18 Вск 20:26:07  1193596
>>1193593
Удалось записать != вошло. Затер какую-то переменную рядом с буфером, это и привело к спецэффектам.
Аноним 20/05/18 Вск 20:28:17  1193598
>>1193594
Любой, мать твою
Пацаны помогите решить судьбу мою Аноним 20/05/18 Вск 20:34:58  1193604
bWIUmku4dbE.jpg (129Кб, 712x719)
Сейчас делаю дипломную для шараги, пишу консольную программку на си для своего роутера на openwrt. Мне это дико нравится и вставляет. Но проблема в том, что в этом суровом, жестоком, несправедливом мире байтоебы никому нахуй ненужны.
Есть другой вариант. Учить javascript и становиться фулстак макакой, задрачивать ноду. После того как отбатрачу на галере и наберусь опыта, открывать свой наебизнес, или по крайне мере буду сеньор помидором с деньгами в хипстеротусовочке. Но меня дико тошнит от слов html, css, photoshop и все что связано с версткой заставляет мой пукан нагриваться до такой степени что в нем можно заваривать воду для доширака.
Блять, что делать? Задрачивать после си кресты?
Аноним 20/05/18 Вск 20:41:23  1193611
Screenshot3.png (55Кб, 808x776)
Screenshot6.png (250Кб, 1350x806)
>>1193604
оффтоп
но у меня горит шо пиздец
Аноним 20/05/18 Вск 20:57:00  1193616
Как можно выводить динамическое дробное число полностью, без лишних нулей?
Если в printf использовать %f, то будут выводиться лишние нули в дробной части.
Если использовать %g, то число с большим количеством символов, выводится в %e формате.
Так с помощью printf'а это никак не реализовать? Может быть можно как-то принудительно заставить %g всегда отображать число в %f формате?
Или единственный вариант - сначала переводить число в строку, а затем печатать его fputs'ом?
Аноним 20/05/18 Вск 20:57:46  1193618
>>1193616
Лох ебаный блядь )) про модификторы не прочитал, хуесос тупорылый
Аноним 20/05/18 Вск 21:09:47  1193622
>>1193618
Я так понимаю, что у него постоянно меняется число, и ему надо выводить его без лишних нулей
>>1193616
Нет, так чтобы компилятор за тебя думал, нельзя. Либо строкой, либо округлять до необходимого количества разрядов
Аноним 20/05/18 Вск 21:12:12  1193625
>>1193618
Писать %.100g - это ведь не решение.
Для %f вообще нет смысла в модификаторах точности
Аноним 20/05/18 Вск 22:14:10  1193669
>>1193625
> Писать %.100g - это ведь не решение.
Не решение. Но можно добавить символов, и будет норм. Вот тебе крайние случаи из старого треда, посчитай циферки и используй:
https://ideone.com/JyE5Qp
А так, зависит от задачи. Для показывания человекам округленное значение или %g с достаточной точностью - вполне норм (и пусть оно экспоненту показывает, если не хватило). Для передачи текстом между двумя машинами есть %a.
Аноним 20/05/18 Вск 22:19:33  1193672
>>1193611
Значит байтоёбство - всё? Низкоуровневое погромирование больше никому не нужно? А я только вкатываться собирался ну и подумываю о том, что бы в битки начать вкладываться
Аноним 20/05/18 Вск 22:26:04  1193676
>>1193672
Такая же хрень, парни. Непонятно как вкатываться. Мимостудент, угорающий по С с плюсами и без и крутому софту который на них пишут.
Аноним 20/05/18 Вск 22:28:13  1193678
>>1193676
Эмбеддед же.
Аноним 20/05/18 Вск 22:30:42  1193682
>>1193676
Гейдев
Аноним 20/05/18 Вск 23:58:44  1193729
Вы заебали смотреть на веб-макак. Прыщи/спермятина на ноде что ли уде стали работать? С и кресты там в почёте, микроконтроллеры, всякий настольный софь типа эдоуб, да куча направлений, где «байтоёбство» пригодится.

Не драматизируйте. Сами же не хотите участвовать в разработке каких-нибудь БД, ядер и т.п. Остальное уже отдано на растерзания стервятникам скриптоводчиских языков программирования. Да и там в принципе есть ниша с диез. Без работы уж точно не останитесь.
Аноним 21/05/18 Пнд 00:05:28  1193731
>>1193729
> есть ниша с диез
C и C# имеют столько же общего, сколько свинка и морская свинка.
Аноним 21/05/18 Пнд 00:08:53  1193732
>>1193731
О рили блядь? Открыл нахуй омерику ебана в рот. Я написал в ироничном контексте про нищу, если уж совсем прижмет, то мложно будет окунуться в этот пиздец, если кресты не осилите.
Аноним 21/05/18 Пнд 00:26:38  1193742
>>1193729
Шизофрения какая-то.
Аноним 21/05/18 Пнд 00:53:26  1193759
>>1193729
Байтоёбу неприятна. Гоните его с рынка труда, насмехайтесь над ним.
Аноним 21/05/18 Пнд 02:02:58  1193791
>>1193678
За 50 тысяч и невыездом из России на 10 лет?
Нет, спасибо.
Аноним 21/05/18 Пнд 02:04:21  1193792
>>1193503
А сам чем по жизни промышляешь?
Аноним 22/05/18 Втр 17:49:24  1194854
>>1193791
>За 50 тысяч
Примерно. Сильно дохуя платить не будут.
> невыездом из России на 10 лет?
Такое не очень часто бывает. И не всегда знание гос.тайны влечет невыезд.
Аноним 22/05/18 Втр 19:17:00  1194945
Научите меня управлять паматью в С. Полгода назад пришлось написать небольшой сервер SOCKS4 с плюшками. Долго ебался с неблокирующими сокетами и libev пока не понял как сделать. Добавляя новый шаг к протоколу приходилось прогонять прогу с валгриндом для того, чтобы найти утечки.
Серьезно, шаг влево, шаг вправо, пропустил один return и получай лопату дерьма в лицо. Как вы, блядь, ебетесь с этим всем?
Аноним 22/05/18 Втр 19:20:00  1194948
>>1194945
>Как вы, блядь, ебетесь с этим всем?
Опыт и паттерны, выделил память не забудь убрать. Все просто.
Аноним 22/05/18 Втр 19:22:40  1194951
>>1194945
Да вроде бы язык из 1968 года не рассчитан на многопоточность. В следующий раз возьми C++11 или Rust.
Аноним 22/05/18 Втр 19:41:04  1194965
>>1194945
> Добавляя новый шаг к протоколу приходилось прогонять прогу с валгриндом для того, чтобы найти утечки.
Значит хуевая архитектура. Теперь у тебя есть понимание задачи, попробуй спроектировать все с нуля.

> пропустил один return
А что, в других языках, если у тебя код с багами, программа все равно магически работает?
Аноним 22/05/18 Втр 20:13:40  1194977
>>1194951
А при чем язык, если многопоточность удел ОС?
Аноним 22/05/18 Втр 20:25:09  1194995
>>1194977
Блять нихуясебе. Все больше убеждаюсь что C самый адекватный тред тут
Аноним 22/05/18 Втр 20:31:14  1195001
>>1194995
А как называется та хуйня, когда есть несколько ядер и часть программы (например, цикл) одновременно считается на каждом из них?
Это тоже свойство системы или низкоуровневые языки имеют команды типа "эту ерунду считает процессор номер n"?
Аноним 22/05/18 Втр 20:32:07  1195002
>>1195001
Это свойство ОС, безусловно, описанное на низком уровне
Аноним 22/05/18 Втр 20:43:07  1195015
>>1194995
Был, пока ты не пришел.
Аноним 22/05/18 Втр 20:50:20  1195019
>>1194977
> многопоточность удел ОС
Не только. Например, до С11 по стандарту весь рантайм был не thread-safe. Всякие errno и прочие strtok были одни на всю программу. Модель памяти не предусматривала никакой синхронизации (нет, volatile - не то). Понятно, что реализации стандарта это все фиксили, но не было никаких гарантий, что на такой-то ОС и с таким-то рантаймом все будет работать.

>>1195001
Ты имеешь в виду (полу)автоматическую параллелизацию вроде OpenMP. Для нее должна быть поддержка в языке (чтобы обрабатывать аннотации и дергать библиотеку), и в Си (в виде расширения, конечно) эта поддержка есть, гугли #pragma omp.
Аноним 22/05/18 Втр 20:57:49  1195022
>>1195015
Мамку твою ебал
Аноним 22/05/18 Втр 21:28:30  1195041
>>1194965
>если у тебя код с багами
Если это просто утечка, то да. У белых людей есть умные указатели.
Аноним 22/05/18 Втр 21:38:35  1195046
>>1195041
Умные указатели не бесплатные. И без них вполне можно жить.
Аноним 24/05/18 Чтв 16:09:50  1196111
Где почитать, как битки двигать?
Такие нубские вопросы типа "А как установить в char val i-ый бит в значение k=0,1?" Ведь одной И или ИЛИ не обойтись.
Там много комбинаций из двух действий можно придумать с этими вот ^, &, |, ~. Какая считается лучше?


Аноним 24/05/18 Чтв 16:14:40  1196115
>>1196111
>как битки двигать?
<<
>>
Теперь ступай с миром нахуй
Аноним 24/05/18 Чтв 16:15:14  1196116
>>1196115
Не гринтексти мне тут райт шифтом.
Аноним 24/05/18 Чтв 16:17:28  1196118
>>1196116
А ты мне запрети, мальчик.
Аноним 24/05/18 Чтв 16:18:15  1196119
>>1196118
Время скоро запретит, старый пердун
Аноним 24/05/18 Чтв 16:20:19  1196121
>>1196119
>скоро
Здесь мы идем.
Аноним 24/05/18 Чтв 16:22:17  1196124
unsigned char из какого стандарта?
Аноним 24/05/18 Чтв 17:26:11  1196158
>>1196124
Pre-K&R еще. В C89, естественно, есть. А вот uint8_t и stdint.h появились в C99.
Аноним 24/05/18 Чтв 17:28:06  1196159
>>1196111
Классическая статья: https://graphics.stanford.edu/~seander/bithacks.html
Нет, комбинаций не так много, с xor биты переключают, с | включают, с & ~ выключают. Остальные варианты как минимум длиннее.
Аноним 24/05/18 Чтв 18:51:46  1196200
>>1187521 (OP)
Сап, бояре.
Очень мало писал на си, в основном на крестах.
Но тут внезапно вяли на работу, написание драйверов под сетевые адаптеры на linux/windows, чтобы такого можно почитать, чтобы хоть чуть-чуть что-нибудь понять?
в си не углублялся, в крестах чувствую себя более-менее
Аноним 25/05/18 Птн 11:13:51  1196567
Есть ли какой-нибудь опенсорсный небольшой проект чисто на Си желательно еще и с WinAPI, в котором вот прямо отличный код, эталон?
Аноним 25/05/18 Птн 14:38:08  1196665
5a55egpauw6o.jpg (55Кб, 730x590)
>>1196567
https://github.com/cysin/info-zip
Аноним 25/05/18 Птн 15:15:25  1196684
>>1196200
Никаких идей?
Аноним 25/05/18 Птн 15:53:56  1196716
>>1196684
Ну разве что Эндрю Таненбаума...
Аноним 26/05/18 Суб 10:08:17  1197058
>>1196716
Книга есть где-нибудь?
Или самому поискать?
Аноним 26/05/18 Суб 13:45:26  1197128
>>1197058
> Книга есть где-нибудь?
Где-нибудь есть.
> Или самому поискать?
Поищи.
А вообще, стоит знать, что существуют примерно два крупных сайта с учебниками, ели там нет, с большой вероятностью нигде нет.
Аноним 26/05/18 Суб 14:02:04  1197132
>>1197128
А что за сайты, если не секрет?
Аноним 27/05/18 Вск 10:02:58  1197562
Можно ли как-то исхитриться с макросами, что бы объявлять глобальные переменные в функции?
Аноним 27/05/18 Вск 10:26:43  1197575
Вот такой чек на byte order:
unsigned long endian=1;
unsigned char isbigend=(!∗((char ∗)&endian));
Но это не будет работать, если sizeof(unsigned long)=sizeof(char). В C89 есть тип, который гарантированно больше, чем char.
ЕМНИП, там везде неравенства нестрогие.
Аноним 27/05/18 Вск 10:27:07  1197576
Аноны помогите дураку, начал читать классику в лице K&R, ну и возник затык, почему этот код не делает что должен? По идее должен считать количество символов/строк, но этого не происходит.
линукс, компилирую tcc
При этом на ideone все компилируется и работает как надо, в чем проблема? В компиляторе? В эмуляторе терминала? Что я делаю не так?
Аноним 27/05/18 Вск 10:31:22  1197577
>>1197575
> В C89 есть тип, который гарантированно больше, чем char?
Аноним 27/05/18 Вск 11:13:19  1197597
>>1197576
Ты уверен что тебе нужен for(...); вместо for(...){}?
Аноним 27/05/18 Вск 17:19:19  1197807
>>1197575
> В C89 есть тип, который гарантированно больше, чем char.
Теоретически нет. Но так как ты все равно детектишь байт-ордер, то тебе, вероятно, хочется свопать байты, а если sizeof(char) == sizeof(long), то свопать тебе нечего, и можешь считать endianess любым. А если у тебя все же настоящие восьмибитные байты, то завези себе stdint из C99, хотя бы частично. Работы по портированию на новую архитектуру - пара минут, удобство зашкаливает.

>>1197576
> но этого не происходит.
А что происходит? А Ctrl+D в конце ввода ты тыкаешь, чтобы сказать терминалу, что завершил ввод и получить EOF в программе? Алсо можешь делать ./govnokod < filename (собственно, ideone нечто подобное и делает).

>>1197597
Да, для его for() не нужно тело.
Аноним 27/05/18 Вск 17:34:05  1197816
Помогите студенту
Есть ASP.NET и DataGrid c данными из SQL
1)Как изменить вывод данных, то есть вместо N выводится N/5 или N+5.
2)Как добавить колонку, созданную из значений двух колонок, например Column1 = Column 1 + Column2
3)Как привязать графики к значениям колонки?
Аноним 27/05/18 Вск 18:34:51  1197866
>>1197816
> NET
Аноним 27/05/18 Вск 19:01:01  1197886
>>1197816
Во первых, ты проебался с тредом. У нас тут сишечка а не шарп.
Во вторых, с лабами иди нахуй!
Аноним 27/05/18 Вск 19:37:13  1197904
>>1197816
Какая-то неизвестная мне сишечка. где в документации прочитать про DataGrid?
Аноним 27/05/18 Вск 20:38:25  1197937
>>1197886
>>1197904
Извините, действительно не туда.
Аноним 27/05/18 Вск 23:17:09  1198044
В общем треде проигнорили, поэтому соре, дублирую здесь.

Уважаемые опытные программистеры, помогите выбрать.
Хочу заниматься разработкой (gamedev в идеале), но все мы прекрасно знаем, что без опыта нахуй кому нужен. Есть возможность поработать скриптизером на C (нагрузочное тестирование), стоит ли тратить время на получение хоть какого то официального опыта или продолжать попытки самообразования в надежде найти работу потом?
Аноним 27/05/18 Вск 23:18:58  1198046
>>1198044
Юзай любую возможность получить опыт
Аноним 28/05/18 Пнд 07:53:10  1198133
>>1198044
Ради опыта можешь и поработать.
но вкатываться в гейдев с одним лишь си, ну такое себе
Аноним 28/05/18 Пнд 19:12:54  1198437
По какой литературе изучить GAS?
Хочу инлайны свободно пилить потом.
Аноним 28/05/18 Пнд 20:13:30  1198454
>>1198437
3,5 говнокниги, нахуй оно нужно. Вруби интеловский синтаксис и не еби небе мозга.
Аноним 29/05/18 Втр 06:41:36  1198640
>>1192344
Нинужно /thread
Аноним 29/05/18 Втр 07:00:32  1198642
>>1198640
Автовывод не нужен, неймспейсы очень нужны. Особенно нужны неймспейсы для енумов (и типы заодно).
Аноним 29/05/18 Втр 07:21:02  1198645
>>1198642
Иди свой язык пили, C++ и C-- уже есть. Пусть будет C==
Аноним 29/05/18 Втр 09:29:22  1198677
>>1198645
А потом скатится в очередное унылое говно
Аноним 29/05/18 Втр 14:45:29  1198846
15226968921710.jpg (21Кб, 364x253)
>>1198645
C===
Аноним 29/05/18 Втр 15:22:18  1198868
>>1198846
C===8
Аноним 29/05/18 Втр 18:28:26  1198965
>>1198645
Я не считаю себя настолько крутым. Компилятор напишу, юзабельный язык - вряд ли.
Аноним 29/05/18 Втр 19:08:03  1198997
>>1198965
Тащемто даже компилятор не нужен, достаточно написать транслятор в си, а уж сишечку чем угодно компилировать. Ранние кресты так и делали.
но да, написать что то отличное от говна надо неибацца скил иметь, а то выйдет по типу котлина
Аноним 29/05/18 Втр 19:20:38  1199007
152679001819955[...].jpg (96Кб, 700x933)
>>1198997
>котлин
Аноним 29/05/18 Втр 19:32:30  1199014
>>1199007
Ну они хотели как лучше, вышло как всегда.
хуево, очень
Аноним 29/05/18 Втр 19:56:38  1199031
152405622912875[...].jpg (16Кб, 400x222)
>>1199014
>JetBrains
>хотели как лучше
Аноним 29/05/18 Втр 20:38:00  1199054
thoughtful comm[...].png (51Кб, 395x104)
>>1198997
> Ранние кресты так и делали.
И получался пикрелейтед. Первое издание "Как испортить Си классами" за авторством некоего Страуструпа
Аноним 29/05/18 Втр 20:40:24  1199057
thoughtful comm[...].png (90Кб, 419x159)
>>1199054
Облажался с пиком.
Аноним 29/05/18 Втр 20:42:37  1199060
>>1199054
Ну я чисто пример привёл, все таки писать компилятор будет сложнее, даже сейчас есть пара неплохиххоть и хипстерских языков транслируемых сначала в си.
Аноним 29/05/18 Втр 20:45:48  1199064
>>1199060
> Ну я чисто пример привёл
А я просто почему-то вспомнил. Вроде ко второму изданию они компилятор уже пофиксили. И нет, я с тобой не согласен. Для кодогенерации есть LLVM, а лексер/парсер все равно писать так или иначе.
Аноним 29/05/18 Втр 20:48:03  1199068
>>1199064
>llvm
Компилятор тогда в 640кб не уместить
Аноним 30/05/18 Срд 19:28:56  1199573
Сап, анон. Пытаюсь в .txt парсер забуриться. Раскидай мне, плес, стоит ли мне strtok() юзать или же навелосепидировать собственный токенизатор?
Аноним 30/05/18 Срд 19:38:57  1199582
>>1199573
> в .txt парсер
Лолшто? Что ты там парсить собрался?

> стоит ли мне strtok() юзать
Ну strtok умеет делать токены только по разделителям. Если у тебя нет четких разделителей, то очевидно свой, а если есть, то все равно свой, но внутри strtok() можно заюзать.
Аноним 30/05/18 Срд 19:49:14  1199593
>>1199582
>Если у тебя нет четких разделителей
В смысле чётких? Я могу слова в качестве шаблонов для разделения задавать?
>Что там парсить
Ну, велосепидирую тут частотный словарь. Интересно получится или нет. Но чтобы в начале не обосраться решил погуглить, а не набивать шишки. Ну, в примерах нет слов в качестве разделителей.
Аноним 30/05/18 Срд 19:52:05  1199597
>>1199593
> Я могу слова в качестве шаблонов для разделения задавать?
Нет, только список символов, любой из них будет разделителем. Ты можешь по пробелам разбить на слова strtok()-ом, а дальше велосипедить.
Аноним 30/05/18 Срд 19:54:08  1199600
>>1199597
Спасибо анон. Чая тебе и пончиков.
Аноним 31/05/18 Чтв 12:04:07  1199902
6832E065-7BAE-4[...].png (311Кб, 1136x640)
Привет ананасы. Объясните как можно подробнее про библиотечные файлы в языке си мне(изучающему язык). Расскажите про то где на самом деле находится определение функций(таких как принтф сканф или геткэр путкэр и тд), что еще помимо прототипов находится в библиотечных файлах (таких как stdio.h, stdlib.h) и зачем оно там. Почему в 1 издании книги брайана кернигана и денниса ритчи в примерах с кодом не подключались заголовочные файлы(пример на картинке) и почему в ос убунту мне приходится прибегать к танцам с бубном при подключении библиотечного файла math.h и вызове функции (sqrt() например), прога не компилится и приходится прописывать дополнительные команды вроде -lm(зачем она вообще нужна я хз). В общем вопросов много, выручайте, очень интересно
Аноним 31/05/18 Чтв 18:41:09  1200083
>>1199902
> Почему в 1 издании книги
> не подключались заголовочные файлы(пример на картинке)
Потому что старое говно. Во-первых, был (только в С11 окончательно убили) неявный int - если для функции не указан или не известен тип возвращаемого значения, считается, что она возвращает int (как main() у тебя на пике), если для переменной не указан тип (static foo = 1), то она опять же считается интом. Дальше для аргументов: если скобки в декларации пустые (как в main() на пике), считается, что функция может принимать любое количество любых аргументов (которые подлежат default argument promotions >>1187393, пока не смыло). Поэтому в отсутствие всяких деклараций твой printf на пике означает "функция, которая возвращает int и принимает любые аргументы". Проверка типов не производится, поэтому если облажаешься, компилятор тебе об этом не скажет.

> Расскажите про то где на самом деле находится определение функций
Определения (точнее, уже скомпилированные в машинный код реализации) лежат в объектных файлах, лежащих внутри библиотечных файлов (которые на самом деле просто архивы с индексом), объявления в заголовчных файлах.

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

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

> приходится прописывать дополнительные команды вроде -lm(зачем она вообще нужна я хз)
Обычно существует какой-то вариант libc - библиотеки, в которой содержится реализация стандартных сишных функций. Существует механизм, который позволяет передать из компилятора в линкер директиву "при линковке этого объектного файла самостоятельно подключи эту библиотеку". И при компиляции сишных файлов с помощью этого механизма подключается libc без каких-то дополнительных телодвижений с твоей стороны. По идее, в libc должна лежать и математика тоже, но по техническим причинам (в том числе из-за разнообразия реализаций математических функций в зависимости от платформы) в Linux она лежит отдельно, и компилятор не подключает ее неявно, и поэтому тебе приходится говорить линкеру, чтобы он подключил библиотеку (-l), которая называется libm.a (-lm).
Аноним 31/05/18 Чтв 18:46:07  1200089
>>1200083
чел, ты охуенный, но я, например, тоже все это знаю
просто не пиши и не отвечай ньюфагам irl
надо будет, сами будут грызть книги и копать вглубь
а так ты им за 5 минут объяснишь то, на что потратил недели лютого задротства, сидения под отладчиком и чтения манов
это то же самое что и продавать бананы по 5 рублей, когда они стоят 45
Аноним 31/05/18 Чтв 19:10:23  1200102
>>1200083
> только в С11 окончательно убили
То есть теперь за типы long или unsigned компилятор пошлет тебя нахуй?
Аноним 31/05/18 Чтв 19:19:32  1200108
>>1200102
Нет, но скорее всего кинет предупреждение при компиляции
Аноним 31/05/18 Чтв 19:39:54  1200117
>>1200102
Нет, long - это синоним long int, unsigned - синоним unsigned int, это просто сокращенные формы записи. А неявный int используется, когда ты по каким-то причинам вообще не указал тип, как тут тип bar и типы возвращаемых значений у printf, foo и main, например:
foo(bar) { printf("%d\n", bar); }
main() { foo(1); }
Аноним 31/05/18 Чтв 22:19:46  1200296
>>1200089
> irl
но это же двачь
Аноним 31/05/18 Чтв 22:23:55  1200302
>>1200083
Охуеть ты расписал. Спасибо.
Аноним 01/06/18 Птн 15:15:56  1200663
В какую сторону копать, чтобы кодить многопоточные программы на C?
Аноним 01/06/18 Птн 15:30:52  1200671
>>1200663
> В какую сторону копать, чтобы кодить многопоточные программы на C?

1) структуры данных (для многопоточности тебе обязательно понадобятся очереди)
2) примитивы синхронизации
3) непосредственно само api дл создания потоков.
4) сосание хуйцов с классическими многпотокопроблемами и размышления "как же я докатился до жизни такой"
5) переосмысление сути работы с данными в многопоточных приложениях, появление понятий о Thread Pool (делать потоков больше чем ядер процессора - бессмысленно), понятий о джоба=х и командах (оппа, если мы разобьем все системы нашей софтины на мелкие задачки, которые будем скармиливать пулу потоков, то мы и от многих проблем избавимся и получим турбо-производительность, правда чтобы оба сразу думать над архитектурой придется дольше)
6) Придти к понятию акторов как вершине пройденых пунктов.
Аноним 01/06/18 Птн 15:45:52  1200684
>>1200671
Спасибо за путь.
Аноним 01/06/18 Птн 16:49:48  1200735
>>1200671
> делать потоков больше чем ядер процессора - бессмысленно
Да что ты говоришь? На iowait висеть уже не модно?
Аноним 01/06/18 Птн 16:59:28  1200737
Почему не нужно использовать плагины компилятора?
Аноним 01/06/18 Птн 17:00:31  1200739
>>1200737
Что такое "плагины компилятора"?
Аноним 01/06/18 Птн 21:52:29  1200950
Я мамкин оптимизатор, и всегда, когда можно сэкономить пару байт, пару инструкций, я это делаю. В последнее время я всё больше задумываюсь над целесообразностью этого. Например, вместо enum я сую варианты в define, а саму ячейку делаю char, правильно ли это, или я слишком сильно оптимизируют и можно всё в инт сувать и ок?
Аноним 01/06/18 Птн 21:57:20  1200955
>>1200950
Всё целесообразно задаче.
Сидеть на жирушном x86 и делать такое это дебилизм, канеш
Аноним 01/06/18 Птн 22:01:10  1200959
>>1200950
>в инт сувать и ок?
Ну да, твой чар всеравно 8 байт не занимает, если это не массив.
Аноним 01/06/18 Птн 22:20:02  1200982
>>1200959
А почему он занимает не 8 байт? Байт минимальная единица, не?
Аноним 01/06/18 Птн 22:28:32  1200993
>>1200950
> вместо enum я сую варианты в define
Все так делают. Typed enum из крестов нам не завезли, а иначе какие-нибудь битовые флаги не создашь, будет ругань, что в int не влазит.

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

> или я слишком сильно оптимизируют
С возврастом это проходит.
Аноним 01/06/18 Птн 22:39:15  1201000
>>1200982
Потому что выравнивание.
Аноним 01/06/18 Птн 22:40:04  1201001
>>1200739
Полагаю, речь идет о расширениях.

>>1200737
Если ты говоришь про плагины IDE (среды разработки, в которой ты пишешь код, нажимаешь Run и т.д.) - пользуйся, почему бы нет? Но НЕ для контроля версий. Для этого в твоей среде должна быть всего одна кнопка, аналог Run Command Prompt в Visual Studio, ты должен нажимать ее и делать git add -A git commit git push и всю эту херню.

А если ты про расширения компилятора, то вот почему: твой код портируют с одной популярной системы на другую, а там внезапно нет твоего компилятора или есть, но хуевый, и тогда твой код летит в пизду.
Аноним 02/06/18 Суб 00:21:13  1201092
Пишет кто-нибудь под андроид на C? Как оно?
Аноним 02/06/18 Суб 01:10:56  1201137
>>1187521 (OP)
что делает код:
arr1[arr2[count++]]++;
?
Аноним 02/06/18 Суб 01:18:42  1201145
>>1201137
index = arr2[count]
count = count + 1;
arr1[index] = arr1[index] + 1;
Мог бы и сам разобрать.
Аноним 02/06/18 Суб 01:21:53  1201150
>>1201137
Обращается к arr2[count], увеличивает count на 1, обращается к arr1[arr2[count]], <- здесь значение то, что было в начале, то есть обращение к arr2 не происходит снова грубо говоря.
Аноним 02/06/18 Суб 01:22:35  1201152
>>1201150
А, там ещё стоит ++, ну в общем потом значение внутри ячейки ещё увеличится, ну написали вроде уже.
Аноним 02/06/18 Суб 06:56:37  1201220
>>1200993
>Выигрываешь по памяти (возможно), проигрываешь по
>инструкциям, потому что для манипуляций потребуются
>всякие лишние movzx/movsx.

Посоветуешь материалы, чтобы понять, как правильно?
Аноним 02/06/18 Суб 12:07:46  1201300
>>1201150
>>1201145
Разве он сначала не плюсует count, а потом использует его как индекс для arr2?
Аноним 02/06/18 Суб 14:31:43  1201414
>>1201001
>А если ты про расширения компилятора, то вот почему: твой код портируют с одной популярной системы на другую, а там внезапно нет твоего компилятора или есть, но хуевый, и тогда твой код летит в пизду.
Двачую, испытываю анальные боли из за того что в коде используют расширения от gcc, потом хуй клангом скомпилируешь
Аноним 02/06/18 Суб 17:12:26  1201502
>>1201300
Нет, я же скинул пруфпик.
Аноним 02/06/18 Суб 18:06:34  1201533
>>1201220
Не знаю. Сильно зависит от компилятора и архитектуры. Поглядывай в годболт, если так уж хочется "оптимизировать".
Аноним 02/06/18 Суб 18:10:14  1201538
>>1201533
>годболт
Что это?
Аноним 02/06/18 Суб 18:18:03  1201549
>>1201538
В шапке же есть. godbolt.org. Показывает, как компилируется твой код разными компиляторами.
Аноним 02/06/18 Суб 18:28:07  1201559
есть какой-нить более мощный бесплатный аналог http://www.pythontutor.com/visualize.html#mode=edit?
Аноним 02/06/18 Суб 18:35:08  1201561
>>1201559
Во-первых, почему ты спрашиваешь про питон здесь? Во-вторых, раз уж ты спрашиваешь здесь, то да, есть, можешь взять любую IDE, зайти в отладчик, зажать F7 или F11 и смотреть на что-то похожее.
Аноним 02/06/18 Суб 18:44:22  1201564
>>1201561
там не тока питон, можно язык выбирать
Аноним 02/06/18 Суб 19:36:06  1201627
>>1200950
> Я мамкин оптимизатор, и всегда, когда можно сэкономить пару байт, пару инструкций, я это делаю. В последнее время я всё больше задумываюсь над целесообразностью этого. Например, вместо enum я сую варианты в define, а саму ячейку делаю char, правильно ли это, или я слишком сильно оптимизируют и можно всё в инт сувать и ок?

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

1) По максимуму загрузить АЛУ независимыми арифметическими командами. То есть конкретная такая лапша, разворачивание циклов, одна команда SSE/AVX, следом арифметические команды вообще из другой оперы, вот это вот всё.


2)Ликвидировать промахи кеша. Самая главная проблема современного кода не в коде, а в доступе к данным, при котором в кеше данных не оказывается и процессор превращается в тыкву. Избавляемся превращением множества жирных структур в одну структуру, каждое поле которой - массив.

struct{int a1,a2,a3...a100500} huita; huita[] => struct{int a1[],a2[],a3[]...a100500[]};
Аноним 02/06/18 Суб 19:38:49  1201630
>>1201627

Короче простым избавлением от жирных структур (жирная - это когда размер больше кеш-линии) и превращения многомерно-иерархических структур данных в линейные достигается самая охуенная производительность. В ассемблер сегодня есть смысл лезть разве что для явной SIMD-арифметики, если таковая тебе нужна.
Аноним 02/06/18 Суб 20:03:01  1201655
оптимизаторы сверху, вот типа создаешь структуру, в зависимости от разрядности между полями будут пробелы какие-то, тобиш условно структура будет весть не n байт, а n*x байт. Что мешает выравнивать структуры шоб меньше памяти занимали?
Аноним 02/06/18 Суб 20:32:19  1201672
>>1200950
Смысла выбирать более узкие типы с переходом на 64 бита нет никакого. Добьёшься своим char-ом только того, что у тебя в регистре будет 56 лишних, неиспользованных бит и всё. Работа со старшими битами регистров не трогая младшие в машинных кодах достаточно сложна, и компиляторы обычно не заморачиваются. По памяти тоже не выиграешь - выравниваются переменные все равно минимум по границе машинного слова - тех же 64 бит. Убавишь выравнивание - будет алиасинг, когда у тебя несколько переменных в одном слове памяти и обращение к одной тормозит обращение к другим.

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

В остальном просто расслабься и пиши понятный код.
Аноним 02/06/18 Суб 20:34:50  1201673
>>1201655
1. Штраф производительности на чтение невыравненных переменных.
2. Альясинг: https://en.wikipedia.org/wiki/Aliasing_(computing)#Conflicts_with_optimization
Аноним 02/06/18 Суб 20:56:12  1201678
>>1201627
> Избавляемся превращением множества жирных структур в одну структуру, каждое поле которой - массив
Ты и сюда это принес? Это сильно, очень сильно зависит от данных и характера их обработки. Но в общем случае, если структуры не слишком большие, элементы-структуры в массиве лучше, чем структура параллельных массивов.
Аноним 02/06/18 Суб 21:03:46  1201682
Сделал подобную дичь для удобства. Это не быдлокод?
#define dynamic(type, name) type name=(type)malloc(sizeof(type))
Аноним 02/06/18 Суб 21:06:49  1201684
>>1201682
Это бессмысленно и опасно, потому что возвращаемое значение ты проверить забыл. Если лень писать вручную, сделай сниппет для IDE.
Аноним 02/06/18 Суб 21:08:30  1201687
>>1201684
Там указатели макаба скушала. А какая тут опасность-то?
И есть толк все переменные выделять динамически, чтобы удалять их по мере использования?
Аноним 02/06/18 Суб 21:11:55  1201689
>>1201687
> А какая тут опасность-то?
malloc() вернет NULL, ты упадешь.

Ты все тот же мамкин оптимизатор? Ты знаешь, что такое куча? Ты правда веришь, что если ты сделаешь free(), то программа будет занимать меньше памяти? В чем смысл "удаления" переменных, если указатель все равно останется, пока ты не выйдешь из его области видимости? А еще ты можешь забыть free() и протечь памятью. Зачем все это?
Аноним 02/06/18 Суб 21:11:57  1201690
>>1201687
Нет, только лишние syscall'ы кидать
Аноним 02/06/18 Суб 21:12:41  1201692
>>1201690
И как часто malloc() syscall-ы дергает?
Аноним 02/06/18 Суб 21:15:01  1201693
>>1201692
Когда кучу надо расширить.
Аноним 02/06/18 Суб 21:15:49  1201694
>>1201689
>Ты все тот же мамкин оптимизатор
Уже другой. Спасибо, как понял указатель в стеке будет все равно висеть.
Аноним 02/06/18 Суб 21:19:39  1201696
>>1201689
Блять ассемблер
Аноним 02/06/18 Суб 22:42:16  1201729
ребята как учить стандарты если они выходят быстрее чем ты успеваешь их учить
Аноним 02/06/18 Суб 22:47:35  1201732
>>1201689
Вернулся мамкин оптимизатор
Разве malloc возвращает NULL не тогда, когда новую память выделить не реально, и вероятность того, что у юзера не будет новой памяти на столько мала, что можно и не проверять?
Аноним 02/06/18 Суб 22:53:42  1201734
>>1201732
Деды проверяли, и ты проверяй.
Ишшо себе выдумал!
Аноним 02/06/18 Суб 23:02:59  1201738
>>1201729
Попробуй научиться читать не по слогам.
Аноним 02/06/18 Суб 23:10:44  1201740
>>1201732
>вероятность того, что у юзера не будет новой памяти на столько мала, что можно и не проверять?
Ну если у того анона сверху тип - не структура на несколько мегабайт - вероятность мала. Но в целом, и память, и своп вполне могут кончиться, если что-то ее выжрет и/или протечет.
Аноним 03/06/18 Вск 09:51:07  1201844
>>1201729
Не учи плюсы
Аноним 03/06/18 Вск 09:52:31  1201847
>>1201732
То есть С++ new лучше malloc'a.
Аноним 03/06/18 Вск 12:26:55  1201894
>>1201732
Вообще — нет.
Пример линукс:
https://linux.die.net/man/3/malloc
> By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available. In case it turns out that the system is out of memory, one or more processes will be killed by the OOM killer.

Проверять всё равно нужно, потому что NULL может прилететь, даже если в ОС ещё не кончилась память, например если память фрагментирована, а тебе нужен большой кусок.

Использование NULL'а не обязательно приведёт к немедленному падению проги, а так же ведёт к дырам в ней.
Аноним 03/06/18 Вск 15:03:03  1202006
А если использовать в структурах мелкие типы типа char, распологая их друг за другом, чтобы не было проблем с вырваниванием?
Аноним 03/06/18 Вск 15:12:25  1202010
Хелло. Есть несколько регистров, мне нужно выбирать их
в зависимости от порта. Хотел бы сделать макро, чтобы работал так:
макро(идентификатор нужного регистра) |= пин;
идентично строчке
нужное_имя_регистра |= пин;

Насколько реально такое сделать и, если это реально, то как?
Аноним 03/06/18 Вск 15:12:29  1202011
Парни, кто-нибудь на Си-шке (не C++) коммерчески шпилит? Какой фреймворк для тестов используете?
Аноним 03/06/18 Вск 18:22:50  1202088
>>1201894
Но ты спастил отрывок со случаем, когда malloc() возвращает non-NULL но памяти нет, т.е. противоположный случай.
Но это не отменяет того, что то, что ты сказал - верно
Аноним 03/06/18 Вск 18:35:21  1202093
>>1202010
Пример написал бы, как оно должно выглядеть. Возможно, ты хочешь приклеивать к имени порта аргумент:
#define PORTA_REG1 0x10002000
#define PORTA(reg) PORTA_##reg

PORTA(REG1) // Раскроется в 0x10002000
Аноним 03/06/18 Вск 20:38:48  1202130
>>1202011
у си-богов все сразу работает
сириусли, как часто ты встречаешь проект у которого модульные тесты и на нагрузку есть?
то то же

Аноним 03/06/18 Вск 20:42:57  1202134
>>1202130
Дело не в том, что все работает. Дело больше в том, что проблемы в Си часто связаны с undefined behavior, а обнаружить многие такие случаи тестами сложно, поведение может поменяться на противоположное на другой машине со слегка отличающейся версией компилятора. Поэтому на Си популярный ныне подход "напишем говно, покроем тестами и будем править баги" получается себе дороже, лучше сразу нормально писать.
Аноним 03/06/18 Вск 21:03:13  1202145
image.png (336Кб, 1920x1080)
Сделал небольшую обертку вокруг WinAPi. Это полезно?
Аноним 03/06/18 Вск 21:12:16  1202151
>>1202145
Полезно. А теперь оберни иксы еще так же. И постарайся не ошибиться тредом в следующий раз.
Аноним 03/06/18 Вск 21:16:40  1202154
>>1202151
Они тоже ебанутые как WinApi?
Аноним 03/06/18 Вск 21:37:14  1202164
>>1202154
Windows API вполне вменяемый API. Ненормально там обилие ненужных дублирующихся типов, тонны легаси и неконсистентное поведение некоторых функций (типа NULL vs. INVALID_HANDLE_VALUE), но в целом оно вполне юзабельное.
Аноним 04/06/18 Пнд 07:41:34  1202365
>>1202164
Если бы оно создавалось во времена крестов, то ООП там не был бы таким непонятным.
Аноним 04/06/18 Пнд 07:47:48  1202367
двач у меня горит
lde под линукс
codeblocks отказано в доступе при коомпиляции
еклипс в жопу эклипс
cilon тормозит пиздец и тоже сука нихуя не коомпилирует
неужели придется как ввинде делать все в ручную через консоль
я понимаю что линукс это консоль
Аноним 04/06/18 Пнд 08:07:27  1202380
>>1202367
>codeblocks отказано в доступе
Запусти под sudo.
Сделай простой скрипт для компиляции, если лень тыкаться.
Аноним 04/06/18 Пнд 22:53:39  1202991
>>1201894
Хочешь сказать, каждый раз проверять всё же нужно?>>118
Аноним 04/06/18 Пнд 23:00:24  1202996
>>1202991
Да. Но если ты какой-нибудь сервис, который может упасть относительно безболезненно, ты можешь сделать обертку для malloc() с if (!ptr) exit(1) внутри, а снаружи не задумываться. Так, например, происходит в крестах, где operator new бросает исключение, которое очень редко кто-либо пытается ловить.
Аноним 05/06/18 Втр 08:44:03  1203138
>>1202130
>>1202134
Вы как-то неправильно понимаете суть TDD.

Если новая функциональность приводит к ошибкам, тесты, если они, конечно, есть, сразу же это покажут. При работе с кодом, на который нет тестов, ошибку можно обнаружить спустя значительное время, когда с кодом работать будет намного сложнее. Хорошо протестированный код легко переносит рефакторинг. Уверенность в том, что изменения не нарушат существующую функциональность, придает уверенность разработчикам и увеличивает эффективность их работы.
Аноним 05/06/18 Втр 14:38:20  1203324
>>1202996
Если память нельзя выделить, то вернутся NULL, и когда я к нему обращусь - получу segfault и аварийный выход. Segfault на столько нежелателен, что лучше добавить if ()?
Аноним 05/06/18 Втр 15:38:22  1203361
>>1203138
да я там иронизировал, просто бесит что многие опенсорсные решения вообще нахуй без тестов, тупо на хомячках ошибки вылавливают, на юзерах по сути
конечно тесты и сишникам нужны
тупо регрессию проверять (что ты и расписал)
другое дело что все же статически типизированный язык и процесс компиляции есть, плюс утилиты стат и дин анализа есть, это очень помогает, сокращает собственно объем тестов
ну, да, тоже в роли капитана очевидность выступил, да ладно
хорошо, например, организованы тесты в sqllite, если кто не знает, как организовать у себя покрытие тестами чистого сишного кода, может туда глянуть
Аноним 05/06/18 Втр 20:08:01  1203495
>>1203324
> и когда я к нему обращусь - получу segfault и аварийный выход
При обращении к нулевому указателю возникает undefined behavior. Undefined - значит может произойти все что угодно, не обязательно сегфолт. Даже если ты понимаешь, как реализована стандартная либа и как ОС выделяет память, предположения об undefined behavior нужно делать крайне осторожно или лучше не делать никаких предположений вообще. Особенно если ты считаешь, что лучше всех все знаешь. Вот тебе крайне надуманный пример с кучей "если", который, тем не менее, отлично иллюстрирует сабж: https://ideone.com/QepQ2j
Аноним 05/06/18 Втр 21:23:22  1203548
>>1203495
А можешь объяснить, что происходит в функции? В чем суть битового сдвига и как вообще мы аллоцируя память в куче изменили статическую переменную, которая вообще в регионе данных должна быть?
Аноним 05/06/18 Втр 21:47:54  1203576
>>1203548
> А можешь объяснить, что происходит в функции?
Переделал на массив байтов, чтобы было понятнее. Обращение к элементу массива ptr[index] - это синтаксический сахар для ∗(ptr + index) (используется арифметика указателей, но теперь, с байтами, это просто сложение), а учитывая что ptr == NULL, т.е., 0, то происходит ∗(0 + index), т.е., просто ∗index, т.е., так как начало "массива" у нас по адресу 0, мы просто пишем по адресу is_admin и перезаписываем его.

> В чем суть битового сдвига
Бессмысленное деление на два, ни на что уже не влияет (все равно NULL прилетит), убрал. Но вообще, есть аллокаторы, которые по техническим причинам не могут выделить больше, чем SSIZE_MAX (знаковый), а это как раз половина SIZE_MAX.
Аноним 05/06/18 Втр 22:17:15  1203589
>>1203576
Мощно, спасибо.
Аноним 06/06/18 Срд 15:33:05  1203973
сап ананасы. Если скомпилированный код на языке си преобразуется в инструкции на машинном языке то почему я могу запускать .exe файлы на одной и той же ос но с разным железом? ведь вроде как инструкции у каждого процессора разные?
Аноним 06/06/18 Срд 16:21:00  1203995
>>1203973
По большей части одинаковые.
Аноним 06/06/18 Срд 16:22:01  1203996
>>1203973
>разным железом
Под разным железом имеется ввиду очень разное железо. Например, разные архитектуры процессоров в целом или разные поколения одной и той же архитектуры, если приложение использует какие-то инструкции под конкретное семейство (вот у меня так сейчас).
Аноним 06/06/18 Срд 16:32:52  1204007
>>1203973
>сап ананасы. Если скомпилированный код на языке си преобразуется в инструкции на машинном языке то почему я могу запускать .exe файлы на одной и той же ос но с разным железом?

Потому что они компилируются по-дефолту, если флаги не указывать для 386 - 32х битные и для Athlon 64 (максимум SSE2) - 64 битные. Добавь -mavx2 -O3 и попробуй какой нибудь числодробительный код написать вроде умножения матриц, а потом запусти на процессоре, который все это дело не поддерживает - получишь ошибку времени выполнения.
Аноним 06/06/18 Срд 18:14:52  1204087
Думаю перекатиться с крестов к вам. Всё правильно делаю?
Аноним 06/06/18 Срд 18:17:23  1204091
>>1204087
Конечно, а потом на Фортран
Аноним 06/06/18 Срд 19:09:30  1204159
По заданию надо реализовать две "базы данных" и ГУИ (консольный) для манипулирования ими. Сами "базы" в принципе есть, как двусвязные списки. Саму консольную гуишку навасянить тоже не проблема. Но вот вопрос - а как между ними данные-то гонять? Вот, например, получить из одной "базы" некие данные и в нужном месте вывести. Мне их функцией вытаскивать из списка в виде строки? Или сразу структурой, чтобы удобно выводить, редактировать и обратно упихивать?
Аноним 06/06/18 Срд 19:11:54  1204162
>>1204087
>Всё правильно делаю?
Ну если ООП не твое, то да.
Аноним 06/06/18 Срд 19:16:33  1204166
>>1204159
SQLite юзай
Аноним 06/06/18 Срд 19:25:34  1204171
exercismunity01.png (183Кб, 1440x900)
exercismunity02.png (560Кб, 1440x900)
>>1202011
>>1202130
>>1202134
>>1203138
>>1203361

Ну вот у ребят из exercism.io тесты на неком фреймворке Unity.
http://exercism.io/languages/c/about
http://www.throwtheswitch.org/unity/

Выглядит вполне читаемо.

>>1202011-рубист-на-районе
Аноним 06/06/18 Срд 19:41:00  1204180
>>1204171
> valgrind
-fsanitize
Аноним 06/06/18 Срд 20:17:04  1204206
>>1204180
https://github.com/exercism/c/issues
https://github.com/exercism/c/issues/239
https://github.com/exercism/c/pulls
Аноним 07/06/18 Чтв 11:57:26  1204535
>>1204162
Писал довольно долго на плюсах на уровне "немного лучше залётного ньюфага", потом по работе понадобилось писать на чистой сишке — тогда-то я и понял, что ооп нахуй не нужно само по себе как стандарт, а только в тех случаях, которые этого требуют. И когда пишу на сишке , то прям очень открыто и чисто понимаю, почему в плюсах те или иные вещи сделаны/переделны/добавлены.
Аноним 07/06/18 Чтв 14:33:29  1204688
>>1197576
дядь про скобки не забывай фигурные. все что должно выполняться в цикле обязательно должно быть в фигурных скобках. да это си а хули ты хотел, чтоб компилер по табуляции тебе определил что входит в тело а что нет? программа подсчета символов содержит ошибку после скобки в for не нужна точка с запятой. Если не шаришь в точках следования то лучше читай прату для начала.ВДУМЧИВО
Аноним 07/06/18 Чтв 15:17:22  1204729
>>1204688
> все что должно выполняться в цикле обязательно должно быть в фигурных скобках
Если в теле одна строка, как в примерах дяди, то скобки не нужны для тела условия и тела цикла. Всё у него правильно.
Аноним 07/06/18 Чтв 15:18:14  1204731
Хотя у него там ; после фора лишняя.
Аноним 07/06/18 Чтв 15:52:55  1204767
>>1204729
>Всё у него правильно.
Посмотри ещё раз.
Аноним 07/06/18 Чтв 15:53:27  1204770
>>1204729
>Если в теле одна строка, как в примерах дяди, то скобки не нужны для тела условия и тела цикла
На деле так писать - пидорство.
Аноним 07/06/18 Чтв 16:35:42  1204816
>>1204770
Согласен, скобки лучше не опускать, понижает читаемость.
Аноним 07/06/18 Чтв 17:07:11  1204848
>>1204816
Особенно когда там вокруг пачка #ifdef, затем после условия скобкок нет, но есть else, после которого блок уже в скобках. Получается полный пиздец, по три раза перечитываешь.
Аноним 08/06/18 Птн 18:47:07  1205784
3123.png (161Кб, 1280x1024)
создаю нахуй массив из 5 элементов а он блять все 8 элементов хранить может нихуя себе че за хуета. хелпуйте. или компилер рофлит
Аноним 08/06/18 Птн 18:52:05  1205798
>>1205784
Ну так лол, этот массив не инициализирован никак, а ты printf печатает %s до '\0'
Где там она встретит нуль, дело случая.
Аноним 08/06/18 Птн 19:40:48  1205853
>>1205798
Консоль чекай, я задаю ввод из 6, 7, 8 символов и массив инциальзируется. Спрашивается откуда компилер высрал еще несколько элементов?
Аноним 08/06/18 Птн 19:47:32  1205857
>>1205853
А, scanf не заметил.
Ну так scanf тебе ничего не проверяет.
Сколько её дают, столько и пишет.
Аноним 08/06/18 Птн 20:09:29  1205866
>>1205857
так а почему в массив то она это все пишет? ведь вроде как массив ограничен пятью элементами, а тут выходит что не 5 а все 8.
Аноним 08/06/18 Птн 20:12:15  1205869
>>1205866
Ты ей передаёшь указатель на a[0].
До размера массива никому дела нет в этом языке вообще никогда, нигде и ни при каких условиях.


Аноним 08/06/18 Птн 20:44:29  1205895
>>1205869
> никому дела нет в этом языке вообще никогда
Есть sizeof. В scanf() можно указать максимальный размер буфера: %4s запишет в буфер не более четырёх символов (плюс пятый \0).
Аноним 09/06/18 Суб 09:15:38  1206120
>>1202367
Тру пацаны в емаксе ебашат. Думаешь Торвальдс ядро в visual studio писал?
Аноним 09/06/18 Суб 09:43:10  1206126
2ch, правильно ли я понимаю что если процессор 3ghz, то он может выполнить 3 миллиарда ассемблерных инструкций в секунду?
Аноним 09/06/18 Суб 09:45:43  1206127
>>1205784
у тебя массив из 5 симовлов, ты гарантировал системе, что эти 5 байт - твои и ничьи. Потом ты указал scanf, что можешь принять строку произвольной длины, а можешь только 5 символов, но вот в чём проблема: каждая строка на конце должна иметь \0, т.е. ты сканируешь не 5 символов, а 6, из-за чего последний шестой начинает храниться в следующем байте, который как-бы не твой. Чтобы такого говна не было, нужно написать %4s где 4 - длина массива - 1
Аноним 09/06/18 Суб 09:53:45  1206128
>>1202367
Qt Creator же
Аноним 09/06/18 Суб 11:09:27  1206154
>>1206126
> 2ch, правильно ли я понимаю что если процессор 3ghz, то он может выполнить 3 миллиарда ассемблерных инструкций в секунду?

Нет, неправильно понимаешь.

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

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

3) Оператива (а не код) является главным тормозом современных процессоров - если процессор не находит данные в своих кешах и обращается к оперативке, то он превращается в убертыкву в этот момент и его мегагерцы в этот момент можно смело делить на 100. И именно поэтому интел победил своих конкурентов - за счет внедрения сложных предсказателей загрузки данных/ветвления/индексации в железо.
Аноним 09/06/18 Суб 11:12:45  1206156
>>1206154
> сложных предсказателей загрузки данных/ветвления
И породив 1000 и 1 дыру в своих ЦП.
И кого он подебил именно? Ты имеешь в виду, что x86-64 подебила конкуретнов?
Аноним 09/06/18 Суб 11:18:31  1206157
>>1206156

Да, причем даже собственный итаниум от интела. Мипс, помер, спарка - все их пропрочили как "убийцу x86" и все сдохли.
Аноним 09/06/18 Суб 11:20:23  1206159
>>1206157
А про армы ты деликатно промолчишь?
Аноним 09/06/18 Суб 11:21:58  1206161
>>1206159
>А про армы ты деликатно промолчишь?

Вот армы могут, да, но пока им силенок в мире блоатварного говнокода не хватает.
Аноним 09/06/18 Суб 11:23:45  1206162
>>1206161
>Вот армы могут, да, но пока им силенок в мире блоатварного говнокода не хватает.

Вот кстати главный грех интела - он приучил людей, что можно писать блоатварный говнокод на языках высокого уровня и не париться - волшебный "приборчик" порешает.
Аноним 09/06/18 Суб 11:23:51  1206163
Хочу погромировать для Пневматических Кампутеров на ПневмоСи.
Аноним 09/06/18 Суб 11:25:08  1206164
>>1206163
>Пневматических Кампутеров

Аналоговых или цифровых?
Аноним 09/06/18 Суб 11:25:37  1206165
>>1206162
>"приборчик" порешает.

Клевый мемас, возьму на вооружение.
Аноним 09/06/18 Суб 11:27:53  1206168
>>1206164
>Аналоговых или цифровых?
Пневматических, работающих на сжатом воздухе
Аноним 09/06/18 Суб 11:32:31  1206170
>>1206168
>Пневматических, работающих на сжатом воздухе

Это понятно. Они были и аналоговые (закон бернулли, эффект вентури), и цифровые (Эффект Коанда). Ты про какие?
Аноним 09/06/18 Суб 11:33:28  1206171
>>1206170
>Эффект Коанда
Вот про эти
Аноним 09/06/18 Суб 11:34:38  1206172
>>1206171
з.ы. я просто представляю как мог бы выглядеть ПневмоСи, такой стимпанк получается, кек.
Аноним 09/06/18 Суб 11:36:54  1206174
>>1206171

Берешь конпелятор и компилируешь. Нет компилятора - тогда сюда:

https://kristerw.blogspot.com/2017/08/writing-gcc-backend_4.html
Аноним 09/06/18 Суб 11:38:09  1206175
>>1206174
Там программатор выглядел бы как механический орган, а программа бы была бы типа перфокарт вставляемых в него.
Аноним 09/06/18 Суб 11:38:44  1206176
>>1206172
>з.ы. я просто представляю как мог бы выглядеть ПневмоСи, такой стимпанк получается, кек.

Это обычные цифровые устройства. Сами эти девайсы можно на том же верилоге писать спокойно.

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

Код для такого пневмопиха можно писать на сях без изменений.
Аноним 09/06/18 Суб 11:40:36  1206177
>>1206175
>Там программатор выглядел бы как механический орган, а программа бы была бы типа перфокарт вставляемых в него.

Ты имеешь в виду терминал? Ну как у эвм на дискретных элементах он бы был. Пневмонику как бы достаточно компактную можно сделать - размером с pdp11 за вычетом компрессора. с ячейками раземром 5х5мм.
Аноним 09/06/18 Суб 11:42:12  1206178
>>1206177
>размером с pdp11 за вычетом компрессора. с ячейками раземром 5х5мм.
Клево и еще механический дисплей, как раньше в аэропортах табло расписаний было.
Аноним 09/06/18 Суб 11:44:23  1206181
>>1206176
>Это обычные цифровые устройства. Сами эти девайсы можно на том же верилоге писать спокойно.
Ну у тебя часть на пневмо, а часть электронная, а я имею ввиду полностью все без электроники, механика и пневматика.
Аноним 09/06/18 Суб 11:50:19  1206185
изображение.png (988Кб, 993x1000)
>>1206181
>Ну у тебя часть на пневмо, а часть электронная, а я имею ввиду полностью все без электроники, механика и пневматика.

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

А так - все так же как и в эвмах допекарной эпохи - тумблерами/галетой (пикрил) пишем первый компилятор ассемблера, на ассемблере уже с помощью печатающего терминала пишем на ассемблере макроассемблер, на нем пишем все остальные языки высокого уровня. Никаких принципиальных/технических отличий от древних каменных эвм, кроме производительности, обусловленной механическими свойствами рабочего тела не будет.
Аноним 09/06/18 Суб 11:57:08  1206187
dreadnaught.jpg (33Кб, 364x461)
>>1206185
охуенчик
Аноним 09/06/18 Суб 12:56:14  1206214
>>1206127
понял. спасибо
Аноним 09/06/18 Суб 13:28:15  1206230
>>1205895
>sizeof
Макро времени компиляции, ага.
Аноним 09/06/18 Суб 15:19:30  1206311
>>1206162
Что мне мешает написать говнокод на высокоуровневом языке и скомпилировать его для arm?
Аноним 09/06/18 Суб 16:33:23  1206373
Как написать кроссплатформенное мультипоточное приложение на С? threads.h в glibc не завезли
Аноним 09/06/18 Суб 16:35:02  1206375
>>1206373
> threads.h в glibc не завезли
Surprise motherfucker
Аноним 09/06/18 Суб 16:51:33  1206397
>>1206375
И чё, единого кроссплатформенного способа нет?
Аноним 09/06/18 Суб 17:00:11  1206407
>>1206373
Это вообще C?
Аноним 09/06/18 Суб 17:02:39  1206408
>>1206373
Хз, OpenMP-зазывалы его позиционируют как кроссплатформенный.
Синтаксис, конечно, уродский. Трясет просто от этих прагм.
Зато переносимо, причём в некоторых случаях собрать можно будет даже на компиляторе без поддержки OMP, ибо прагмы проигнорируются (это если сама структура программы позволит, конечно)
Аноним 09/06/18 Суб 19:27:58  1206591
>>1206373
> threads.h в glibc не завезли
Есть 3rd-party обертки вокруг pthreads. Используй их, а когда в гцц, наконец, реализуют стандарт полностью - выкинешь.
Аноним 09/06/18 Суб 19:45:40  1206603
Посоны, в сишечке есть дефолтный пакет для разреженных матриц?
"Дефолтный" в смысле как лапак для обычных. То есть любой человек, занимающийся матричными вычислениями, почти наверняка будет использовать его и блас.
Аноним 09/06/18 Суб 20:09:35  1206615
>>1206591
pthreads же только для unix систем ведь так?
Аноним 09/06/18 Суб 20:10:29  1206618
>>1206615
Для POSIX-compilant систем, не?
Аноним 09/06/18 Суб 20:10:51  1206619
>>1206618
> compliant
Аноним 09/06/18 Суб 20:16:12  1206625
>>1206615
> pthreads же только для unix систем
Есть в MinGW.

Алсо, для винды тоже есть легковесные нативные реализации threads.h. Вот, например, из glfw: https://github.com/glfw/glfw/blob/master/deps/tinycthread.c
ПЕРЕКАТ Аноним # OP  09/06/18 Суб 20:19:01  1206627
>>1206626 (OP)
>>1206626 (OP)
>>1206626 (OP)
>>1206626 (OP)
>>1206626 (OP)
Аноним 10/06/18 Вск 04:58:52  1206895
>>1189727
Смотрите-ка, залетный студент, путающий термины, пытается рассказывать про области применения сишки


Топ тредов
Избранное