Этого треда уже нет.
Это копия, сохраненная 3 апреля 2016 года.

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

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

Что читать:

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

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

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

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

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

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

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

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

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

Stephen G. Kochan "Programming in C (4th Edition)" (2014)

Jon Erickson "Hacking: The Art of Exploitation, 2nd Edition" (2008)
Анон из предыдущего треда рекомендует например, в качестве примера применения Си на практике.

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

- https://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/
- https://arhivach.org/thread/140570/

Сурс шапки: http://piratepad.net/bJ1SdmkZyu
#2 #629723
О! Уважаю, браток.
#3 #629812
Можно коротко преимущества С11? Что завезли? Я проспал этот релиз полностью
>>629823
#4 #629823
>>629812
треды
_Static_assert()
Плюшки из с99

Главное что с11 поддержали, нормально. А так то ничего нового, просто стандартизировали/закрепили старое. Короче с99 по нормальному.
>>629885>>629965
#5 #629828
Кстати, inline система из c99 перекатилась?
>>630463
#6 #629885
>>629823
Околошаблонные макроопределения препроцессора.
#7 #629965
>>629823
О, треды в стандартной библотэке? Годнота, спасибо.
>>630083>>630463
#8 #629984
Как вызвать провал конвейера?
#9 #630083
>>629965
Только где достать мануал по их использованию?
>>630301>>630676
#10 #630301
>>630083
Там почти полная копия pthreads. Так что можно просто пролистать соответствующий раздел стандарта, и всё сразу станет понятно в общем-то. Если всё ещё непонятно, то изучать pthreads тогда, по ним инфы навалом.
#11 #630438
static void
parse_tree (FILE f, NBTree root)
{
int h;
char tag_line, tag;
int meta = hash_tag ("meta"),
doctype = hash_tag ("doctype"),
title = hash_tag ("title"),
dl = hash_tag ("dl"),
dd = hash_tag ("dd"),
dt = hash_tag ("dt"),
h1 = hash_tag ("h1"),
p = hash_tag ("p"),
a = hash_tag ("a");

while ((tag_line = read_tag (f)) != NULL)
{
if (is_commented_tag (tag_line))
continue;

tag = get_tag_name (tag_line);
h = hash_tag (tag);

if (h == meta) {

} else if (h == doctype) {

} else if (h == title) {

} else if (h == dl) {

}
}
}

Можно ли такую простыню как-то сократить? Можно ли грамотно в такой ситуации switch по строкам как-то использовать?
#11 #630438
static void
parse_tree (FILE f, NBTree root)
{
int h;
char tag_line, tag;
int meta = hash_tag ("meta"),
doctype = hash_tag ("doctype"),
title = hash_tag ("title"),
dl = hash_tag ("dl"),
dd = hash_tag ("dd"),
dt = hash_tag ("dt"),
h1 = hash_tag ("h1"),
p = hash_tag ("p"),
a = hash_tag ("a");

while ((tag_line = read_tag (f)) != NULL)
{
if (is_commented_tag (tag_line))
continue;

tag = get_tag_name (tag_line);
h = hash_tag (tag);

if (h == meta) {

} else if (h == doctype) {

} else if (h == title) {

} else if (h == dl) {

}
}
}

Можно ли такую простыню как-то сократить? Можно ли грамотно в такой ситуации switch по строкам как-то использовать?
>>630559
#12 #630463
>>629828
Да, но inline как был хинтом, так и остался. Если нужно обязательно заинлайнить что-то, используй расширения своего компилятора.

>>629965
Треды, как и многие другие библиотечные фишки C11 еще не везде поддерживаются, поэтому пока писать код только на тредах C11 я бы не стал. А вот то, что язык теперь официально знает про многопоточный код и умеет в нативные thread-local переменные - это охуенно.
#13 #630540
Решил написать базу данных
@
Сделал выделение памяти, связывание её, сохранение, загрузка
@
Как делать структуры? Сильно специфично. Как делать поиск. Сильно специфично.
@
Сижу пишу интерпретатор своего байт кода.
@
Придётся придумать человеческий код и его компиляцию в байтовый.
@
Заебись сел.
>>630755
#14 #630559
>>630438

>Можно ли такую простыню как-то сократить?


Да, использовать язык более высокого уровня.
>>630588
#15 #630588
>>630559
не могу, gtk+ удобен только на чистом C
>>630663
#16 #630663
>>630588
Ты пишешь парсер с использованием gtk+? Больной ублюдок. Открой уже для себя perl. С ним, я уверен, ты сократишь свою программу до одной строчки.
#17 #630676
>>630083
http://en.cppreference.com/w/c/thread
из всех libc поддерживаются только в musl правда.
37 Кб, 517x457
#18 #630679
status — служебное слово для работы с циклами? Как он получает инфу от scanf, что что-то пошло не так? Код на пике.
>>630702>>630704
#19 #630702
>>630679

status ты объявляешь как int, какое нахер служебное слово.

Функция scanf() возвращает число успешно считанных элементов.
Если операции считывания не происходило, что бывает в том случае, когда вместо ожидаемого цифрового значения вводится какая-либо буква, то возвращаемое значение равно 0.

Для выхода можно использовать не только q, а любую другую БУКВУ
#20 #630704
>>630679
Не знаешь, что происходит - пиши printf

#include <stdio.h>
#include <stdlib.h>

int main()
{
long num;
long sum = 0L;
int status;
printf("Please enter on integer to be summed ");
printf("(q to quit): ");
status = scanf("%ld", &num);
while(status == 1 ){ // == means "is equal to"
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
printf("status = %i ", status);
}
printf("Those integers sum to %ld.'n", sum);
return 0;
}
#21 #630755
>>630540
Хорошая затея, но еще лучше было бы патчи в SQLite слать.
>>631501
#22 #631501
>>630755
Я слишком туп для такого дерьма, я и обычными базами пользоваться не умею, просто васяню. главная задачи - избавить себя от геморра связывать данные. Потому что код становится жутким.

Но мысль всей хрени в чём, данные - не типизованы, главно чтоб их получить, нужно пройтись по массивам(хеш таблицы, например)/спискам/деревьям и прочие. То есть какая-то такая, простая система. Меня больше волнует фрагментация...
>>666057
#23 #631518
>>629715 (OP)
Аноны, помогите пожалуйста, нужно написать GUI на C с полем для ввода и выводом графика в реалтайме, как это сделать? На все есть 6 часов, с GTK+ раньше вообще не работал.
>>631529>>631604
#24 #631529
>>631518

> как это сделать


да какт)
#25 #631604
>>631518

> На все есть 6 часов, с GTK+ раньше вообще не работал


Если ты раньше не работал с графичискими тулкитами и учитывая то, что ты тратишь время здесь... Ты не осилишь.
>>631813
#26 #631614
есть структура вида
структура меню{
структура меню *ссылканафункцию();
}менюшка;
ее инициализация вида
менюшка = {&смехкартинки};

Единственный вопрос: как вызвать эту функцию.
>>631617>>631661
#27 #631617
>>631614
(*Менюшка.ссылканафункцию)();
>>631661>>633771
#28 #631661
>>631614
>>631617
Дереференсить указатели на функции не обязательно. Можно просто менюшка.ссылканафункцию().
>>633771
#29 #631813
>>631604
Я даже WinBGIm не могу подключить, делаю все по инструкции, а он мне выдает undefined reference.

Может все же есть какие-то небольшие библиотеки под мои нужды?
3 Кб, 1604x237
83 Кб, 604x381
#30 #632397
Аноны, объясните дебилу, почему у меня kbhit() не работает? Нажимаю любые клавиши на клавиатуре, а оно все равно продолжает выводить строку.

#include <stdio.h>
#include <conio.h>

main()
{
while (!kbhit())
printf("You haven't pressed a key.\n");

return 0;
}
>>632410
#31 #632410
>>632397
Потому что это нестандартное и неподдерживаемое говно?
ОС, компилятор?
>>632420
#32 #632420
>>632410

>Потому что это нестандартное и неподдерживаемое говно?


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

>ОС, компилятор?


Windows 8 Pro x64, MinGW

Попробовал решение с сайта майков: https://msdn.microsoft.com/en-us/library/58w7c94c - тоже не работает.
#33 #632454
>>632420

>Но ведь это же стандартная библиотека на C, везде, где я смотрел, предлагают или использовать kbhit()


посмотри в K&R
#34 #632461
>>632420
Это нестандартная библиотека, доставшаяся в наследство со времен Borland C. Если тебе всего лишь нужно прервать программу, сделай: http://ideone.com/v3sGZ7 - будет мммаксимум портабельно.

А вот что касается проблем с kbhit - там может быть все, что угодно. Начиная от кодировки консоли по умолчанию и заканчивая режимом ввода. Если хочешь разбраться, изыскания можно начать отсюда https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx Алсо, MinGW использует CRT студии, к ней есть исходники - посмотри, как kbhit реализована.
110 Кб, 500x500
#35 #633744
Антон, как реализовать проход через массив, что приходит аргументом в функцию без того, чтоб всегда передавать дополнительным аргументом количество элементов в массиве?

void foo(int bar[], int bar_length){
/ fancy loop over the array /
}
>>633749
#36 #633749
>>633744
Лол, никак. Или массив + длина, или пара указателей start end, по которым итерируешься.

Если в массиве хранятся указатели - можно делайть while not null и всегда массив нулем завершать. Как со строками короче.
>>633768
#37 #633768
>>633749
Ну и третий вариант - написать динамичские массивы себе, если есть необходимость. Минимально, это будет структура, содержащая: указатель на данные, текущий размер массива, размер выделенной памяти (чтобы не перевыделять память с добавлением каждого элемента, а иметь некоторый запас).
#38 #633771
>>631661
>>631617
А если я хочу передать аргумент, то это должно выглядеть как менюшка.ссылканафункцию(аргумент) или нет?
>>633791
#39 #633785
Есть несколько разных структур одинакового вида. Каким образом можно пройтись по ним всем в цикле?
>>633791
#40 #633791
>>633771
Да, как обычный вызов функции: менюшка.ссылканафункцию(аргумент). Но в самой структуре, в указателе ссылканафункцию ты должен заранее указать тип этого аргумента.

>>633785
Сложи указатели в массив и касти указатель к нужному типу структуры. Или объясни подробнее, зачем тебе по разным структурам ходить в одном цикле.
>>633793
#41 #633793
>>633791
Да, понимаю, что массивом проще. Делаю поиск по слову среди структур с одинаковой структурой, но разным содержанием (например, книги и машины итп)
>>633797
#42 #633797
>>633793

> например, книги и машины


Ты тот анон, который БД пилит? У тебя вообще как данные хранятся? По рандомным структурам в рандомных местах пройтись for-ом можно только уложив указатели в массив. Если у тебя используется какая-то структура данных (а должна!), которая содержит структуры или указатели на них, то расскажи, какая.
>>633826
#43 #633802
>>629715 (OP)
Стало быть, для С обязательно нужно линубх ставить?
#44 #633804
>>633802
В виртуальную машину поставь Xubuntu 14.04 LTS.
>>633808
#45 #633806
>>633802
MS Visual C в комфортности работы с кодом один из лидеров + имеет бесплатную версию с кучей плюшек искоропки. Безусловно, если ты планируешь после изучения языка закатиться во встраиваемые системы, линукс изучить придется. Но работать можно и на виндовс, просто используя кросскомпиляцию. Главное не ставь средство работы как самоцель, просто программируй много и часто, смотри как работают другие, читай книги и тут же практикуй, иначе ты никогда не продвинешься.
>>633811
#46 #633808
>>633804
Не советуй говна кушать, пусть сразу как вторую ось поставит (тем более, что сейчас для этого пердолится даже не надо).
>>633815
#47 #633811
>>633806
мильпардон, MS Visual C, это нужно качать визуал студио? Я пытался найти просто msvc, не получилось. Спасибо за разьяснения кстати
>>633822>>634367
#48 #633815
>>633808
Окажется у него видюха нестандартная и привет, очередной бугуртыш. Пусть в виртуалке сначала опробует.
>>633821
#49 #633818
>>633802
Нет, конечно. Почему ты так решил? Какой-нибудь code::blocks в винде работает так же, микрософт вон конпелятор делает, gcc можно прикрутить, никаких проблем
>>633819
#50 #633819
>>633818
Полно проблем. Вместо sudo apt-get install libчто-тотам-dev, вечный пердолинг и, как следствие, любовь к самописным костылям.
>>633821>>633823
#51 #633821
>>633815
Отключит и будет пользоваться встроенкой, проблем не много.
>>633819
Вот это вот двощую.
>>633824>>633828
#52 #633822
>>633811
Visual Studio Express тебе хватит просто за глаза. Можешь скачать с торентов видеокурс по Си от "Специалист"а, вроде. Там довольно быстро но достаточно полно расжевывается суть языка и его основные особенности.
>>634367
#53 #633823
>>633819
В микрософтовской студии всё из коробки, делать нихуя не надо. Впрочем, я сам линуксоид с недавних пор, но по другой причине
#54 #633824
>>633821

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


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


>посоны где посмотреть настройки графической системы на хуйнянейм


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


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



Линукс хорошая вещь, но хороша ложка к столу. Совершенно ни к чему ебаться с новой и неизвестной системой, если на старой можно решать эту же задачу с таким же результатом.
>>633830>>633838
#55 #633826
>>633797

> БД пилит


Не, нея, я долго всё обдумывал и сопоставлял. В итоге отказался от байт-кода, потому что будет некрасиво в коде (отдельным процом же лишь опция, эксперимент в будущем), а если пытаться красиво, например на макросах, то ебли дай боже. Поэтому я нашёл для себя оправдание всё это (эту хуйню) оборачивать в функции - гибкость, чтоб можно было указатели иметь и в виде смещения от начала "хипа" и в виде прямых указателей, с конвертацией в разные варианты, int16 int32 int64 - короче занимаюсь хуйнёй.

Но зачем типизировать данные, я до сих пор не понимаю. Ты же типа их туда создавал, тебе виднее что они есть. Хуй знает.
>>633829>>633832
#56 #633828
>>633821
Проблем МНОГО и не еби мозг. Виртуалка для обучения - самое то.
#57 #633829
>>633826

>на макросах


inline static ф-ии, не?
>>633834
#58 #633830
>>633824
Да не будет того же результата. Под виндой удобно разрабатывать только в стиле проприетарного софта 90-х годов, когда зависимостей у твоего кода мало и они все куплены.
>>633833
#59 #633832
>>633826

>Но зачем типизировать данные, я до сих пор не понимаю.


Ебаный стыд.
>>633834
#60 #633833
>>633830
Что за хуйню ты несешь, наркоман свободолюбивый. Человек хочет НАУЧИТЬСЯ программировать, а не ебашить корпоративный софт.
#61 #633834
>>633829
Яш не про это, про байткод к условной функции fudb_inter(uintp* pcod) - понятно там строчка, все дела... Ты понял.

>>633832
Что не понятно, ты же когда на хипе память выделяешь, не заставляешь систему хранить тип твоих данных?
>>633835
#62 #633835
>>633834

>fudb_inter(uint8 pcod)


фикс*
#63 #633838
>>633824
Но ведь это актуально только если ты пердолишь графеновые приложения или в игорей гоняешь
#64 #633849
Накину вам, аморфным, хуйню - повод оскорбить меня, или не сможете? http://pastebin.com/MDfcVzsb
>>633852
#65 #633852
>>633849
Зачем нужны макросы, если есть инлайн функции?
>>633858>>633865
#66 #633853
Вот, ещё кусок угарной хуйни http://pastebin.com/BE1nvvjK - ебать угораю с себя же.
>>634367
#67 #633858
>>633852
Ну зачем ты такой тупой. Как ты решишь проблему порядка байт, через инлайны? Такой ты парень, думаю даже добрый.
>>633925>>634402
#68 #633865
>>633852
Да не, я понял, кончено, просто ты гонишь за оверхед в рантайме, который может обсчитываться тупо в препроцессинге.

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

Или у кого есть что подискутировать?
#69 #633925
>>633858
не вижу проблемы, объявление точно такое же, зато легко модернизируется и контролируется по коду
>>633947
#70 #633947
>>633925
Что за глупости. А менять функционал ты будешь через IF ?

Но то ладно, скажи лучше, что там модернизируется и контролируется.

Мы же про порядок байт всё ещё?
#71 #634003
Репост из общего треда
Анон, нужна помощь ну просто пиздец, спросить больше не у кого.
http://rghost.ru/79CSjsxQz
Там два файла, один список бинарный, другой Си.
Необходимо при нажатии на клавишу 5 вывести самый старый инструмент, затем предложить редактирование его даты. (Волнует именно сортировка).
Моих познаний не хватает, три дня как за язык сел, и сразу прошу прощения за кривое оформление кода.
>>634023>>634032
#72 #634020
Что курить для создания своих демосцен?

Имеется нормальное знание асм и хорошее знание си.
>>634023>>634367
#73 #634023
>>634020
Можешь для начала тут глянуть :3 >>634003
#74 #634032
>>634003

>Необходимо при нажатии на клавишу 5 вывести самый старый инструмент


Очередь с приоритетом.
>>634049
#75 #634049
>>634032
Как это реализовать?
Мне надо сортировать бинарный файл со структурой по нескольким полям (день, месяц, год). Мне нужно прочитать файл в массив структур, а потом поэтапную сортировку по дате? Или как?
>>634058>>634064
#76 #634058
>>634049
Конвертни бинарь в текстовый файл, а его уже отсортируй блжад стандартными консольными утилитами
#77 #634064
>>634049
Прочитать в массив структур, создать массив указателей (или порядковых номеров, как угодно), и затем второй массив отсортировать.
#78 #634198
Как правильно написать функцию, чтобы она поменяла местами значения в структуре?

swap(tmp[x], tmp[y])
Необходимо поменять местами x и y
>>634212>>634219
#79 #634212
>>634198
оператор замены местами, вроде как ^=; пройдись просто по всем индексам и всё.
#80 #634219
>>634198
Если надо поменять ВСЕ значения в структуре, может, просто обменять указатели на эти структуры?
>>634252
#81 #634236
>>634212
Хуйню сказал, если tmp[x] == tmp[y] то ты получишь surprise mothefucker.
>>634252
#82 #634252
>>634212
>>634219
>>634236

void old(FILE tf)
{struct tov tmp_buffer[10];
int r=9, j;
clrscr();
tf=fopen("spisok.dat","rb+");
for (int k=0; k<=r; k++)
{fread(&tmp_buffer[k],sizeof(t1),1,tf);
}
for (k=0,j=1; k<=r;k++)
{printf("\n%3d %12s %2d.%2d.%4d",j, tmp_buffer[k].name, tmp_buffer[k].d, tmp_buffer[k].m, tmp_buffer[k].y);
j++;
}
struct tov
tmp[10];
for(int h=0;h<12;h++)
{tmp[h]=&tmp_buffer[h];
}
for(int t = 0; t < r; t++)
for(int l = t + 1; l < r;l++)
{
if(tmp_buffer[t].y < tmp_buffer[l].y)
swap(tmp[t], tmp[l]);
else
if(tmp_buffer[t].y == tmp_buffer[l].y)
{
if(tmp_buffer[t].m < tmp_buffer[l].m)
swap(tmp[t], tmp[l]);
else
if(tmp_buffer[t].m == tmp_buffer[l].m)
if(tmp_buffer[t].d < tmp_buffer[l].d)
swap(tmp[t], tmp[l]);
}
}
puts ("\n The oldest item is:");
printf ("\n%12s %2d.%2d.%4d ", tmp_buffer[t].name,tmp_buffer[t].d,tmp_buffer[t].m,tmp_buffer[t].y);
getch();
fclose(tf);
}

void swap(tov a,tov b)
{
tov c=a;
a=b;
b=c;
}
Бля, как код вставлять?
[code]test[/code]
#82 #634252
>>634212
>>634219
>>634236

void old(FILE tf)
{struct tov tmp_buffer[10];
int r=9, j;
clrscr();
tf=fopen("spisok.dat","rb+");
for (int k=0; k<=r; k++)
{fread(&tmp_buffer[k],sizeof(t1),1,tf);
}
for (k=0,j=1; k<=r;k++)
{printf("\n%3d %12s %2d.%2d.%4d",j, tmp_buffer[k].name, tmp_buffer[k].d, tmp_buffer[k].m, tmp_buffer[k].y);
j++;
}
struct tov
tmp[10];
for(int h=0;h<12;h++)
{tmp[h]=&tmp_buffer[h];
}
for(int t = 0; t < r; t++)
for(int l = t + 1; l < r;l++)
{
if(tmp_buffer[t].y < tmp_buffer[l].y)
swap(tmp[t], tmp[l]);
else
if(tmp_buffer[t].y == tmp_buffer[l].y)
{
if(tmp_buffer[t].m < tmp_buffer[l].m)
swap(tmp[t], tmp[l]);
else
if(tmp_buffer[t].m == tmp_buffer[l].m)
if(tmp_buffer[t].d < tmp_buffer[l].d)
swap(tmp[t], tmp[l]);
}
}
puts ("\n The oldest item is:");
printf ("\n%12s %2d.%2d.%4d ", tmp_buffer[t].name,tmp_buffer[t].d,tmp_buffer[t].m,tmp_buffer[t].y);
getch();
fclose(tf);
}

void swap(tov a,tov b)
{
tov c=a;
a=b;
b=c;
}
Бля, как код вставлять?
[code]test[/code]
>>634261
#83 #634261
>>634252
Надо было так сделать, да?
http://ideone.com/N8mffS
>>634286
#84 #634286
>>634261

>>struct tov (звездочка) tmp[10];


>>swap(tmp[t], tmp[l]);


>>void swap(tov a,tov b)


У тебя массив структур и тебе нужно поменять их местами? тогда так:

>>void swap(tov (звездочка)a,tov (звездочка)b){


>>tov(звездочка) tmp = a;


>>a = b;


>>b = tmp;


>>}

>>634306
50 Кб, 274x604
#85 #634305
Когда функция завершена с ошибкой, что в общем случае лучше вернуть 0, 1 или -1? Есть ли какие-то правила?

То же касается и успешного её выполнения.
>>634310>>634367
#86 #634306
>>634286
Перестановка их местами у меня получилась, функция swap внизу файла описана. Мне теперь надо найденную структуру tmp[t], она же temp_buffer[t], редактировать и обратно занести в бинарный файл.
#87 #634310
>>634305
В лучшем случае для улучшения читабельности кода используют макросы вроде SUCCES, FAILURE и тд.
>>634315>>634370
#88 #634315
>>634310
Хорошая идея.
Просто когда в вузике ОС изучал, там что-то говорили, что 0, это когда норм, а 1 не норм.
>>639089
#89 #634367
>>633811
>>633822
Visual Studio 2015 Community Edition. Старые, в том числе и Express, весят меньше, но умеют нормально только в C89. Если места на винте жалко и/или не хочется ставить гигабайты непонятных программ - вообще лучше взять Pelles C до первого серьезного проекта.

>>633853
Смотришь потом в код, а там простыни вместо полутора инструкций. Интринсики тебе зачем дали? В другие конпеляторы не можешь, так хоть GCC-шные используй.

>>634305
Подход из стандартной библиотеки: 0 - success, > 0 ошибка (получится автоматически, если коды ошибок запихать в enum, а первым членом enum сделать success). Если функция должна возвращать что-то осмысленное в int, то есть вариант: < 0 ошибка, иначе что-то осмысленное.

>>634020

> Что курить для создания своих демосцен?


Любой графический API и книгу по 3D. http://www.enlight.ru/demo/faq/, demoscene.ru, http://web.archive.org/web/20110203073050/http://democoder.ru/ дальше сам
#90 #634370
>>634310

>используют макросы вроде SUCCES, FAILURE


Как они вычисляются? Или это константы?
>>634376
#91 #634376
>>634370
enum { SUCCESS, ERROR_POTRACHENO, ERROR_NO_MAMKA }
#92 #634402
>>633858

> Как ты решишь проблему порядка байт, через инлайны?


А в чем проблема-то? Все твои DBI16TOLE будут инлайн-функциями, с телом или пустыми (препроцессором обеспечишь). Алсо, необходимость в препроцессоре тоже под вопросом: компиляторы сейчас умные, и, как минимум, шланг рантаймовый тест на endianess понимает, оптимизирует до константы и затем ненужные ветки if через dead code elimination выкидывает нахуй. А если какой-то компилятор и не оптимизирует, то две инструкции на тест - нихуя не оверхед.
#93 #634474
Где можно скачать диск для книги Эриксона, чтобы загружаться на виртуалке? Перешел по ссылке из книги, и на том сайте есть ссылка на образ, но скачать невозможно.
>>634484
#94 #634484
>>634474
Попробовал. Он качается, только тупит сильно. И, может быть, у тебя браузер отобразить его пытается, а не скачать. Правой кнопкой по ссылке, сохранить как и т. д. Можешь взять какой-нибудь wget или download master.
Алсо, а зачем тебе именно их LiveCD? Поставь любую убунту, тебе хватит.
#95 #634488
>>634484

>Правой кнопкой по ссылке, сохранить как и т. д


Скачивается файл около 200 байт.
>>634492
#96 #634489
>>634484

>Поставь любую убунту, тебе хватит


Тогда так и сделаю.
#98 #634494
>>634492

>Downloads: 104,738


Нихуя себе там какиров.
>>634499
#99 #634499
>>634494
Не обязательно интересоваться какингом, чтобы читать такое. Стоит почитать, чтобы потом понимать проблемы с безопасностью в своем и чужом коде.
#100 #634544
>>632420

>Но ведь это же стандартная библиотека на C


conio.h? Нет.
>>634641
#101 #634641
>>634544

>conio.h


Это там можно угарно рисовать как будто в консоли?
>>634643
#102 #634643
>>634641
Это там getch() для удкржания соснольки)))
>>634651
#103 #634651
>>634643
А чё, getc разве неблокируемый?
106 Кб, 949x560
34 Кб, 673x340
#104 #635036
https://ideone.com/bVHv5M
Почему-то второй раз память выделяется по тому же адресу, а не как пишут в книге. Это связано с реализацией аллокатора винды? Есть у этих двух способов аллокации какие-то плюсы и минусы?
>>635041>>635078
#105 #635041
>>635036
Дочитал до конца. Теперь стало понятно.
#106 #635078
>>635036
Что это за книжка интересная такая?
>>635094>>635288
#107 #635094
>>635078
Это не самое интересное в ней. Там есть вообще охуенные примеры и теория.
>>635230
#108 #635230
>>635094
Сука, я название спросил. Мож те въебать шоб невыебулся батан
>>635244
#109 #635244
>>635230
Нет, ты будешь гореть))))
>>635285
#110 #635285
>>635244
Сук ну плиз((
Ато мамку выебу тв((
>>637890
#111 #635288
>>635078
Ну сопоставь шапку и приглашение шелла на пике, что ж как маленький-то?
#112 #635318
>>634212

>оператор замены местами, вроде как ^=


что за хуйню ты несёшь
#113 #635956
объясните дауну как в VS 2015 писать на си? там же только плюсы и шарп.
#114 #635963
>>635956
Представляешь, что плюсы это надмножество си, и пишешь на плюсах.
#115 #635970
>>635956
Создаёшь пустой C++ проект. Св-ва проекта->C/C++->Дополнительно->Компилировать как.
Или просто создаёшь файл с расширением .c
#116 #635971
>>635956
если хочется в хиккерство, а линукс мамка не разрешает устанавливать - используй онлайн машины, типа koding, c9.io и codeanywhere
>>636132
#117 #636132
>>635971

>а линукс мамка не разрешает устанавливать


Проиграл. У меня мамка считает линукс говом для шизиков-аутистов (дословно, она вообще повсюду детектирует шизиков кто хоть сколько-нибудь отличается от среднего пидорахи), потому что ей там неудобно писать отчеты и делать дипломы для детей в фотошопе. Скоро куплю себе ноут и накачу линукс.
>>636137
#118 #636137
>>636132
Так поставь как вторую ос, хуле ты.
При покупке ноута главное убедись что для него есть нормальные драйвера, иначе ты скорее админом станешь чем программировать научишься.
>>636186>>669404
#119 #636186
>>636137

>главное убедись что для него есть нормальные драйвера


В каких статьях об этом написано?

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


Тоже нормально. Тем более мне надо не учиться, а углублять имеющиеся знания.
>>636258
#120 #636258
>>636186

>В каких статьях об этом написано?


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

>ем более мне надо не учиться, а углублять имеющиеся знания.


Ну тут 2 стула: ты растёшь как хакир-погромист или растёшь как админ, одновременно делать и то и другое не намного продуктивнее, чем поотдельности.
>>636374
#121 #636374
>>636258
А еще можно не выделываться, и поставить линукс на виртуалку, винду на виртуалку и osx на виртуалку (похуй, что будет хостом, пусть даже и тот же линукс) - это даст возможность проводить различные хеккерские эксперименты без риска угробить ОС/данные. Идите-ка вы с ОС-срачем в /s/. У нас тут тредик языка, которому на ОС, проц и прочие детали похуй. По крайней мере, в теории.
>>636394
#122 #636394
>>636374

>А еще можно не выделываться, и поставить линукс на виртуалку, винду на виртуалку и osx на виртуалку


Тормозит пиздецово же. Очень раздражают легкие лаги и отрывочные движения мышки.
>>636403
#123 #636403
>>636394
Проверь, что в BIOS включена поддержка виртуализации (VTx). Проверь, что виртуалка использует виртуализацию. Даже на моем нищепк тормозит только OSX, да и то лишь слегка.
#124 #636412
Аноны посоветуйте материалы для изучения С с целью сдать ЕГЭ и попробовать свои силы в олимпиадах.
>>636422
#125 #636422
>>636412
На олимпиадах тебе не си надо дрочить.
Читай про графы, задачу на упаковку рюкзака и рекурсию.
#126 #636766
Писал ли кто на уровне где есть прерывания? Поясните как понять, или есть чё почитать?
>>636768>>636790
#127 #636768
>>636766
Для микроконтроллеров чтоле?
>>636771
#128 #636771
>>636768
Всёравно
#129 #636775
Ну как, интересней было бы на уровне драйвера линь/вин, но думаю понятней будет на контроллере - потому что у ос, как я понял, своя "прослойка".
#130 #636790
>>636766
на контроллеры - даташит лучшая книжка
#131 #636808
Господа, а здесь можно обсуждать качество говнокода? Что можно улучшить в моей реализации кучи?
https://ideone.com/lKcWqO

Глобальная переменная будет скрыта в .c-файле. Снаружи будет виден только интерфейс. Неудобство в том, что массив для перестроения в кучу надо заполнять особым образом, оставляя нулевой элемент пустым. Это очень неудобно. Можно сделать так, чтобы индексы начинались с нуля, но тогда не получится написать такие красивые байтоебские процедуры parent, left и right.
#132 #636829
>>636808

> здесь можно


Нужно.

И что это вообще за хуйня? Типо какая-то сортировка? Я уш думал тут дествительно куча
>>636846
#133 #636833
А так, хуй знает, давно забил на изучение сортировок, потому что они - ненужны, можно же модный список соорудить или там дерево.
#134 #636846
>>636829

>Я уш думал тут дествительно куча


Почему у меня не куча? Они нужны не только для сортировков, а еще для приоритетных очередей. Потом я буду наворачивать биномиальные и фибоначчиевые сливаемые кучи.

Скажу, что я делаю не так.
>>636848>>636865
#135 #636848
>>636846

>Скажу


скажи
#136 #636852
>>636808
Говнокод это хорошо.
Самый лучший код - это код, который написан быстро.
#137 #636865
>>636846
Я без понятия, говорю же - не разбираюсь в сортировках. А куча, для меня, это менеджер оперативной памяти, грубо говоря.
#138 #636975
Продолжаем кавалькаду стёба над моим кодом, http://pastebin.com/A42mrQVk - и тут я решил сделать двусвязный список, от фрибейскика вся это большебуквенность.
>>637175
#139 #637141
Посоветуйте по С что-нибудь хорошего курсов, книг, роликов для начинающих, пожалуйста.
>>637196
#140 #637159
Хочу попробовать по фану потыкать в пьюр си. "Погромированием" занимался максимум на ИКАТЭ на ЖАВЕ. Стоит ли, с чего начать?
#141 #637175
>>636975
Нахуя ты это выкладываешь? Это никто не будет читать. Тем более с твоими петросянскими наименованиями переменных (это может быть забавно для небольшого кода, но для кода из 400 строк). Свой список реализовать на коленке для простейших задач можно в 5 минут. Это не рокет сайенс. Для чего-то более качественного можно просто юзать готовые решения, типа реализации связных списков в ядре Linux, только для юзерспейса.
>>637442
#142 #637179
>>636808
Для обсуждения качества говнокода есть сайт, который первым вылезает в гугле по запросу "говнокод".
#143 #637196
>>637141
Зачем тебе си? Что ты собираешься на нем писать?
>>637274
#144 #637274
>>637196
Есть желание и потребность. Нужен для мк.
#145 #637326
>>636808
Убери xorswap, сейчас он уже неактуален т.к. код, генерируемый компилятором, получается хуже, чем "наивно" через временную переменную или банальное сложение/вычитание в случае целочисленных переменных.
>>637342>>637443
#146 #637342
>>637326
Уточню: в большинстве случаев неактуален (если ты не собираешься писать в условиях сильно ограниченной RAM или малого числа доступных регистров).
#147 #637442
>>637175

> Нахуя


Потому что могу

> готовые решения, типа реализации связных списков в ядре Linux


Ты про list.h, лол?
>>637517
#148 #637443
>>637326
Ебать, если и на сосаче нашёлся господин, доебавшийся до хакирьства. То и я могу накинуть за щёку, например отсутствием проверок на переполнение - но предпологаю, что у парина задача писать и позновать, а не дрочить на стрёме.
>>637561
#149 #637444
ладно, ладно, вот код, например поинтересней. http://pastebin.com/ZCHQLEGa
>>637518
#150 #637517
>>637442

>Ты про list.h


Да.
>>637552
#151 #637518
>>637444
комментарии на русском - это моветон
>>637552
#152 #637552
>>637517
И? Ты признвёшь, что петух?

>>637518
Мамка твоя - моветон. Толи дело острочить трапу в подезде....
>>637650
#153 #637561
>>637443

>писать и позновать


Тогда смысл пользоваться "хитрыми" битовыми приемами? Такие вещи только усложняют понимание.
Сначала код должен правильно работать, а потом уже надо начинать его оптимизировать.
>>637567
#154 #637567
>>637561
Ну начинается, тут как на формумах становится, какой-то пидорас-завсеглатый решил что нужно так, потому все должны подченится.
#155 #637650
>>637552

>И? Ты признвёшь, что петух?


При чём тут list.h из linux кернела? Я не увидел связи. Как пизда, намёками своими говоришь.
>>638296
#156 #637862
>>629715 (OP)
Почему книжка от отцов в подленнике? Дайте на рюзком.
>>637886>>638079
#157 #637886
>>637862

>7524


>не знать ангельского


))
#158 #637890
sage #159 #638079
>>637862
На ebdb.ru и btdigg.org можно найти и эту, и все остальные.
#160 #638296
>>637650
Без понятия о чём ты, отстань от меня, захожу на двущь и тут меня унижают и притесняют. Пользуйся своим list.h и дай другим пожить.
>>638342
#161 #638342
>>638296
Да ты наркоман походу.
#162 #638520
В чем на линуксе кодить кроме emacs/vim? В Anjuta?
>>638653>>638682
#163 #638653
>>638520
CLion, Eclipse CDT - если не пугает монструозность и нужно максимум функционала IDE.
Code::blocks, gnome builder, kdevelop и прочее - из легкий и минималистичных.
Если хипстер дохуя - любой атом/саблайм с плагинчиками.
>>638717
#164 #638682
#165 #638717
>>638653

>gnome builder, kdevelop


>легкий и минималистичных.



У них зависимостей 10Гб и надо ставить гномы/кеды.
Для xfce не подходит.
>>638745>>688928
#166 #638745
#167 #638763
Пацаны, а что вы пишете на чистых сях? Мне просто интересно, чья деятельность наиболее безблагодатна: ФПвноедов или байтоебов.
>>638785>>638802
#168 #638785
>>638763
Ну системную хуету, что ещё писать можно. Местные вон ОС свою пилят, где-то анончик здеся БД делал, кто-то в реверсинг вкатывается. Компилякторы ещё всякие для мастурбации, драйвера пишущие хэлло сосач до загрузки ядра.

>чья деятельность наиболее безблагодатна: ФПвноедов или байтоебов.


Ну ОСями, драйверами, интерпритаторами, дебаггерами и прочим кто-то же пользуется, в отличие от кластеров мультипарадигм.
>>638795
#169 #638795
>>638785
Есть годные книги по системщине? Не теоретик-Танненбаум.
>>638800
#170 #638800
>>638795
Я конечно всё понимаю, но пока ты не скажешь что и для чего тебе нужно, посоветовать можно только его или гугл.
>>638805
#171 #638802
>>638763
Я лично не пишу, я в основном читаю.
#172 #638805
>>638800
Например, для написания и подмены драйверов.
>>638826
#173 #638826
>>638805
Google -> Английския язык учебник
Google -> Язык C учебник
Google -> Написание драйверов для %os_name%
Google -> Написание вирусов для %os_name%
Google -> Ассемблер %processor_type%
Google -> Реверс инжиниринг
Google -> Исходники драйверов %os_name%
#174 #639024
Как извлечь максимум профита из книги Танненбаума "Архитектура компьютера"? Перечитывать главы, выписывать что-нибудь или что с ней делать для усвоения материала? Выписывать все интересующее заебешься.
#175 #639047
Смотрите, что нашел.
http://ru.stackoverflow.com/questions/75754/Защита-памяти-при-сегментной-организации?rq=1

Что делать с рандомизацией стека?
#176 #639089
>>634315
Правильно говорили.
#177 #639090
>>634484

> Алсо, а зачем тебе именно их LiveCD? Поставь любую убунту, тебе хватит.


Там только хитрый косяк будет, если на 64-разрядах запустишь. Регистры будут другими. И команды при отладке тоже малость отличаться будут.
#178 #639106
>>639047
Блять, ну контейнер заведи, или найди модный адрес в системе.
#179 #639108
>>639109>>639197
#180 #639109
>>639047
>>639108
http://stackoverflow.com/a/21737175 или это, для fine-grained контроля
>>639197
#181 #639197
>>639108
>>639109

>The command to manipulate personality flags is setarch


То есть надо попросить полюзывателя "отключи-ка рандомизацию, оч хочу тебя хакнуть"?
>>639310>>639325
#182 #639310
>>639197
чёт я тут не врубился, ты, мразь, хочень провести тесты или хочель хакирить? может быть нты не сюда зашёл, или даже скорей не смог прочитать тему до конца? может мне за тебя прочитать, и например, пояснить какой адресс выставлять на возврате? сдохни сука
#183 #639325
>>639197

>полюзывателя

#184 #639341
Для каких исключительных задач подходит С?
>>639349
#185 #639349
>>639341
очевидное системное программирование и ебля с микроконтроллерами.
#186 #639357
Да кому нужен этот С.
Пойду на трамайщика обучаться.
#187 #640422
Помогите вернуть веру, я очень много обдумывал, буквально часами, я размышлял о внутренней структуре и внешней, ища баланс где главное - оптимальность в максимуме. Но это просто не получается не как, нельзя сделать общую бд без оверхеда. И я не могу притронуться больше к этому коду, не могу идти поперёк своего мирка. Как и к тому коду, который я писал специализированно для кое-какой информации, тоже бд только заточенная - неприятно писать заточено, когда хотел абстрагироваться на общим апи.

Вразумите меня, залечите меня.
>>640474
#188 #640426
Я заложник придуманного мной же механизма, структуры пока ещё сильно отчётливы, и их заливаю алкоголями но они не стираются. И вместо того чтобы писать, я читаю всякую хуйню, про взлом от касперски, про емакс, малафью.
#189 #640429
Я уже даже почти автоматизировал развёртку моего набора приложений, через xdotool...
#190 #640474
>>640422
Все правильно, пацану нужен под задачу контейнер - он пишет контейнер, нужда база данных - пишет базу. Не слушай всех этих питухов, что упиваются этим тармазным генерализированным библиотечным кодом, он нужен только для полных нулей. Норм пацан всегда напишет идеальную реализацию под свою задачу.
#191 #640513
Как вообще чекнуть, какой юзер запускает программу? Некоторые программы выводят в консольку "this function required root access" или что-то похожее, как такое сделать?
>>640909
#193 #641654
На проекте ядро написано на сишке, проект ща переводится на vcc 14.0

Из инклюд файлов убран math.h (сейчас, типа, все в cmath хранится). Но чет сишные файлы с ним не хотят компилится. Может, кто сталкивался?
#194 #641658
>>641654
Кто же подключает плюсовый cmath в сишный код?
>>641669
#195 #641659
>>641654
ты бы может заглянул бы хоть в cmath прежде чем подключать? Увидел насколько там код похож на си.
>>641660>>641669
#196 #641660
>>641659

>Увидел насколько


*Увидел бы
фикс
#197 #641666
>>641654
А чем math.h не устраивал?
>>641669
#198 #641669
>>641658
>>641659
>>641666

Угу, я заглянул же. Темлейты-хуемплейты.
Собственно, math.h убрали, и как теперь компилить сишную хуйню?

Скопировать из папки со старой вижлой
>>641670
#199 #641670
>>641669
Что ты несешь? Откуда убрали? Студия сишку поддерживает.
#200 #641830
Вопрос от неофита: есть в стандарте тип знаковый, беззнаковый и с плавающей точкой соответвующий разрядности машины, что б максимально шустрый для нее был? Аналог int из Nim, например.
#201 #641837
>>641830

>что б максимально шустрый для нее был


Нихуя не понял, что ты там своим потоком сознания изложить пытался.

>Аналог int из Nim, например.


Он же транслируется в си => сконпелируй и посмотри.
>>641857
#202 #641855
>>641830

> соответствующий разрядности машины


Тебе это не нужно. Используй int/long и положись на компилятор. Если нужна какая-то гарантированная размерность, посмотри в stdint.h типы int_fast_t. С плавающей точкой особого выбора нет - float/double в зависимости от требуемой точности.
>>641876
#203 #641857
>>641837
Пардон, переформулирую:
для x86 хочу int32, для x86-64 хочу int64, для Сетунь-70 хочу 18 тритов целочисленное, например.
#205 #641876
>>641855
>>641858
Благодарю.
#206 #641891
Дарова, бандиты.

Допустим у меня есть FILE* pizda;
В некоторых случаях, мне надо поменять дескриптор файла для вывода(перенаправить stdout куда-нибудь/или при ошибке его сделать невалидным) Я писал что-то типа:
stdout->_File = myNewMegaDescriptor;
myFile->_File = -1;
и т.д.

В последних версиях Visual C++ CRT скрыли поля структуры _iobuf. Ну и хуле теперь делать? Нигде не написан нормальный механизм работы с дескриптором файла. И уверен, где-то подобное говно использовалось.

Может кто че знает?
#207 #641896
>>641891
нельзя трогать содержимое FILE же, оно не определено стандартом. Заменяй указатель, инвалидность через NULL
#208 #641903
>>641891

>перенаправить stdout куда-нибудь


почитай про unix way, это ни разу не твоей программы дело, т.е. вообще, от слова совсем

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


его можно закрыть - навсегда, а не нахрен
#209 #641917
>>641891
Тебе freopen мало?
#210 #642473
По стандарту размер char зависит от архитектуры. По посиксу char должен быть 8 бит, посему в популярных либах этого не нашел.

Допустим 16 битный char, я делаю fread из файла и хочу на разобрать на 8бит байты.

Как правильно по стандарту:
char byte0 = buffer[0]>>8 & 0xFF, byte1 = buffer[0] & 0xFF;
или
char byte0 = buffer[0], byte1 = buffer[1]; / т.е. всегда buffer[N] & 0xFF00 == 0 /
#211 #642576
Где-то есть инфа, чему может быть равно значение (адрес, а не сам блок памяти), который возвращает malloc на разных системах и для разных компилляторов?
(Особенно интересует различие win7 и win10)
>>642579
#212 #642579
>>642473
И что, ты часто с 16-битными char работаешь? Я тебе секрет открою: fread/fwrite по стандарту эквивалентен fgetc/fputc в цикле, а еще по стандарту читать из файла можно ровно то, что ты туда написал. Что приводит нас к интересной мысли о том, что на системах, где CHAR_BIT != 8 ты либо в принципе не можешь читать с помощью стандартной библиотеки файлы из "мира людей", либо тебе подложат костылик, и в одном char будет ровно один байт. Поэтому все это твое дрочево не имеет никакого практического смысла. Не говоря уже о порядке байтов в твоем 16-битном char.

>>642576
У нас сейчас существует такая штука, как ASLR. Все, на что ты можешь надеяться, это > 0x400000 и < 0x7x000000 на 32-битной системе (x зависит от ОС).
>>642780
#213 #642780
>>642579
Я же не из практических соображений спрашиваю, а так, вообще.

А по теме то я уже понял что из мира людей не получить стандартными функциями. По стандарту все эти функции пишут/читают весь байт (он же char).
А на всех DSPхах stdio не стандартный, и от хостовой системы зачастую зависит. До полного безумия и отсутствия портируемости вообще.
#214 #642832
Анон, как ты определяешь указатели? Ставишь звездочку перед именем переменной или перед типом данных? Или, может, вообще ставишь между типом и именем переменных, отделяя зве*дочку пробелами? Что более правильно? Есть какая-то едва уловимая разница на интуитивном уровне.
>>642836>>642837
#215 #642836
>>642832
Это определяется используемым стилем в проекте.
Сам пишу после типа, т.к. Указатель это или объект, как мне кажется, относится к типу.
>>642913
#216 #642837
>>642832
int ∗variable;
void ∗function(void ∗);
void (∗function)(void ∗);
Правило простое: декларация указателя отражает использование. Например, первый пример: ∗variable = 1;
>>642913
#217 #642855
Как правильно вводить неизвестное количество строк в цикле? Каким будет условие выхода из цикла?
#218 #642859
n раз - это 0 .. (n - 1), поэтому условие будет i <= (n - 1) или проще i < n, если i инициализируется 0.
>>642868
#219 #642868
>>642859
Нет, не так. Я решаю задачу из N&R. Условие ниже. Цикл ввода придумал таким. Кстати, почему из очереди каждый раз выводится один и тот же элемент?
https://ideone.com/6oLJ94

Write the program tail, which prints the last n lines of its input. By default, n is 10, say, but it can be changed by an optional argument, so that tail -n prints the last n lines. The program should behave rationally no matter how unreasonable the input or the value of n. Write the program so it makes the best use of available storage; lines should be stored as in the sorting program of Section 5.6, not in a two-dimensional array of fixed size.
>>642881>>643015
#220 #642881
>>642868
Каст перед malloc убери, тут у нас Си.
Насчет одного и того же элемента - покажи, где у тебя в enqueue выделяется память, в которую копируется вводимоя строка? Нигде, ты хранишь указатель на буфер, который каждый раз перезаписываешь fgets.
На самом деле tail не так прост, как кажется. Строки могут быть очень длинными, длиннее 100 символов.
>>642888>>642895
#221 #642888
>>642881

>Нигде, ты хранишь указатель на буфер, который каждый раз перезаписываешь fgets


Блджад, действительно. Указатель, который я сохраняю, указывает на постоянный блок памяти, которая перезаписывается. Стало быть, надо создавать новые строки перед сохранением в очереди?
#222 #642895
>>642881

>Каст перед malloc убери, тут у нас Си


Понятно, что указатель это просто unsigned число, но почему компилятор сам выводит нужный тип? В чем отличаются C и C++ в этом отношении?

Интересно, сколько бы понадобилось времени, чтобы отреверсить даже такой код и понять, что здесь используется очередь?
#223 #642913
>>642836
>>642837
Кроме того
int foo, bar, *baz, lol;
>>642920
#224 #642917
>>642895
Он его не выводит, ему просто похуй - у нас здеся слабая статическая типизация в отличие от крестов.

Хотя лучше пиши с кастами - с ними труднее ошибиться.
>>644663
#225 #642920
>>642913
чёрт, разметка поела
[code] int foo, bar, baz, lol; [/code]
>>642924
#226 #642924
>>642920
да какое говно эта ваша борда
#227 #642931
>>642895
Дополню вопрос этого ньюфага: от чего зависит тип, возвращаемый маллоком? (64 или 32 инт)
>>642941>>642944
#228 #642941
>>642931
От процессора и ОС (разница в адресном пространстве между x32 и x64).
#229 #642944
>>642895
malloc возвращает указатель на void. Особого смысла в касте при присваивании нет, потому что информация справа от = дублирует тип указателя слева. Я не знаю, почему в плюсах решили, что каст обязательно должен быть, но в сишечке каст избыточнен.

> указатель это просто unsigned число


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

>>642931

> от чего зависит тип, возвращаемый маллоком? (64 или 32 инт)


В общем и целом, размер указателя определяется размером адресуемой памяти, что в свою очередь определяется разрядностью процессора. А на практике размер определяется разрядностью кода, который ты компилируешь. Т.е., 32-битный исполняемый файл содержит 32-битные указатели. Этот же 32-битный файл можно запустить на 64-битной системе, если проц и ОС умеют, но указатели останутся 32-битными.
>>649783>>657851
#230 #643015
>>642868
Вроде, решил задачу, но теперь выводятся какие-то лишние пустые строки после каждой строки текста, и всего выводится строк на одну меньше. А еще непонятно, как освобождать память.

https://ideone.com/r1gS6X
>>643019>>643024
#231 #643019
>>643015

>А еще непонятно, как освобождать память.


Просто free(очередь) ведь уничтожит все строки, на которые ссылаются указатели?
>>643044
#232 #643024
>>643015

>лишние пустые строки


С этим тоже разобрался.
#233 #643044
>>643019
free освободит память по тому указателю, который ты в нее скормил, т.е., только саму queue. Строки тебе нужно освобождать самому. Например, можешь сделать API вида dequeue(struct queue ∗q, char ∗dest_buffer) и вызывать free внутри dequeue, а можешь просто решить, что вызывающий dequeue получает строку во владение и должен сам вызвать free.
>>643086
#234 #643086
>>643044

>можешь сделать API вида dequeue(struct queue ∗q, char ∗dest_buffer) и вызывать free внутри dequeue


Смотри, вот так нормально? https://ideone.com/VlIRVw
Только здесь совсем не проверяется переполнение буффера.
>>643108
#235 #643108
>>643086
А, нет, все еще плохо написано. Надо кономно выделять память для строк и использовать для этого свой аллокатор.
#236 #644663
>>642917

> Хотя лучше пиши с кастами - с ними труднее ошибиться


> struct queue q = (struct queue )malloc


Чёт угорел тут.
>>644734
#237 #644664
Но кстати, к типизации у меня дохуя претензий, ладно в ц99 завезли нормальные типы, до этого вообще мрак, как делать хасл математику над указателями - пиши макросы под каждую платформу.

Но чё вызывает мою основную жопоболь - printf - ладно, возможно они и не нужны в отлаженном проекте, но бля...
>>644734
#238 #644734
>>644663
Ну ты же животное просто если у тебя всё на маллоке заканчивается. Когда в си занимаешься вещами вроде ptr = something лучше явно указать тип, если не уверен, иначе выебешь сам себе мозг пока будешь искать где у тебя могло даные перекосоёбить силами слабой типизации.

>>644664
Ну C так-то и позиционирует себя как высокоуровенный ассемблер (у которого, на секунду, типизации нету), которому похуй что ты там ворошишь.
>>644739
#239 #644739
>>644734

> лучше явно указать тип


Если справа void ∗, ничего нигде перекосоебить не может. Оно так задумано, и нормально работает.

> типизации нету


Типизация есть, просто компилятор ничего не проверяет (потому что не может). А стандарт говорит, что при указании несовместимых типов будет UB.
#240 #647268
Поясните студиозусу-баклану за динамическую память.
Вот у нас есть malloc() и calloc(). malloc выделяет sizemem неинициализированной памяти, причем для изменения объема по malloc требуется вызывать realloc. А в calloc память выделяется динамически, сразу инициализируется и сама добавляется по мере необходимости. Вопрос: а нахуй тогда нужен неповоротливый malloc? То есть malloc, конечно, возвращает указатель на начало блока, что удобно, но после calloc мы тоже можем один раз спросить указатель, что явно удобнее, чем потом походу программы добрую дюжину раз ебаться с realloc.
#241 #647287
>>647268

> и сама добавляется по мере необходимости


Это ты к чему? Вся разница между ними что calloc зануляет память (потому чуть медленее) в отличие от malloc.
#242 #647332
>>647268

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


Ты, видимо, живёшь в каком-то волшебном мире.
#243 #647342
>>647268
calloc - это просто malloc с обнулением памяти.
#244 #647959
Анон, с чего начать, если у меня есть несколько лет опыта на скриптоте? То есть базовые конструкции и операции меня не интересуют, но ро указатели и работу с памятью я только понаслышке.
>>648005
#245 #648005
>>647959
Ну вон там в шапке C Primer Plus есть. Лишнее проскроллишь.
#246 #648108
А что такого полезного можно написать на Си?
На Пистоне я, допустим, скрипт, который проверяет почту и созраняет файлы написал. Скриптота деформировала мой мозг лол.
>>648116>>648143
#247 #648116
Есть какие-то эмуляторы железа, типа плат fpga?

>>648108
>>648370
#248 #648143
>>648108
Основную реализацию твоего петона поправить например.

Вообще все, чему нужна производительность до пары миллисекунд и близость к железу.
>>648370
#249 #648370
>>648116
Есть, иногда в составе тулкита, иногда за отдельную плату.

>>648143

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


Как и то, чему не нужна.
#250 #648390
Чего можно покурить по эксплойтам кроме очевидной книги из шапки и 9 переведенных статей от некого хакера? Решил погрузиться с головой и сразу поставить цель - написать эксплойт к одной из cve-2012.
>>648760>>648855
#251 #648760
>>648390
Инкрементирую этого. Всегда чесались руки сделать свой ламповый спойт, только вот между теорией и практикай огромная пропасть. Алсо, сколько мандеев стоит один сплойт?
>>648855
#252 #648838
Вечер в хату си-господам, сам я из руби-хаты.

Хочу хорошо знать си - пока изучаю LCTHW, затем планирую изучить "k&r c". Затем, возможно, что-то из литературы в шапке.

А как насчет практики? Где имеет смысл применить и закрепить полученные знания?
>>648855>>649779
#253 #648855
>>648838

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


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

>>648390
>>648760
Можете попробовать поразбирать чужие сплоенты и малварь, поскроллить blackhat archives, ну и целенаправленно искать презентации и статьи по интересующим техникам.
>>648870>>648953
#254 #648870
>>648855

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



спасибо, именно в этом направлении пока и думаю. Только в сторону младшего брата руби - mruby, там, пока, есть где развернуться.

>Я десктопный софт и дрова пилю, мне норм.


какие дрова пилишь, какой софт?
#255 #648953
>>648855
Короче говоря, копать в системное программирование и реверс-инженеринг. Спасибо.
#256 #649405
Как в люниксе передавать имя файла программе? Разбираюсь с программой simplenote.c из книги Эриксона.

Скомпилировал так: gcc simplenote.c -o simplenote
Запускаю так: ./simplenote data.txt hui
Возникает ошибка: No such file or directory
Файл существует и лежит рядом с программой.
#257 #649443
>>649405

>Файл существует и лежит рядом с программой


Даже когда создал файл notes в /tmp, все равно появляется ошибка. К тому же флаги говорят создавать файл, если его нет.
#258 #649457
>>649405
Нашел ошибку, хуй записать получилось.
#259 #649561
>>649405

>в люниксе


>люниксе








К логопедуб ыдло!
>>649588>>649706
#260 #649588
>>649561
Вна слюниксе, соре.
#261 #649706
>>649561
Все правильно, люникс это юникс от Линуса.
7 Кб, 900x480
#262 #649779
>>648838
Хуй знает, я вот написал написал свою выделялку памяти, а на ней выделяют память всякие авлдеревья (я типо базу данных писал, как будто, а на самом деле стл чтоль)... - угарно вроде. Некогда не любил рекурсию, но сбалансированные деревья, в общем они дают мне спокойствие что стек не переполнится.
>>649780
#263 #649780
>>649779

> выделялку памяти


В смысле для чего: чтобы сохранять на хдд, чтобы пользоваться не только прямыми указателями, а и смещениями...
#264 #649783
>>642944

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


В C любой указатель неявно кастуется в void°, и наоборот.
В C++ появились классы и иерархии типов. Неявный каст разрешён только вверх по иерархии, адрес объекта класса-потомка можно присваивать указателю типа базового класса. Если бы возможно было работать с void° как в C, это бы привело к аномальной системе типов, где void одновременно и базовый тип для всех типов и подтип всех типов.
>>649924
#265 #649826
мммммаксимум ньюфаг в треде

Анон, в K&R, как это работает? Как получается букву хранить в int?
int c;
c = getchar();
>>649830>>649852
#266 #649830
>>649826
Буква это число. Текст число. Картинка число. Программа - число. Все число. Проблема только в том чтобы размера переменной хватило.
27 Кб, 715x488
#267 #649852
>>649826
В компьютере буквы пронумерованы. Он не хранит буквы, только их номера. И с помощью кодовой страницы определяет, какие буквы показывать при выводе.
>>649871
#268 #649871
>>649852
Именно буквы вводимые с клавиатуры пронумерованы получается? Тогда понятно.
#269 #649879
>>649871
Вообще все символы пронумерованы.
#270 #649924
>>649783
То есть, это какие-то философские заморочки, никакого отношения к практике не имеющие.

>>649871
Можно добавить, что:
- это просто общепринятая практика. У себя ты можешь создать массивчик, и если ты встречаешь в нем число 1 - твой код рисует смайлик, а если 2 - букву 'A', а если 3 - фразу "ОП - хуй" - компьютеры всегда работают с числами, а программа решает, как их интерпретировать;
- существует дохуя многобайтовых кодировок, и в каком-нибудь UTF-8, где для кодирования символа используется от 1 до 6 байтов, getchar() будет возвращать не весь код символа, а эти байты по одному когда создавался Си, такой проблемы не было - 128 символов хватало всем, поэтому в языке до сих пор тут и там вылезают проблемы по поводу Unicode .
>>649981
#271 #649981
>>649924

>То есть, это какие-то философские заморочки, никакого отношения к практике не имеющие.


Система типов это самая практика и есть. Просто кодерам непонятно, они же TAPL не читали.
#272 #651058
>>649871
Коды клавиш вроде как не такие же как аски, если ли вообще по этой теме соглашения?
>>651060>>651506
#273 #651060
>>651058

> есть ли

>>651215
#274 #651215
>>651060
Да, есть, скан-коды повторяют аццки древнюю клавиатуру IBM PC, где ещё не было клавиш F1..F12.
>>651506
#275 #651506
>>651215
Разве? Насколько я помню, сканкоды PS/2 к ASCII отношения не имеют, их нужно транслировать в ASCII по таблицам. То же самое и с USB-шными скандкодами.

>>651058
Да, есть стандарты, они описывают, у какой клавиши какой сканкод.
>>651748
#276 #651748
>>651506
Именно. Скан-коды начинаютьса с единицы, и это код клавиши "Esc".
Она уже в те времена была первой на клавиатуре.
>>651762
sage #277 #651762
>>651748
Извини, неправильно прочитал "аццки".
#278 #652877
Двач, поясни за Кернигана и Ричи. Программы написанные в первой главе, начиная с подсчета символов у меня отказываются правильно работать. Консоль только принимает символы, но ни куда их не выводит... Пишу под Windows в Dev C++. Можете материть сколько угодно - да, я ньюфажик после школьного паскаля (а знал его на 5 лол)
>>652987
#279 #652987
>>652877
#include <stdlib.h> в самое начало файла, system("pause"); в самый конец main() (перед return, если есть return). Если это решит проблему, рекомендую научиться компилировать и запускать программы из командной строки.
>>653012
#280 #653012
>>652987
Ни как
Вот код в оригинале:
#include <iostream>
#include <stdio.h>

int main() {
double nc;
for (nc=0; getchar() !=EOF; ++nc)
;
printf ("%.0f\n", nc);
}
>>653048
#281 #653048
>>653012
Откуда тут iostream? Ты ошибся либо тредом, либо книгой.
Возможно, ты не вводишь Ctrl+Z после своих символов, и твоя программа крутится в for, вечно ожидая EOF. Возможно, ты хочешь выводить счетчик после каждого сиимвола, в таком случае ; перед printf надо убрать.
#282 #653470
Стоит смотреть уроки по спп, если хочу выучить си для микроконтроллеров?
>>653476>>653481
#283 #653476
>>653470
Если там нормальные уроки по нормальному спп то не стоит.
#284 #653481
>>653470
Если хочешь вкотится в программинг - учить читать, тебе это предстоит делать в очень и очень большом объёме.
>>653566
#285 #653566
>>653481
Мы тут все такие умные, знаем путь к библиотеке, даже имеем задолжность - библиотекарша наверно думает что мы зачитываемся, и мечтает познать этот внутренний мир. Но я только пролистал формы сортировки - чтобы ловко козырять глубинами мысли. Короче кидаю посыл, не читал - программинг не внял.
#286 #655902
Допустим я хочу стать си джуном. Допустим почитаю K&R. А какой проект пилить? Что показывать на собеседовании?
>>656962
#287 #656962
>>655902
Кроме как после практики от технического вуза, увы, мало шансов попасть на Си-джуна.
>>657351
#288 #657351
>>656962

>практики от технического вуза


Это как? Это если вуз меня сам засунет в какуюнить конторку где нужны сишники?
>>657365
#289 #657365
>>657351
Да. Большинство историй успеха в Си по крайней мере такие. Не представляю, как можно попасть с улицы.
Можно попробовать устроиться на скриптокодера и писать нативные расширения для язычка на Си. Или в асушники/плисоводы/эмбеддеры, но там проблема как выше: без опыта не нужны, особенно в кризис.
>>657429
#290 #657429
>>657365
Написать в отдел кадров ближайшего завода ВПК и попасть. Ничем от "практики в ВУЗе" отличаться не будет.
>>657438
#291 #657438
>>657429
Сомневаюсь, что это так просто.
>>657440
#292 #657440
>>657438
В большом городе точно просто, программистов дефицит.
#293 #657732
Анон, поясни ньюфагу, для чего и когда используются указатели?
>>657752
#294 #657752
>>657732
передать структуру в функцию, например.
и масив.
мандада = масив.
>>657754>>657755
#295 #657754
>>657752

>мандада = масив.


Держите наркомана!
#296 #657755
>>657752

>и масив


А массивы по значению в сишечке и не передаются.
>>657759>>657760
#297 #657759
>>657755
Хм. А "срезы" поверх массива?
Срез - это когда я хочу посчитать среднее не с 0 до (N-1), а с A до (B + (N-1)), и часть массива передаю в функцию.
>>657760
#298 #657760
>>657755
Это в чистом виде не передаются. А можно обернуть в структурку и структурку по значению передать. Другое дело, что передача по значению чего-то кроме примитивных типов в сишечке не оправдана.

>>657759
Передаешь указатель на массив, стартовый индекс, количество элементов. Или передаешь указатель на начало "среза" и количество элементов. Сам массив ты не передаешь.
#299 #657845
>>642473
stdint.h
int8_t
uint8_t
>>657872
#300 #657851
>>642944
C - слабая типизация
С++ - строгая типизация
#301 #657860
создал тип данных структуру (в отдельном H-файле), объявил несколько структур, которые внутри себя имеют указатели на нижестоящую и вышестоящую структуру.
Создал там же ссылку на первый указатель по типу:
struct *adress = &struct1
Когда вызываю эту ссылку в функции в другом подключаемом сишном файле, хуячит ошибку. Если объявляю ссылку на адрес внутри этой функции программа компилируется. Но если пишу после этого сразу что-то по типу
adress = &struct1.next
выводит предупреждение и данное присваивание не работает.
Если присваивание так не работает, то как правильно?
Если я объявляю в хидере структуру и ссылки и он подключается к главному файлу, то тип данных структура и ссылка должна же являться глобальным объявлением и должна работать в любых функциях?
В общем, что я делаю не так?
>>657871>>657872
#302 #657871
>>657860

>хидере


Сука, чтобы у тебя хуй не стоял.
А вообще хедер без прямого инклуда в каждом объектном файле сам не подключается, так что в каждом модуле хуярь этот хедер, если у тебя там не определены эти структуры.
>>657880
#303 #657872
>>657845
При CHAR_BIT != 8 нет никаких uint8_t. Вообще. Не поддерживаются.

>>657860
Покажи код, нихуя не понятно.
>>657880
#304 #657876
>>642473

>Как правильно по стандарту:


stdint.h
The header <stdint.h> declares sets of integer types having specified widths, and
defines corresponding sets of macros. It also defines macros that specify limits of
integer types corresponding to types defined in other standard headers

>CHAR_BIT != 8 нет никаких uint8_t. Вообще. Не поддерживаются.


Че за платформа?
>>657961
#305 #657880
>>657872
>>657871
хедер я подключил в объектном файле, к счастью извилин на это все таки хватило

Объявление стуруктуры из хедера:

typedef struct {
voidNext; // ссылки на следующую строку
void
Previous; // ссылка на предыдущую строку
voidLeft_neighbor; // сслыка на левого соседа-столба
void
Right_neighbor;// ссылка на правоо соседа-столба
uint8_tY; // координаты ячейки с которой начнется вывод символов из массива
uint8_t X; // У - номер строки, Х - номер позиции в строке
uint8_tSelect_comand; // код команды
charText[20]; // текст строки(в оригинале была const char)
} MenuLine; // название типа

MenuLine ScreenLine1_1;
MenuLine ScreenLine1_2;
MenuLine ScreenLine1_3;
MenuLine ScreenLine1_4;

MenuLine Select_MenuLine = &ScreenLine1_1;

если последнюю строку оставить так, то в при вызове в другой функции он выдает ошибку что эта ссылка не декламирована( точнее не скажу, т.к. прога на домашнем компе нихуя не хочет работать на 8ке)
А вот если последнюю строку перетащить в нужную функцию то вроде ошибку не выдает. Но если приписать еще
MenuLine
Select_MenuLine = &ScreenLine1_1;
Select_MenuLine = &ScreenLine1_1.Next;
то warning и не работает. А мне подобное нужно, т.е. через эти ссылки перехожу на другой экран меню.
#305 #657880
>>657872
>>657871
хедер я подключил в объектном файле, к счастью извилин на это все таки хватило

Объявление стуруктуры из хедера:

typedef struct {
voidNext; // ссылки на следующую строку
void
Previous; // ссылка на предыдущую строку
voidLeft_neighbor; // сслыка на левого соседа-столба
void
Right_neighbor;// ссылка на правоо соседа-столба
uint8_tY; // координаты ячейки с которой начнется вывод символов из массива
uint8_t X; // У - номер строки, Х - номер позиции в строке
uint8_tSelect_comand; // код команды
charText[20]; // текст строки(в оригинале была const char)
} MenuLine; // название типа

MenuLine ScreenLine1_1;
MenuLine ScreenLine1_2;
MenuLine ScreenLine1_3;
MenuLine ScreenLine1_4;

MenuLine Select_MenuLine = &ScreenLine1_1;

если последнюю строку оставить так, то в при вызове в другой функции он выдает ошибку что эта ссылка не декламирована( точнее не скажу, т.к. прога на домашнем компе нихуя не хочет работать на 8ке)
А вот если последнюю строку перетащить в нужную функцию то вроде ошибку не выдает. Но если приписать еще
MenuLine
Select_MenuLine = &ScreenLine1_1;
Select_MenuLine = &ScreenLine1_1.Next;
то warning и не работает. А мне подобное нужно, т.е. через эти ссылки перехожу на другой экран меню.
#306 #657882
>>657880
бля, попытка попытка номер два

typedef struct {
voidNext; // ссылки на следующую строку
void
Previous;// ссылка на предыдущую строку
voidLeft_neighbor;// сслыка на левого соседа-столба
void
Right_neighbor;// ссылка на правоо соседа-столба
uint8_tY;// координаты ячейки с которой начнется вывод символов из массива
uint8_t X;// У - номер строки, Х - номер позиции в строке
uint8_tSelect_comand;// код команды
charText[20];// текст строки(в оригинале была const char)
} MenuLine;// название типа

MenuLine ScreenLine1_1;
MenuLine ScreenLine1_2;
MenuLine ScreenLine1_3;
MenuLine ScreenLine1_4;

MenuLine *Select_MenuLine = &ScreenLine1_1;
>>657895
#307 #657884
>>657880
Не занимайся хуетой, юзай pastebin.com
#308 #657895
>>657882
>>657880
typedef struct {
void Next; // ссылки на следующую строку
void
Previous; // ссылка на предыдущую строку
void Left_neighbor; // сслыка на левого соседа-столба
void
Right_neighbor; // ссылка на правоо соседа-столба
uint8_t Y; // координаты ячейки с которой начнется вывод символов из массива
uint8_t X; // У - номер строки, Х - номер позиции в строке
uint8_t Select_comand; // код команды
char Text[20]; // текст строки(в оригинале была const char)
} MenuLine; // название типа

MenuLine ScreenLine1_1;
MenuLine ScreenLine1_2;
MenuLine ScreenLine1_3;
MenuLine ScreenLine1_4;

MenuLine *Select_MenuLine = &ScreenLine1_1;

извиняюсь, впервые такую хуету вижу
>>657961
#309 #657961
>>657876
Множество DSP.

>>657895

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


В Си нет ссылок.

> прога на домашнем компе нихуя не хочет работать на 8ке


Поставь себе компилятор (в шапке несколько есть на выбор, все работают на 8).

> warning и не работает


Какой ворнинг?

> void ∗Next


Почему void∗ тут? Пиши что-то типа:
typedef struct MenuLine
{
struct MenuLine ∗Next;
struct MenuLine ∗Prev;
...
}MenuLine;

> при вызове в другой функции он выдает ошибку


Значит верное тебе сказали про хедеры. Про extern не забудь.

> Select_MenuLine = &ScreenLine1_1.Next;


Ты хоть структуры-то заполняешь?

Не пробовал менюшки массивами делать? Типа:
MenuLine menu[] =
{
{ .Text = "Первая строка" },
{ .Text = "Вторая строка" },
{ 0 }
};

На конец массива можно проверять, например, как menu[index].Text[0] == '\0'.

И да, используй pastebin.com или ideone.com. В крайнем случае, заменяй звездочки на ∗
#309 #657961
>>657876
Множество DSP.

>>657895

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


В Си нет ссылок.

> прога на домашнем компе нихуя не хочет работать на 8ке


Поставь себе компилятор (в шапке несколько есть на выбор, все работают на 8).

> warning и не работает


Какой ворнинг?

> void ∗Next


Почему void∗ тут? Пиши что-то типа:
typedef struct MenuLine
{
struct MenuLine ∗Next;
struct MenuLine ∗Prev;
...
}MenuLine;

> при вызове в другой функции он выдает ошибку


Значит верное тебе сказали про хедеры. Про extern не забудь.

> Select_MenuLine = &ScreenLine1_1.Next;


Ты хоть структуры-то заполняешь?

Не пробовал менюшки массивами делать? Типа:
MenuLine menu[] =
{
{ .Text = "Первая строка" },
{ .Text = "Вторая строка" },
{ 0 }
};

На конец массива можно проверять, например, как menu[index].Text[0] == '\0'.

И да, используй pastebin.com или ideone.com. В крайнем случае, заменяй звездочки на ∗
>>658014
#310 #658014
>>657961

>typedef struct MenuLine


>{


>struct MenuLine ∗Next;


>struct MenuLine ∗Prev;


>...


>}MenuLine;


Кстати, никогда не понимал зачем нужна возможность дважды именовать структуру до и после (кроме спермоизъебств где первое как тип второе как указатель.
>>658144
#311 #658144
>>658014
В отличие от плюсов, в Си пространства имен struct и типов не пересекаются (у тебя в коде могут быть struct Foo и typedef unsigned int Foo). Имена структур указываются с ключевым словом struct, а если тебя такой способ не устраивает, тебе нужен typedef.
В typedef ты можешь определить безымянную структуру, как в >>657880, и это будет работать. Но если тебе потребуется тип этой структуры во время ее определения, пока typedef еще "не отработал", ты никуда не денешься от необходимости обозвать структуру и обращаться к ней через struct, как в >>658014, либо сделать почти то же самое отдельно:
// Объявляем тип Foo, на данный момент являющийся "incomplete struct Foo".
// На основании неполных типов можно объявлять указатели, но их дереференсить,
// пока тип не будет определен.
typedef struct Foo Foo;
// Определяем содержимое struct Foo.
struct Foo {
// Объявляем указатель на Foo, который пока все еще является
// "incomplete struct Foo".
Foo ∗anotherFoo;
};
В обоих случаях тебе нужно, чтобы у структуры было имя. А уж дублировать его, или в вендостиле писать tagFoo - дело твое. Некоторые пишут struct _Foo - это неправильно, идентификаторы с подчеркиванием зарезервированы.

Вариант с отдельным typedef на практике более удобен - он скрывает реализацию. Ты можешь определить API, работающий с Foo ∗, положить в .h только строчку с typedef, а саму struct определить в .c, и потом менять содержимое структуры как угодно, не требуя изменения или перекомпиляции "клиентского" кода.
>>661320
#312 #658222
>>629715 (OP)
Вот как лучше сделать, несколько раз делать разыменование или 1 раз перегнать в переменную и далее работать с ней?
>>658277
#313 #658277
>>658222
С точки зрения кода, разыменование в компиль-тайме станет обычным обращением к ячейке через регистр и, возможно, каким-нибудь смещением, но при этом на стеке не будет выделятся место для хранения этой переменной (хотя, конечно, сильно зависит от компилятора), но с точки зрения читаемости кода, лучше перегнать в переменную, ибо синтаксис Сишечки позволяет городить невообразимые конструкции.
#314 #661320
>>658144
ты всё больше и больше меня пугаешь. представляю длину твоей бороды и как там воняет. сидишь тут, расстыковываешь всё, популярно. мочек чтоль?
#315 #661508
КАК РАССЧИТЫВАЕТСЯ РАЗМЕР ПАМЯТИ, ЗАНИМАЕМЫЙ СТРУКТУРОЙ?
Там же не просто складываются размеры членов структуры, а как-то выравниваются?

И самый главный вопрос. Как рассчитывается размер, если там указатель на такую же структуру? Не могу догнать.
Например, вот.
struct node {
int id;
struct node *next;
};

Какой будет размер у неё в битах/байтах?

Помогите пожалуйста.
>>661528
#316 #661528
>>661508

> Как рассчитывается размер, если там указатель на такую же структуру?


Как и размер любой другой структуры: сумма размеров её членов плюс выравнивание. То, на что указатель указывает, частью структуры не является и в её размер не входит. Для 32-битной системы, для не хитровыебанного компилятора sizeof(struct node) будет 8. 4 байта инт + 4 байта указатель.
>>661622
#317 #661622
>>661528
выравнивание как между членами, так и на окончании (под самый большой член).
>>661623
#318 #661623
>>661622
И сделано это для того, чтобы можно было один раз выравнять массив структур, и спокойно пользоваться.
49 Кб, 814x389
#319 #661633
У меня возник вопрос. Почему участок кода на пике, не вызывает никаких предупреждений при компиляции и выполняется нормально?
Компилятор: GCC 5.3.1-1 с -Wall.
>>661642
#320 #661642
>>661633

> Restrict is a "no data hazards will be generated" contract between the programmer and the compiler. The compiler relies on this information to make optimizations. If the data is, in fact, aliased, the results are undefined and a programmer should not expect the compiler to output a warning. The compiler assumes the programmer is not lying.

>>661660
#321 #661660
>>661642
Ясно. Не нужно обманывать доверие компилятора. Спасибо.
14 Кб, 439x129
4 Кб, 256x80
#322 #662792
Почему у меня не меняется ориентация потока?
>>662798
#323 #662798
>>662792
Вопрос отменяется. Я понял, что нельзя менять ориентацию потока до самого закрытия.
#324 #665208
Господа, в чём код пишите? В блокноте?
Что лучше, Qt или Eclipse?
>>666016
33 Кб, 757x757
#325 #665310
Анон, есть IDE для ньюфага? Лучше всего что-то типа Notepad++, но с компилятором.
CODE:: Blocks реально монстр, раньше писал на Dev-C++, но он протух уже год как.
VS - это просто пиздец, я же только хеллоуворды пишу пока.
#326 #665357
>>665310

> Notepad++


Разве к нему нельзя компилятор подключить?
>>665386
#327 #665359
>>665310
Pelles C возьми, если хеллоуворлды.
#328 #665386
>>665357
Пошаговое руководство есть?
Нашел овердохуя, нихуя не понял.
>>665925
#329 #665925
>>665386
Сиди и разбирайся, какой же ты после этого погромист?
#330 #665977
>>665310
Любой текстовый редактор с возможностью встроить запуска компилятора.
мимо vimобог, не знающий IDE-проблем
>>665987
#331 #665987
>>665977
Поссал на даунича.
мимо emacs бог
>>665989
#332 #665989
>>665987
Поссал на дауна с комбайном вместо текстового редактора.
мимо vim бог
>>665997
#333 #665997
>>665989
Поссал на парашу консольного полуёбка из 79-го.
мимо emacs бог
>>665999
69 Кб, 292x696
74 Кб, 299x530
#334 #665999
>>665997
Поссал консольную парашу из 76-года, для которой надо учить ее собственный язык, чтобы нормально пользоваться.
>>666003>>666010
#335 #666003
>>665999
Поссал на парашку со своим недоскриптоязычком для детей, которая имеет 1/5 от возможностей расширения Единственного Божественного emacs-а.
>>666007>>666010
#336 #666007
>>666003
Поссал на парашу с полумертвым недолиспом, которым пользуются 3,5 говноеда и без которого emacs не юзабельное говно, вместо классического и для всех удобного управления при помощи скриптов Божественного Vim'а.
>>666013
#337 #666010
>>666003
>>665999
Можете не устраивать тут срач?
>>666011>>666013
#338 #666011
>>666010
В треде тихо как-то. Что же еще делать, кроме как указывать фанатикам путь истинный?
>>666012
#339 #666012
>>666011
Да хуй знает, обсуждайте свои редакторы или что угодно делайте, но не сводите все к "поссал на дурака - нет это я на тебя поссал"
#340 #666013
>>666007
Так теперь называют нерасширяемое деревянное говно, замёрзшое на морозе 20 лет назад?
Аргументация уровня goвно даунов и purebasik полуебка.

>>666010
Иди ставь свою студию/clion и жри говно.
>>666017
#341 #666016
Повторю свой вопрос >>665208

Я понимаю, что плюсотред в другой стороне, но неужели никто не использует встроенную поддержку JTAG, GDB, TDD?
>>666661
14 Кб, 784x124
75 Кб, 739x341
#342 #666017
>>666013

>ВЫ ВСЕ ВРЁТИ!!! БОЖЕСТВЕННЫЙ ВИМ УСТАРЕЛ!!! ТВОЯ АРГУМЕНТАЦИЯ ГОВНО!!! ЕМАКС!!!ЕМАКС!!!ЕМАКС!!!ЕМАКС!!!ЕМАКС!!!ЕМАКС!!!


>Иди нахуй пользователь не emacs'а


Ясно. Этот петух, поклоняющийся мозолееду порвался. Кстати, твоя параша уже почти год не обновлялась. И тебе ли говорить о говне мамонта? В Vim'е хотя для скриптописания обновы постоянно выходят.
>>666018
#343 #666018
>>666017
Наверно потому, что твой вим - багованное говно?
>>666020
#344 #666020
>>666018
Возможно потому, что пользователей Vim'а больше и в нем быстрее правят недостатки нежели в emacs'е, который и нахуй никому не нужен, имеющий код еще из 70-х годов и тормозящий даже на среднем железе, если не выпиливать из него не нужное говно, которым его обвесили из коробки?
>>666025
#345 #666021
Питухи ссаные, как будто не знают про sublime text 2/3 с возможностью IDE
>>666023
#346 #666023
>>666021
Уноси нахуй свое раздутое, не кроссплатформенное, проприетарное говно.
мимо vim-бог
>>666030>>666096
#347 #666025
>>666020

>больше хипсторов допущеных до коммитов


>чаще обновляется


>кудах кокок лагает


Эта боль дебила-нищеброда.
>>666026
#348 #666026
>>666025

>нет людей, которые согласились бы коммитить


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


>лагает на core i5 образца конца 2011 года и 6Гб памяти - нищеброд кококо


Ясно. Эти мозолеоправдания.
>>666031
#349 #666030
>>666023
Лел, сударь не знает, что богоподобный сублим запускается и на вин и на никсах, ууух, какой ты еблан
>>666036
#350 #666031
>>666026

>на i3 540 (2010), 8 gb и последней бубунте не лагает, а на железе лучше – лагает


>нету нормальных кодеров, осиливших лисп


>зато куча скриптомакак


Гибкость вашего манямирка поражает, василий.
>>666036
#351 #666034
Алсо, ребят, все быстра на атом! Он на 12 ядрах и 128 гб уже почти не лагает! Хипсторы, впиреееед!
#352 #666036
>>666030

>думает, что ОСей кроме Linux, Windows и MacOS не существует


Уебывай. Даже емаксопетухи лучше тебя.

>>666031

>убунтенок


Ясно. Для тебя тормоза емакса даже не заметны. Вероятно ты привык к тормозам.

>нету нормальных кодеров, осиливших лисп


>считает, что elisp имеет что-то общее с божественным лиспом


>>зато куча скриптомакак


>не осилил скриптописание и считает, что конфиги для ПО надо писать на своем ЯП.


Ясно.
>>666037>>666040
#353 #666037
>>666036

>Уебывай. Даже емаксопетухи лучше тебя.


Ими никто не пользуются – их считай и нету.
>>666041
#354 #666040
>>666036

>Ясно. Для тебя тормоза емакса даже не заметны. Вероятно ты привык к тормозам.


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

>считает, что elisp имеет что-то общее с божественным лиспом


Щитаю что это семейство языков, а не куча размазанного макаками по зоопарку скриптопараши дерьма.
>>666046
#355 #666041
>>666037
Согласен. Емаксопетухов мало. Но емакс хоть запустить на кофеварки можно в отличии от твоего проприетарного говна. Впрочем, если тебе нравится кушать то, что позволит тебе господин...
#356 #666046
>>666040

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


>Считает, что конфигурировать систему нормально можно только на раче с гентой.


Ясно.

>Щитаю


Еще раз ясно.

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


>считает, что интерфейсы для взаимодействия с ПО - не нужны


Понятно.
Кстати, твой емакс научился уже в подсветку синтаксиса сразу нескольких языков без мокрописечных аддонов? К примеру связку HTML+CSS+JS осилит? Или придется пердолится? По крайней мере пару месяцев назад еще приходилось пердолится.
>>666055
#357 #666055
>>666046

>К примеру связку HTML+CSS+JS осилит?


Понятия не имею, и сомневаюсь в этом. А ты случаем не пробывал редактировать си, питон и лисп в одном файле?

>Считает, что конфигурировать систему нормально можно только на раче с гентой.


Какие профиты в этом? Нитармазит, кококок, на 0,5 быстрее включается? разве что в случаях когда у тебя последний суперйобапроцессор с каким-то экзотическим набором инструкций
>>666059>>666062
#358 #666057
>>631501
Молодой человек, ознакомтесь с литературой по этому вопросу.
#359 #666059
>>666055

>Понятия не имею, и сомневаюсь в этом. А ты случаем не пробывал редактировать си, питон и лисп в одном файле?


Ну-ну-ну. Исходник странички, на которую ты сейчас смотришь - это как раз смесь HTML+CSS+JS. Так что юзкейс жизненный, нечего передёргивать.
независимый наблюдатель
>>666061
#360 #666061
>>666059
а) Я смотрю на приложение;
б) То, что требуется смесь языков не значит, что это нельзя структурировать;
в) Никогда этим не интересовался, не передёргиваю. Возможность наверняка есть, но вряд ли из коробки.
#361 #666062
>>666055

>ь си, питон и лисп


Слишком экзотично для меня. Но мне хватило и HTML+CSS+JS, с которыми, без дополнительных инструментов невозможно работать. То ли дело Vim, в котором все базовые возможности работают из коробки .

>Какие профиты в этом? Нитармазит, кококок, на 0,5 быстрее включается?


Будучи сишником, мне интересно знать как работает то, чем я пользуюсь. Разница между дистрибутивами небольшая, но все та же Убунту предназначена для домохозяек в большей степени и есть некоторые ограничения. Поэтому, считаю что лучше взять дистрибутив, в котором предусматривается сразу возможность гибкой настройки.
>>666066
#362 #666066
>>666062

>То ли дело Vim,


>от скриптоваськов скриптоваськам



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


Будучи сишником, мне интересно что и как работает, но мне посрать какой там будет менеджер пакетов, в чём там отличия возможности администрирования, стандартных пакетов библиотек и все остальное. Файловая система, модель памяти и всё остальное там не отличается разнится – мне легче поставить дистрибутив для домохозяек и писать что-то, а не ебурится со сборкой.
>>666071
#363 #666068
Анончики, дайте ссылку на книгу Грега Перри "Программирование на C для начинающих" , а то я не могу найти.
#364 #666071
>>666066

>Файловая система


Может отличаться. Где-то ext4, где-то btrfs.

>стандартных пакетов библиотек


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

>Скрипты не нужны.


Ясно. Ты этим все сказал. Иди почитай о том, что такое скрипт и для чего он нужен.
>>666077
#365 #666077
>>666071

>Может сильно отличаться.


Если буду писать что-то кроссплатформенное – предпочту поставлять всё в комплекте, либо писать конкретные версии зависимостей. Сомневаюсь что самые базовые вещи в какой нибудь glibc сильно разнятся при разбросе в пару версий.

>Ясно


Это можно написать о твоём манявидении.
#366 #666096
>>666023
Ты больше похож на школьника, который вчера выучил hjkl и уже засрал доску этим.
#367 #666570
Есть ли в сишке фича более бесполезная, чем enum?
#368 #666641
>>666570
обоснуй?
>>666656
#369 #666656
>>666641
В роли констант у enum практически нет преимуществ по сравнению с #define, зато есть ограничение на тип значения (только int), в то время как макросом можно задать любое значение. Вот вообще ни разу мне не пригодились enum'ы, и более того, даже специально подумав, я не знаю где их реально можно было бы применять так, чтобы это было однозначно лучшим решением для данной ситуации.
>>666676>>667965
#370 #666661
>>666016
Есть. Битфилды. В рантайме дешевле bool делать и жрать на 7 бит больше памяти, чем тормозить процессором, а для обмена битфилды использовать не получается, потому что они даже в пределах платформы часто непереносимы, и проще сразу делать масками.

А вот про enum ты зря. Очень удобно указывать в качестве аргумента функции вместо безликого int. Алсо, ограничение на тип (и особенно то, что он знаковый) иногда мешает, тут ты прав.
#371 #666665
>>666661
>>666570
Промазал.
#372 #666676
>>666656
Как минимум не надо ебаться с макрофункциями, если перечисления идут по возрастанию, задал начальный и ок, компиль сам все сделает. Плюс типизация - для интерфейсов либ, например, более понятное назначение аргумента функции.
#373 #666680
Как преобразовать данные (допустим, текст) в поток битов, чтобы поксорить с бинарной m-последовательностью?
>>666695
#374 #666695
>>666680
Для однобайтовой кодировки просто кастани к указателю на uint8_t и еби побайтово или побитово. Для юникода - преобразуй к UTF-8 сначала.
>>666736
#375 #666710
>>666661

>Очень удобно указывать в качестве аргумента функции вместо безликого int


Так-то да, но typedef int Yoba ничем не хуже же, а typedef long long Yoba, там где это может понадобиться, даже объективно лучше.

Что до битфилдов, то тут обычный трейдоф память/скорость, это я еще могу себе представить — например в каком-нибудь эмбеде, если таких структур вдруг нужно хранить дохуя, а обращения к ним нечастые, то почему бы и не упаковать их. Хотя тоже, конечно, довольно сомнительная фича.
>>666720
#376 #666720
>>666710

> typedef int Yoba ничем не хуже же


Хуже. Тебе придется где-то указать, что пихать в Yoba. Сравни с:
typedef enum YobaMode
{
YOBA_MODE_AUTO = 0,
YOBA_MODE_FOO = 1,
YOBA_MODE_BAR,
YOBA_MODE_BAZ,
} YobaMode;
>>666745
#377 #666736
>>666695
Не понимаю до конца. Смотри, есть генератор m-последовательности над конечным расширением двоичного поля, просто поток нулей и единиц. И есть символ из восьми бит. Как выполнить XOR гаммы с кодом символа? Ведь гамма вырабатывается непрерывно, а символ фиксирован.

Допустим, символ такой: 00011010
И гамма - это поток 1011010101110101101

Имеем:
00011010
10110101
XOR: 10101111

Если бы оба числа были фиксированы, то можно было бы завести bit_iterator и пройти по всем соответствующим битам. Но генератор выдает по одному биту за обращение к нему.
>>666760>>666764
#378 #666745
>>666720
>>666720
Просто там же рядом те же самые YOBA_MODE_FOO и т.д. задать дефайнами и всё, получится не хуже, ведь никакой автоматической проверки корректности значений для enum'ов не завезли, и у тебя вполне можно сделать YobaMode var = 567 (вообще любое совместимое с int значение).
>>667390
#379 #666760
>>666736
У тебя задача какая стоит?
#380 #666764
>>666736
Не понимаю, кто тебе мешает 8 раз взять из генератора по 1 биту, собрать из этого байт и поксорить. Или наоборот реализовать битстрим из байтового потока сдвигами и масками.
#381 #667345
>>666570
есть, префиксный +.
>>667366
#382 #667366
>>667345
Ты прав, однако. Хотя унарному плюсу и можно при очень большом желании найти применение, в первую очередь он есть в языке просто "шоб было". Я даже совсем забыл про него.
#383 #667390
>>666745

>никакой автоматической проверки корректности значений для enum'ов не завезли


ты там ворнинги принципиально не включаешь чтоли?
>>667393
#384 #667393
>>667390
enum test_enum { nol, odin, dva, tri } test_var;
...
test_var = 555;

Ни clang, ни gcc с ключом -Wall нихуя не выдают, только что проверил.
>>667870
#385 #667513
Господа сишники, заберите пожалуйста своего коллбек-дауна из нюфаг треда. И уберите книгу про ксакинг из шапки (или, как минимум, допишите что не для нюфагов. Она печально действует на таких вот >>667494
>>667920
#386 #667870
>>667393
А как же -pedantic
>>667878
#387 #667878
>>667870
Тоже всегда включен у меня.
27 Кб, 400x253
#388 #667920
>>667513

>не для нюфагов

#389 #667965
>>666656
Загляни в исходные коды разных проектов, ты заметишь, что их очень много. Как и говорит само название "enum", он создан для перечислений.и вполне удобен, если надо определить целую группу констант. Через define'ы это будет более громоздко выглядеть.
#390 #667975
Я смотрю сегодня какое-то обострение. Все им не нужно, все нужно выпилить. Тяжелый день в школе был у вас и перед выходными решили порезвиться здесь?
#391 #668238
>>666661
Лол, я вообще о битфилдах не знал до определённого времени.
>>668243
#392 #668243
>>668238
Вся суть даже не осиливших язык, быдлокодеров.
>>668265
#393 #668265
>>668243
Не переживай, я на C практически не пишу, а если пишу, то только какие-то мелкие вещи, обычно только исходники читаю в большом количестве. Битфилды на практике ни в одном коде, что смотрел, не встречал.
191 Кб, 859x664
#394 #668289
>>666661
Эта трата мозгового времени на обдумывание чего-либо, связанного с памятью.

мимоджавапроходил
>>668291
#395 #668291
>>668289
Явапидор не в курсе, что в его курятнике ебли с памятью ещё больше. Вот тебе 2ух часовая лекция про Java Memory Model: https://www.youtube.com/watch?v=iB2N8aqwtxc
#396 #668322
Посоны, поясните за SSE2 в основных С/С++ компиляторах (GCC, вижуалстудио). Не за тот SSE2 который сам пердолишь вставками, а тот который по опции компилятора автоматически юзается.

Для оптимизации какого кода он его применяет и насколько эффективно? Только для вычислений или так же всякие поиски строк может ускорять?
>>668338>>668343
#397 #668338
>>668322
Ну, во-первых, все вычисления с плавающей точкой по умолчанию на SSE (FPU мёртв настолько, что уже из процессоров выпиливают). У GCC не всегда получается разглядеть параллельные операции, и он высирает лапшу там, где можно было упаковать и посчитать разом. Циклы векторизуются более-менее нормально (особенно если про restrict не забывать, а если еще и количество итераций константное, то вообще заебись). За строки не скажу, но предполагаю, что не осилит без твоей помощи. А вообще, objdump тебе в помощь - конпелируй, смотри.
>>668439
18 Кб, 537x136
#398 #668343
>>668322
У Криски есть пару статеек на тему оптимизации компиляторов. Протухо правда, но что есть.
>>668439
#399 #668439
>>668338
>>668343

Спасибо за ответы.

>За строки не скажу, но предполагаю, что не осилит без твоей помощи


Вот что-то тоже так подозревал, может как-нибудь осилю полноценно затестить и с юникодом и без.

а Криску да, норм идея читнуть, вообще давно о нем не вспоминал
#400 #668589
Сосоны, поясните за GetProcAddress
Короч пытаюсь я сделать так
HANDLE hThread;
DWORD dwThread;
DWORD exThread;
HANDLE lib = LoadLibrary("ntdll.dll");
LPVOID _NtSetInformationThread = GetProcAddress(lib,
"NtSetInformationThread");
(_NtSetInformationThread) (GetCurrentThread(), 0x11,
0, 0);
А эта сука мне пишет
151 C:\Dev-Cpp\.c called object is not a function

ЧЯДНТ?
>>668601>>669236
#401 #668601
>>668589

>(_NtSetInformationThread) (GetCurrentThread(), 0x11,


>0, 0);



((void(*)())_NtSetInformationThread) (GetCurrentThread(), 0x11,
0, 0);

Неужели в сишку ВНЕЗАПНО типы завезли? Не было же.
>>668870
#402 #668850
Как в FASM запилить сложение многобайтовых чисел?

Вот этот код не компилируется: http://pastebin.com/GgjaARaW
error: value out of range. в строке mov al, [b + si]

Что здесь не так? Адрес массива b - 32-битное число, прибавляем к нему байт и получаем адрес следующего элемента. Я подумал, что надо явно указать размер числа, которое берется по адресу в скобках, но mov al, byte [b + si] тоже не компилится.
>>668872>>669236
#403 #668870
>>668601

>Неужели в сишку ВНЕЗАПНО типы завезли? Не было же.


Ты ебанутый?
>>671743
#404 #668872
>>668850

>Что здесь не так?


Разве возможна такая адресация?
#405 #669236
>>668589
Ты пытаешься вызвать указатель на void. А вызывают обычно функции. Определи правильный тип, а чтобы не запутаться и не писать лишние касты, еще и тайпдеф к нему:
// Определяем тип NtSetInformationThread, являющийся указателем на функцию с
// определенными типами аргумнтов и возвращаемого значения, с конвенцией вызова
// __stdcall (она же NTAPI).
typedef NTSTATUS (NTAPI ∗NtSetInformationThread(HANDLE,THREAD_INFORMATION_CLASS,PVOID,ULONG);

// Определяем переменную типа "указатель на функцию" и присваиваем ей значение.
NtSetInformationThread pNtSetInformationThread = (NtSetInformationThread) GetProcAddress(...);

// И вызываем.
pNtSetInformationThread(...);

>>668850
У тебя 32-битный код. Используй для адресации 32-битные регистры (ESI блять!). Алсо, ты тредом ошибся, ну да и похуй.
#406 #669404
>>636137
Спермоворы не в курсе, что уже давно продаются ноуты с предустановленным линуксом.
#407 #670576
Чет я поехал. Захотелось мне keepassx на gtk3 переписать от нефиг делать. Можете обоссать - врят ли поможет. Мб кто тоже захочет попробовать свои силы.
#408 #671280
Народ, а на каком IDE люди пилят ядро линуха? Он же прямо чистый Си с кучей мегобойтов текста - что любая студия заебеца его индексировать.
#409 #671288
>>671280
Буст с стл крестовой индексируют, а проект на си заебутся. Лол.
#410 #671307
>>671280
Торвальдс, например, юзает git, grep и вот это
http://git.kernel.org/cgit/editors/uemacs/uemacs.git/
>>671320
#411 #671320
>>671307
Есть видео где Торвальдс пишет ядро? Не представляю как можно пользоваться такими инструментами эффективно.
>>671328>>671332
#412 #671328
>>671320
Порно с ним ещё поищи. Он пробитый олдфаг, и не стоит пытаться подсесть на хуец емакса если сам Линус на нём пишет – это говноедство уровня совка. Открывай в студиях/цлионах и не парься – они и не такое дерьмо индексируют (последний правда с дикими свопами).
#413 #671332
>>671320
можешь пофапать на другого жиробаса
хуярит на имаксе онлайн

ссмотреть бесплатно без смс реистрации
https://www.youtube.com/watch?v=btGVLs4NSOM
#414 #671343
>>671280
После 'git pull' я юзаю 'ctags -R && vim <нужный-файл>'. Без 'git pull' просто 'vim <нужный-файл>'. 'ctags -R' у меня на пекарне отрабатывает за 10-15 секунд. Ещё Taglist плагин для vim юзаю, но это так, чисто для общего представления, какая хуета объявлена/определена в файле, что я смотрю в данный момент.
#415 #671688
>>671280
А нахуй всё ядро индексировать? Там есть какая-то более менее независимая центральная часть типа управления памятью/процессами/объектами ядра плюс драйверы с архитектурами.
#416 #671691
>>671280

>Народ, а на каком IDE


> IDE


Хипсторы отодвинули в сторону смуззи, отложили книгу по раби и решили посмотреть на ядро linux.
>>672072
#417 #671743
#418 #671754
>>671743
Ты уточняешь тип. А вот обратно без кастов - хуй.
>>671757
#419 #671757
>>671754
Это и есть преобразования обратно, которые без кастов не должны работать.
>>671768
#420 #671768
>>671757
Кто сказал, что не должны? Кто сказал что "самоограничение" через const должно требовать явный каст? И почему мы должны его слушать?
>>671825
#421 #671825
>>671768
Когда работают – это и означает, что нет типов. PHP и JS так работают, им норм. Почему бы и не вызвать void* как функцию? Ничего ведь не мешает.
>>671831
#422 #671831
>>671825

> Почему бы и не вызвать void∗ как функцию? Ничего ведь не мешает.


Мешает. Существуют машины, где два указателя на данные и на код могут быть численно равны, но указывать на различные сущности, поэтому Си однозначно отделяет указатели на функции от указателей на данные. Примерно потому же и void∗ нельзя разыменовывать. Ну и недостаток информации о способе вызова функции тоже мешает, да.
>>672053
#423 #671838
>>671743

>пруф


А int, void и т.д. — это не типы?
>>672053
#424 #671840
>>671743

>пруф


Ну а теперь присвой что-нибудь по указателю c.
>>671849
#425 #671849
>>671840
Он просто сектант и не признает ничего, кроме строгой типизации.
>>672053
#426 #672053
>>671831
Очевидно сишка никакой проблемы ни в первом, ни во втором не видит: http://ideone.com/qBhXL6 С каких вообще пор сишке стало не хватать информации о способе вызова функции? Всегда хватало, а тут вдруг перестало? Тут кто-нибудь сишку учил?
>>671838
Ой, я умоляю, в PHP и JS тоже есть разные типы.
>>671849
Дык говорю, типизация уровня PHP.
>>672080
#427 #672072
>>671691
проиграл
#428 #672080
>>672053
Ты скастил к указателю на функцию. Это официально UB, на нормальном компиляторе будет предупреждение.
>>672088>>672735
#429 #672088
>>672740
#430 #672652
Если какой гайд для написания простейшего ядра ОС, чтобы оно просто показало "Hello World" при загрузке в virtualbox?
Нужно ли для этого писать отдельный компилятор и libc?
>>672676>>672731
#431 #672676
>>672652
Компилятор писать не нужно, GCC вполне хватит. А писать нужно первичный загрузчик, который прочитает твой код с диска, перейдет в защищенный режим и передаст управления (придется разобраться с objcopy). Но ты можешь просто взять GRUB, который загрузит твой ELF. А вот libc придется писать. По крайней мере, простейшую puts, которая запишет твой хелловорлд в видеопамять. Погуляй по osdev.ru, наверняка там гайды есть.
>>672731
86 Кб, 713x544
#432 #672709
Дарова. Тут разве не ошибка?
>>672714
#433 #672714
>>672709
А, понял, это типа просто прототип функции.
#434 #672731
>>672652
http://wiki.osdev.org/Main_Page
>>672676
Зачем ты с людьми так неуважительно - ссылки на русскоязычные сайты даешь?
>>672783>>672793
#435 #672735
>>672080
Пишет, там gcc 5.1 – он нормальный?
>>672783
#436 #672740
>>672088
C Zver99 Edition, азаза.
#437 #672783
>>672731
На каком языке советовать инфу на русскоязычной борде?
>>672735
А чо он не нормальным должен быть-то?
>>672793
#438 #672793
>>672783
>>672731

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


Да похуй абсолютно, с чего начинать, чтобы вкатиться. Можно было, например, Кулакова посоветовать. Анон ознакомится, а потом все равно будет сам гуглить то, что ему нужно.
>>672826>>672897
#439 #672826
>>672793
Ну так хули ты выёбываешься, пёс?
#440 #672897
>>672793

>Можно было, например, Кулакова посоветовать


Брат Дуни?
#441 #673708
Зачем нужен short, если у него битность такая же, как у простого инта?

Второй вопрос: что происходит в теле цикла while
static int foo;

void bar(void) {
foo = 0;

while (foo != 255)
; //что это?
}
>>673723>>673780
#442 #673723
>>673708
Бесконечный цикл, выброшен Exception будет
>>673727
#443 #673727
>>673723
Ну там же условие!

>foo != 255



Алсо, пример отсюда.
https://en.wikipedia.org/wiki/Volatile_(computer_programming)#Example_of_memory-mapped_I.2FO_in_C

Там видимо идёт поллинг этой переменнной, но что именно делает ; я не понимаю.
>>673731
#444 #673730
Хуйпизда это вот все
#445 #673731
>>673727

>что именно делает ; я не понимаю


Нихуя не делает. Тело цикла должно содержать хотя бы один оператор, а каждый оператор должен заканчиваться символом ';'. В данном случае, оператор не содержит ни одного выражения, т.е. является пустым.
>>673735
#446 #673735
>>673731
Ну я тащемта про то же. Чем тогда мотивировались те, кто запостил этот пример на вики? выше ссылка
>>673741
#447 #673741
>>673735
Бля, там нет никакого поллинга самого по себе в этой программе. Это просто пример, когда компилятор может оптимизировать код и заменить условие на while(1). Но если переменная foo может быть изменена чем-то извне, в отрывае от этой программы, то тогда нужно юзать volatile, чтобы компилятор оставил проверку выражения перед каждой итерацией.
>>673749>>673770
#448 #673749
>>673741
Ааа, то есть ';' в этом примере это такой placeholder. Ok.
94 Кб, 493x298
#449 #673754
Что за омское объяснение? Как он получает 65520?
2^n в случае с 16 = 2^5 (т.к. в десятичном представлении разрядов пять), то есть 2^n = 32
Значение величины без знака = 16
Итого у меня выходит 16, а у Подбельского — 65520

Где я проебался?
>>673761>>673768
#450 #673761
>>673754
n - количество битов используемых для хранения числа заданого типа, а не количество рязрядов в конкретном числе. Если для инта используется 16 битов то 2^16 - 16
>>673770
#451 #673768
>>673754
2^16 - 16 = 65536 - 16 = 65520
#452 #673770
>>673741

>will notice that no other code can possibly change the value stored in foo


А как вообще что-то может изменить значение переменной вне функции, где она определена?
Допустим это ячейка памяти микроконтролёра, которая может меняться извне, но тогда у неё есть конкретный адрес. А в этом псевдокоде при рантайме только определяется её адрес.
>>673761
А, всё понял. Было такое подозрение, но что-то затупил.
Мне всё равно что-то непонятно, почему при применении "-" точка отсчёта именно 65536
Просто придумали такую условность, чтобы не городить преобразование типа на ровном месте?
>>673774>>673784
#453 #673774
>>673770

> как вообще что-то может изменить значение переменной вне функции


Ну например ты зарегал какой-нибудь асинхронный ввод/вывод, зарегал флаг register_flag(&foo) и сидишь в таком простом spinloop, ждешь завершения. Произошло прерывание, и обработчик поменял foo.
>>673779
#454 #673779
>>673774
Я нуб в сишке пока что, и твои слова мне мало о чём говорят, остаётся только на веру принять, лол.
>>673790
#455 #673780
>>673708
Не слушай даунов, глобальная переменная foo может где то изменяться, может быть в другом потоке, может еще где, хотя еще по идее должна быть волатильной.

>Зачем нужен short, если у него битность такая же, как у простого инта?


Это ты про какую платформу говоришь то?
По стандарту char <= short <= int
На 32 битной short = 16bit, int = 32 bit
>>673787>>673790
#456 #673784
>>673770

> Просто придумали


Гугли "дополнительный код".
67 Кб, 840x676
#457 #673787
>>673780
Меня вот эта таблица смутила. Тут для IBM PC. Всё равно странно, что там битность одинаковая.
>>673790>>673792
#458 #673790
>>673779
Ну вот тебе простой, но надуманный пример: http://ideone.com/Y26JzT

>>673787
Таблица показывает общепринятые размеры для одной конкретной платформы (x86), для других платформ размеры могут быть другими. Лишь бы соблюдалось неравенство, которое >>673780 упомянул.
#459 #673792
>>673790
>>673787
Ой, это вообще для 16-битного кода. На 32-битных машинах short - 16-битный, int (и, соответственно, enum) и long - 32-битные, long long - 64-битный.
#460 #673802
>>673790
Ради интереса, а в твоём надуманном примере volatile обязательно? Компилятор сам не определит, что оптимизация здесь не уместна?
>>673805
#461 #673805
>>673802
Не определит. Внутри цикла ты локальную переменную stop не меняешь, поэтому он мог бы считать, что она не меняется. Если бы не volatile. Но в моем надуманном примере можно выкинуть локальную переменную и указатели, сделав глобальную (ну, почти - видимость static ограничена модулем) static volatile bool ctrl_c_trapped и устанавливать в обработчике сигнала сразу ее, и ее же проверять внутри цикла.
>>673812>>673818
#462 #673812
>>673790
Интересно.
>>673805
А где она меняется?
Я вижу только присвоение адреса stop определённой ранее termination_flag_ptr
termination_flag_ptr = &stop;

И как это вообще работает?
Сигнал прерывания приходит в функцию trap_ctrl_c но как?! там же выполняется другой цикл другой фукнции!, в ней меняется *termination_flag_ptr на тру зачем условие на проверку незанулённости указателя вообще?, а дальше-то что?
Каким образом это присвоит true стопу?
>>673821>>673822
#463 #673818
>>673805
Да не, в этом примере справился
С выключенной оптимизацией и c volatile:
http://ideone.com/2p9qLu
С выключенной оптимизацией и без volatile:
http://ideone.com/N1P9QP
>>673820>>673821
#464 #673820
>>673818

>Да не, в этом примере справился


Если че, то с метки L4 смотри.
#465 #673821
>>673812
ОС обрабатывает Ctrl+C специальным образом (в *nix приложению сигнал посылается, в Windows это имитируется), рантайм приостанавливает и сохраняет состояние того, что выполнялось (регистры процессора, вся хуйня) и вызывает установленный тобой обработчик SIGINT, а после того, как обработчик вернет управление, восстанавливает состояние и продолжает выполнять код. Ну а обработчик просто по указателю меняет значение переменной stop.

>>673818

> справился


То, что в конкретном случае все работает, как надо, не гарантирует, что оно будет работать, как надо с другой версией компилятора, на другом компе и т. д. Надеяться на компилятор НЕЛЬЗЯ.
>>673823>>673830
#466 #673822
>>673812

>в ней меняется termination_flag_ptr на тру


termination_flag_ptr - это и есть стоп. Там хранится адрес переменной stop, а через * мы обращаемся к самой переменной.
#467 #673823
>>673821
Да я же не спорю, просто ты так категорично заявил, что компиль глупенький, что аж засвербило.
>>673836
#468 #673825
>>629715 (OP)

>- Классика от Отцов: http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf



Привет! Как там в 1988?
>>673836
#469 #673830
>>673821
А какова функция строчки

>signal(SIGINT, trap_ctrl_c);


она только определяет в какую функцию посылается сигнал?
Или она постоянно выполняется? Я запутался.
>>673834
#470 #673834
>>673830
Регистрирует. Почитай Роберта Лава Системное программирование Линукс, очень полезная книженция.
>>673837
#471 #673836
>>673823

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


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

>>673825
Почитай первый тредик. Большинством голосов было решено, что читать стоит. Если тебе что-то не нравится, там есть еще и C Primer Plus и ебаный hard way.
>>673840>>673852
#472 #673837
>>673834
Запишу себе. Сейчас мне бы подбелку для начала осилить и все задачки из него перерешать.
#473 #673840
>>673836

>ебаный hard way.


Почему ебаный?
>>673847
#474 #673847
>>673840
Си - не тот язык, который можно выучить по туториалом. Он простой, но в нем есть множество неочевидных подводных камней. Приношу свои извинения, если мое определение хардвея тебя задело.
>>673850
#475 #673850
>>673847
Ну а как его в таком случае учить и чем пример + в этом смысле лучше?
Можно конечно лезть писать на одних циклах и ифах, но это же хуйня полная.
Я могу простенькие проги писать, но чужой промышленный код на C я не понимаю, там очень много используются конструкции, о которых у меня представление в лучшем случае приблизительное.
>>673856>>673858
#476 #673852
>>673836

>Большинством голосов было решено


Я не про K&R мир праху R и долгих лет K, которые достойны всяческого уважения. Я про упоротых, изучающих С в 2016.
>>673856
#477 #673856
>>673850
Когда я учил язык, я читал все, что было доступно на тот момент (хотя доступно было не так много).

>>673852
Ну вот как перепишут хотя бы одну из распространенных ОС на другом языке, тогда и будем с тобой про упоротых разговаривать. А еще лучше тогда, когда embedded с сишечки перекатится.
>>673860
#478 #673858
>>673850

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


Итак, 2043 год.
Виртуальная реальность процветает.
Изобретена телепортация через компьтер - между двумя экранами возникает
связь, и телепортируемый объект в цифровом виде передается по Сети адресату.

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

- деда, а деда, а правда что раньше программисты знали ассемблер?
- да, внучек, сорок лет назад все было совсем по-другому...
вот помню спиздил я пароль на интернет у соседа - и в тюрьму угодил...
- деда, а деда, а правда что ты умеешь ворды ксорить в уме?
- да, было дело... как я ксорил ворды в 2000-м!... а как я ксорил дворды
в 2010-м!... а в 2020-м, вот это был ксор!!!!
- деда, а деда...

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

Гнусный металлический голос где-то рядом картавя произнес:
"Ваше время истекло. Введите номер кредитной карточки..."

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

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

- ненавижу, ненавижу... сквозь слезы трясся дед, злым взглядом
буравя монитор.
На экране того красовалась надпись: "Попытка несанкционированного
доступа пресечена".
В добавок из динамика донесся хриплый прокуренный смех и голос,
нечто навроде "получил свои 220 вольт, придурок? хакер, бля, недоделанный."

И тут стальная решимость появилась в старческих глазах.
Старик отключился от сети и принялся что-то писать в хексах...
Прошло два месяца.

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

Пара нажатий на клавиши - и перед экраном компьютера материализовались
две бутылки холодной пепси-колы.

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

Аааааааааааа! - взвыл от ужаса неудачливый хакер.
Глаза его быстро-быстро забегали по сторонам.
- Опять менты придут, коаксилами отпиздят. Но назад уже не повернуть.
Идти некуда.
Прокуренные желтые пальцы забегали по клавиатуре.
И через пять минут, роняя слюни, старик, с трудом распрямившись встал
и ударил кулаком по ENTERу.

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

- Ну что, попался, СУКА??? В комнату медленно зашли трое здоровенных
амбалов в синих формах. На рукаве у каждого эмблема - четырехцветное
развевающееся окошко и белая надпись - Microsoft.

Старик медленно расстегнул ширинку.
Достал свой сморжопившийся хакерский хуй.
И начал ссать в экран монитора....

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

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

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

Пуля ранила хакера в живот.
Довершили дело майкрософские ублюдки, добив деда ногами...

Вот такая вот грустная сказка.
#478 #673858
>>673850

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


Итак, 2043 год.
Виртуальная реальность процветает.
Изобретена телепортация через компьтер - между двумя экранами возникает
связь, и телепортируемый объект в цифровом виде передается по Сети адресату.

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

- деда, а деда, а правда что раньше программисты знали ассемблер?
- да, внучек, сорок лет назад все было совсем по-другому...
вот помню спиздил я пароль на интернет у соседа - и в тюрьму угодил...
- деда, а деда, а правда что ты умеешь ворды ксорить в уме?
- да, было дело... как я ксорил ворды в 2000-м!... а как я ксорил дворды
в 2010-м!... а в 2020-м, вот это был ксор!!!!
- деда, а деда...

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

Гнусный металлический голос где-то рядом картавя произнес:
"Ваше время истекло. Введите номер кредитной карточки..."

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

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

- ненавижу, ненавижу... сквозь слезы трясся дед, злым взглядом
буравя монитор.
На экране того красовалась надпись: "Попытка несанкционированного
доступа пресечена".
В добавок из динамика донесся хриплый прокуренный смех и голос,
нечто навроде "получил свои 220 вольт, придурок? хакер, бля, недоделанный."

И тут стальная решимость появилась в старческих глазах.
Старик отключился от сети и принялся что-то писать в хексах...
Прошло два месяца.

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

Пара нажатий на клавиши - и перед экраном компьютера материализовались
две бутылки холодной пепси-колы.

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

Аааааааааааа! - взвыл от ужаса неудачливый хакер.
Глаза его быстро-быстро забегали по сторонам.
- Опять менты придут, коаксилами отпиздят. Но назад уже не повернуть.
Идти некуда.
Прокуренные желтые пальцы забегали по клавиатуре.
И через пять минут, роняя слюни, старик, с трудом распрямившись встал
и ударил кулаком по ENTERу.

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

- Ну что, попался, СУКА??? В комнату медленно зашли трое здоровенных
амбалов в синих формах. На рукаве у каждого эмблема - четырехцветное
развевающееся окошко и белая надпись - Microsoft.

Старик медленно расстегнул ширинку.
Достал свой сморжопившийся хакерский хуй.
И начал ссать в экран монитора....

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

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

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

Пуля ранила хакера в живот.
Довершили дело майкрософские ублюдки, добив деда ногами...

Вот такая вот грустная сказка.
#479 #673860
>>673856

>embedded с сишечки перекатится


Приходи к нам в 2016! Нам С++ завезли.
>>673867>>673869
#480 #673867
>>673860
Переусложнён и нет того изящества. Не нужен.
#481 #673869
>>673860
Вам-то может и завезли, а я тут на днях прошивку для мультиварки реверсил и никаких плюсов там не заметил.
>>673871
#482 #673871
>>673869
Встроенных рецептов не хватило? Или решил поднять медиасервер?
>>673911
#483 #673911
>>673871
Хочу научить Sublime Text варить кашу.
#484 #674384
Программач, подскажи.

Пердолюсь с stm32 и индикатором hd44780.
Надо реализовать иерархическое меню, по типу:
1 Уй
1.3 Изда
1.3.2 Джигурда
Во время навигации по меню надо обновлять строку на индикаторе и запускать функцию которая будет чего-то делать (считывать данные с цифрового энкодера, чего-то включать/отключать и т.п.).
Как это правильно реализовать?

Посмотри, нормально ли я придумал?
Хочу сделать представление меню в виде массивов структур
typedef struct {
int StrPointer;
int Pointer;
uint8_t PointerType;
} MenuStructTypeDef;
Где,
StrPointer - указатель на строку (длина фиксирована), для вывода названия функции или дочернего подменю.
Pointer - указатель на функцию или массив.
PointerType - тип предыдущего указателя, т.е. определение чем является данный пункт меню: конечной функцией или точкой входа в подменю.
И соответственно хочу рекурсивно подобным образом заполнить все дочерние подменю, т.е. массивы.
В нулевом элементе каждого массива данные хранить не буду, запишу только его длину в каком нибудь поле структуры. (иначе не понятно до какого значения его можно обходить)
Вроде в такой реализации можно без проблем будет проходить по меню и вниз и вверх. Памяти займет не так много. И выглядеть будет менее убого, чем вложенные case/enum.
Только вот проблема: Никак не могу придумать как можно объявить данные массивы структур константами, так чтобы они попали во flash память, а не RAM? Ведь все значения полей структур всех массивов будут определены уже на момент компиляции.
>>674825
#485 #674825
>>674384

> Никак не могу придумать как можно объявить данные массивы


Не выделывайся. Сделай максимально банально и просто: http://ideone.com/XVDif6 Всё константно, обходить - c проверкой .title != NULL. При переходе в подменю текущее меню пихать в какой-нибудь стек, пункт Back (если нужно) можно добавлять кодом (незачем его хранить везде). Хэндлеры у подменю - нужная штука, ибо позволяют до захода, допустим, в меню Bluetooth, проверить его наличие и сказать "Нет у меня никакого Bluetooth".
#486 #681553
Что сделать чтобы printf() выводила нормально русские буковки?
>>681767>>681934
#487 #681734
плюсобляди-то уже себе мультимедийную шапку запилили, а вы сидите в своем текстовом тренде как бирюки
https://2ch.hk/pr/res/681348.html (М)
#488 #681761
>>681734
Нам норм. К тому же это такая аналогия: в шапке крестотреда хуева туча свистоперделок и дохуя всего, что аж блять она из монитора начинает вытекать, а у нас всё чётко, лаконично.
#489 #681767
>>681734
В последней строке первого поста ссылка на шапку.

>>681553
Ось, компилятор? Проще всего сохранить исходник с той же кодировкой, что и у консоли.
>>682325
#490 #681878
>>681734
крестобляди - почти как уже сишарпобляди и джавабляди - обмазываются своей поеботой и не замечают очевидных вещей. Все правильно анон сказал - ярая аналогия по языкам.
#491 #681934
>>681553
locale.h подключить по-моему.
>>682325
#492 #681940
>>681734
Смотрится почти как на нормальных форумах, но всё-равно немного убого из-за уродливого выравнивания из-за рудиментарной картинки в ОПпосте.
#493 #682325
>>681767

>Ось, компилятор? Проще всего сохранить исходник с той же кодировкой, что и у консоли.


Win10 x64 VS15.
>>681934
Спасибо попробую.
>>682342
#494 #682342
>>682325
setlocale(LC_ALL, "Rus")
>>682348>>682436
#495 #682348
>>682342

> LC_ALL


А потом будет "у меня scanf сломался, флоаты не читаются, помогити"?
>>682423
#496 #682423
>>682348

>scanf


>2076


Иди нахуй.
>>682425>>682459
#497 #682425
>>682423
И чем же мсье пользуется?
>>683198
#498 #682427
Google -> scanf safe version
3 Кб, 659x384
3 Кб, 659x384
#499 #682436
>>682342

>setlocale(LC_ALL, "Rus")


Было. --> Стало.
>>682440>>682459
#500 #682440
>>682436
setlocale(LC_ALL, "") попробуй
>>682452
#501 #682452
>>682440
Нет, но всё равно спасибо!
#502 #682459
>>682436
Проверь, что у исходника кодировка UTF-8 с BOM (она же UTF-8 with Signature). В Microsoft недавно сдались и обещали сделать распознавание без BOM по умолчанию, но это вроде в бетке еще.

>>682423
Но, тем не менее, до того, как человек узнаёт о других, безопасных функциях, а заодно и о локалях, у него будет scanf, который сломается из-за десятичного разделителя.
10 Кб, 313x337
1 Кб, 420x75
#503 #682532
>>629715 (OP)
Чому не робiт код?
Хочу поменять местами значения переменных.
#504 #682534
>>682532
Он робiт. Просто ты в функции swap печатаешь адреса, а не значения.
>>682535
#505 #682535
>>682532
>>682534
У тебя же в main 4 3 выводится, хотя x было 3, а y =4
#506 #682777
>>682532
И вот он, класический выстрел себе в ногу.
>>682780>>683022
#507 #682780
>>682777
Нет.
#508 #683018
Не подскажите какое-нибудь API для работы с HTTP? Или надо само пилить на основе стандарта?
>>683137>>683193
#509 #683022
>>682777
ты не шаришь, тут нет выстрела
#510 #683137
>>683018
Ну всякий курл и прочие либввв.
#511 #683193
>>683018
Есть либы охуенные, забыл название.
#512 #683198
>>682425
fscanf же
#513 #683416
Перекатите тред, а.
ПЕРЕКАТИЛИСЬ #514 #683574
#515 #688928
>>638717

>10Гб


>надо ставить гномы/кеды.


>Для xfce не подходит.


Отлично же запускается всё по идее
>>689087
#516 #689087
>>688928
Перекатывайся, слоупок.
Тред утонул или удален.
Это копия, сохраненная 3 апреля 2016 года.

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

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