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


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

Check this out!


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 521 | 28 | 144
Назад Вниз Каталог Обновить

C Programming Language #24 Аноним # OP  01/09/17 Птн 20:04:58  1055733  
C Programming L[...].png (78Кб, 792x1023)
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- №20: https://arhivach.org/thread/254158/
- №21: https://arhivach.org/thread/260316/
- №22: https://arhivach.org/thread/262491/
- №23: https://arhivach.org/thread/277223/

Шапка: http://piratepad.net/bJ1SdmkZyu
Аноним 01/09/17 Птн 20:10:04  1055741
>>1055733 (OP)
первыйнах
Аноним 01/09/17 Птн 20:25:53  1055754
>>1055733 (OP)
>ООП, например...
А что, в С (не С++) завезли ООП?
Аноним 01/09/17 Птн 20:28:18  1055758
>>1055733 (OP)
Из-за вас я сначала думал, что вертикальный членец в капче это побитовое "ИЛИ"
Аноним 01/09/17 Птн 20:35:06  1055766
>>1055733 (OP)
>Что читать:
>- Классика от Отцов: http://www.cypress.com/file/56651/download

Access Denied
You don't have permission to access "http://www.cypress.com/file/56651/download" on this server.
Аноним 01/09/17 Птн 20:35:46  1055768
>>1055766
УМВР
Аноним 01/09/17 Птн 20:36:20  1055770
>>1055768
Что?
Аноним 01/09/17 Птн 20:36:50  1055771
>>1055770
Проблемы на вашей стороне
Аноним 01/09/17 Птн 20:41:36  1055778
>>1055771
Ну нифигасе. Дают линк, доступный только избранным... так предупреждайте, что не для всех.
Хотя бы как книга называется?
Аноним 01/09/17 Птн 20:42:33  1055780
>>1055754
Не завезли, но можно напердолить структруами и макросами
Аноним 01/09/17 Птн 20:43:15  1055783
>>1055778
Керниган, Ритчи - "Язык программирования С"
Аноним 01/09/17 Птн 20:43:54  1055786
>>1055780
Ну это-то понятно. Не помню, а шаблоны в C есть?
Аноним 01/09/17 Птн 20:45:13  1055787
>>1055786
Нет. Только в С++
Аноним 01/09/17 Птн 20:45:55  1055788
>>1055783
А если я поучу по книге 80х годов (там классно написано) - смогу откомпилить?
Или современные компиляторы несовместимы со старыми версиями C?
Аноним 01/09/17 Птн 20:46:33  1055790
>>1055788
Стандарт?
Аноним 01/09/17 Птн 20:49:02  1055792
>>1055788
Там рассматривается си в стандарте 89 года надо читать второе издание, в первом рассматривается старый си. С89. С тех пор вышло только 2 стандарта - С99 и С11. В принципе любой компилятор будет поддерживать С89, так что проблем не возникнет.
Аноним 01/09/17 Птн 20:52:14  1055796
>>1055790
Не знаю, книга 1984 года
Язык Си. М.Уэйт, С.Прата, Д.Мартин
Аноним 01/09/17 Птн 20:55:57  1055799
>>1055796
>С.Прата
Есть шестое издание, там уже рассматривается самый свежий стандарт С11, на торрентах есть.
Называется Язык программирования Си Лекции и упражнения
Аноним 01/09/17 Птн 20:56:49  1055803
>>1055796
У тебя могут возникнуть некоторые проблемы. Старый синтаксис поддерживается, но категорически не рекомендуется. Почему именно эта книга? Почему нельзя взять прату или к&р из шапки? Ты любишь сложности?
Аноним 01/09/17 Птн 20:57:34  1055806
>>1055799
Но таких иллюстраций уже нет, и к тому же она бумажная, издана качественно на хорошей бумаге - читать приятно. Прямо влюбился.
Аноним 01/09/17 Птн 21:14:53  1055828
>>1055803
>Старый синтаксис поддерживается, но категорически не рекомендуется
Можно пример старого синтаксиса, который категорически не рекомендуется?
Строки?
Аноним 01/09/17 Птн 21:21:28  1055842
Под Виндой на чём компилировать?
Оболочки/IDE есть для удобства тоже под винду?
Аноним 01/09/17 Птн 21:30:36  1055858
>>1055842
Дополнение: только не VC++, что-нибудь полегче.
Аноним 01/09/17 Птн 21:36:01  1055865
>>1055828
Ну например:
#include <stdio.h>

foo(bar, baz)
double baz;
{
        printf("%d %f\n", bar, baz);
        return 12345;
}

main() { return foo(1, 2.3); }

>>1055842
Code::Blocks+MinGW, Pelles C, любой текстовый редактор (Sublime Text, Atom, Notepad++, Блокнот)+MinGW или clang.
Аноним 01/09/17 Птн 21:45:11  1055877
>>1055865
Спасибо
Аноним 01/09/17 Птн 21:55:01  1055885
>>1055865
Неявный инт? Не думаю, что это такая уж огромная неприятность.
> return 12345
А так никто со времен Кернигана и Ритчи не делает. Корректно завершившаяся программа должна вернуть ноль.
Аноним 01/09/17 Птн 21:57:22  1055888
>>1055842
Clion + mingw-64
Либо visual studio
Аноним 01/09/17 Птн 22:00:52  1055891
>>1055885
Я скорее про пустые скобки вместо (void), про старый синтаксис аргументов, но и про неявный int тоже помнить нужно.

> Корректно завершившаяся программа должна вернуть ноль
А моя некорректно завершилась с кодом ошибки 12345. Я автор, я так вижу.
Аноним 01/09/17 Птн 22:54:46  1055915
>>1055888
>Clion
говноед
Аноним 02/09/17 Суб 03:44:06  1055975
Посаны смотрите шо нашел, ахуительно.
https://www.youtube.com/watch?v=3mgGQR6oGxI
Аноним 02/09/17 Суб 04:05:03  1055976
>>1055975
что это за говно да еще и на обезьяньем языке?
Аноним 02/09/17 Суб 05:09:11  1055980
>>1055976
Типо симуляция населения. Меня вдохновило.
Аноним 02/09/17 Суб 06:36:52  1055987
>>1055980
>Меня вдохновило.
на мгогодетность?
Аноним 02/09/17 Суб 08:31:09  1055997
>>1055987
Нет, а что?
Аноним 02/09/17 Суб 10:37:07  1056019
>>1055997
>Нет
Ничего хорошего
Аноним 02/09/17 Суб 10:37:35  1056020
2017-09-02 1034[...].png (38Кб, 826x479)
2017-09-02 1034[...].png (17Кб, 813x197)
Сап, есть один тип sigset_t, в котором каждому биту соответствует включенный или отключенный сигнал с номером signo.
На пикрил функции для основными действиями с этим типом: sigaddset - добавить сигнал в набор, sigdelset, sigismember - проверить, является ли сигнал членом сета.
Функция sigdelset непонятна. Почему в add нет лишних скобок в правой части, которые есть в del?
Алсо, почему в sigdelset вообще происходит выключение нужного бита, ведь там побитовое И?
И эти операции не должны затронуть остальные биты, а sigdelset занулит же там всё, не?
Аноним 02/09/17 Суб 11:07:07  1056030
>>1056020
>Функция sigdelset непонятна. Почему в add нет лишних скобок в правой части, которые есть в del?
Имхо, вкусовщина - просто выделили выражение мкобками, хотя я не эксперт в Си
Аноним 02/09/17 Суб 12:05:48  1056039
>>1056019
Тебе не нравится бездетность?
Аноним 02/09/17 Суб 12:06:41  1056040
>>1056020
>Пик
Кончил.
Аноним 02/09/17 Суб 12:06:55  1056041
>>1055975
Усложнённая игра Life?
Аноним 02/09/17 Суб 12:07:38  1056042
>>1056041
Что может быть сложнее Life? Вот именно, ничего. Плохое сравнение.
Аноним 02/09/17 Суб 12:07:55  1056043
>>1056039
Неа - это неправильно
Аноним 02/09/17 Суб 12:08:25  1056044
>>1056042
Сложнее? Ты не в курсе о чем речь.
Аноним 02/09/17 Суб 12:34:01  1056050
>>1056043
Согласен.
Аноним 02/09/17 Суб 12:34:44  1056051
>>1056044
https://ru.wikipedia.org/wiki/%D0%96%D0%B8%D0%B7%D0%BD%D1%8C_(%D0%B8%D0%B3%D1%80%D0%B0)
Аноним 02/09/17 Суб 14:19:43  1056103
>>1056051
Блин, этож надо столько написать. Поверь, там все проще на практике.
Аноним 02/09/17 Суб 14:53:42  1056116
>>1056103
Ну кому как.
Аноним 02/09/17 Суб 14:59:57  1056118
Чёт опять делать нехуй.
Написал алгоритм проверки номеров кредиток и заодно самотест к нему (первые 4 и последние 4 цифры взял от реальной карты). Сам не погромист ни разу.

https://pastebin.com/nAZ5mQkb
Аноним 02/09/17 Суб 15:00:22  1056119
>>1056118
*первые 6 и последние 4
Аноним 02/09/17 Суб 15:15:36  1056125
>>1056118
си для этого нинужон
Аноним 02/09/17 Суб 17:33:48  1056193
Как посмотреть во что развернется макрос?
Написано что нужно использовать -E или -E -dM. Но оно ничего подобного не выводит.
Аноним 02/09/17 Суб 18:06:55  1056216
>>1056193
Всмысле не выводит?
gcc -E in.c -o out.c
Что в out.c? Дай примеров.
Аноним 02/09/17 Суб 18:18:07  1056222
>>1056216
Через встроенный документ почему то не работает, а с файлом работает.
Аноним 02/09/17 Суб 19:19:07  1056264
>>1056222
> встроенный документ
Вообще не понял, разве файлом не удобней?
Аноним 02/09/17 Суб 21:34:35  1056294
>>1056264
Может и удобней, я когда пробовал мне лень было файл создавать.
Аноним 02/09/17 Суб 23:32:52  1056318
>>1056020
по идее ошибка. забыли ~.
Аноним 02/09/17 Суб 23:34:45  1056321
точнее если ~(sigset_t)
Аноним 03/09/17 Вск 09:43:04  1056392
>>1056321
Ну, при приведении к sigset_t реализация автора, как я понял, всё в единицы обращает.
Аноним 03/09/17 Вск 09:43:30  1056393
>>1056392
> при приведении к sigset_t нуля
Аноним 03/09/17 Вск 09:46:58  1056395
>>1056321
Да, ты прав, там по-любому перед скобками ~, потому и скобки.
Аноним 03/09/17 Вск 12:25:12  1056429
>>1056395
или даже единицы в обоих местах нужно привести к sigset_t. просто если sizeof(sigset_t) > sizeof(int) то работать не будет.
Аноним 03/09/17 Вск 13:18:21  1056448
>>1056429
sizeof(sigset_t) = sizeof(int)
Забыл написать.
Там для 31 различных сигналов
Аноним 03/09/17 Вск 14:09:17  1056476
Зачем вам Си? Лабы в универе писать? Устроиться червем-байтоебом и получать всю жизнь столько, сколько получает жуниор-пхпшник? Дрочить на линупш и писать опен соурсе?
Или есть какие-то годные варианты, которых я не знаю?
Не ради траллинга спрашиваю. Чем занимаются си-пограммисты?
Аноним 03/09/17 Вск 14:43:00  1056510
>>1056476
Даже C++ не расширенная версия Си. Они эволюционировали по своему и у них свои стандарты. Есть такие вещи которые не существуют в C++, например как массив переменной длины, а так же сложные числа. Но обратно же, такие вещи как объекты, шаблоны, стандартные библиотеки не поддерживаются Си. Можешь почитать об этом на досуге.
Во встроенных системах и системном программировании, Си все еще главный доминирующий язык, потому что ты, обычно не нуждаешься в объектах нежели в обращений к низкоуровневым вещам типа прямого интерфейса оборудования. Более того, у тебя более точные требования по времени и вместительности доступной памяти. Представь как бы ты вместил кучу информации с высокой подачей с помощью объектов С++ в пяти сот байтов микро-контроллера оперативки? Линуксы написаны на C. Другие же языки, даже включая C++, предназначены для других нужд, и в глаза Линукса он - Ужасен.
Большинство людей кстати после выхода Си остались на Ассемблере, боялись уходить от традиций. Несмотря на то, что у Си был намного лучше код.
С++ стал другим языком для других нужд, пусть даже и похожим на Си, но он потерял низкоуровневые способности, типа доступа к процессорному влиянию. Т.е такие языки как Си или Фортран это системные языки.
Да, есть годные варианты, о которых ты не знаешь. Но я намекну, почему он все еще популярен в наше время: Операционные системы, Языковые компиляторы, Ассемблеры, Интерпретаторы, Дата-Базы, Драйвера, Утилиты, Движки игр и списочек продолжается.
Аноним 03/09/17 Вск 14:47:56  1056516
>>1056476
Я взялся за него, потому что Страуструп сказал в своей книжке, мол, что я обязан знать Си, чтобы изучить C++ и использовать его полную силу. Да конечно не обязательно знать Си, чтобы пользоваться С++, но я подумал, знание еще одного языка это не помеха, а лишь еще одно преуспевание.
Аноним 03/09/17 Вск 15:03:59  1056528
Анончики помогите дауну.
Задача: при вводе a,b,c выводить "Right", при вводе q завершать программу, при вводе остальных знаков писать "Wrong".
Вот мой код:

#include <stdio.h>

int main (void){
char c;
while (scanf ("%c",&c), c != 'q')
{
if (c >= 'a' && c <= 'c')
printf ("Right \n");
else
printf ("Wrong \n");
}
return 0;
}

Ввожу a получаю :
Right
Wring


Ввожу e получаю :
Wrong
Wring

Где ошибка? Заранее благодарю.
Аноним 03/09/17 Вск 15:39:32  1056553
Безымянный.png (11Кб, 752x285)
>>1056528
На вход поступает символ '\n', тебе нужно от него избавиться, например, так:
Аноним 03/09/17 Вск 15:48:15  1056561
>>1056528
Ему нужно чтобы при каждом неправильно набранном значений об этом намекалось.
Т.е введет adc
Должно выводиться - right wrong right
Если abc - Right Right Right
Если ggg - Wrong wrong wrong
У тебя условие истинно в любом случае, алсо wrong тоже выведется, потому что значение истинно.
Аноним 03/09/17 Вск 15:48:33  1056563
>>1056553
>>1056561

Аноним 03/09/17 Вск 16:13:46  1056573
>>1056553
Спасибо
Аноним 03/09/17 Вск 16:31:17  1056589
>>1056561
Если ввести bac cab bca cba и т.д выводится right
Если ввести abcabc выводятся лишние значения
Если ввести bbb или aaa или ccc выводится - Right
Будут годные советы? Кто нибудь?
Аноним 03/09/17 Вск 16:40:56  1056596
>>1056448
>Там для 31 различных
ну, int может быть и 16 битным.

либа для какого-то специфичного устройства?
Аноним 03/09/17 Вск 17:43:43  1056639
>>1056596
Это Linux 2.4.22.
Книга Advanced Programming in the UNIX environment
Аноним 03/09/17 Вск 18:36:41  1056658
>>1056639
ну да он вряд ли на 16 бит запускаться будет.
Аноним 03/09/17 Вск 18:53:16  1056663
хотя если бы и запускался, система же сама определяет типы. хотя я не очень понял как это, есть типа какая-то специальная бумажка, которая советует компиляторам делать так, как там написано?

достаточно вспомнить разность int,long на винде64 и лине64.
Аноним 03/09/17 Вск 18:57:07  1056664
ну или как-то так. ведь они же ещё сами должны как-то компилироваться. ну и наверно для совместимости с библиотеками, с апи.
Аноним 03/09/17 Вск 19:05:08  1056669
image.png (16Кб, 406x108)
>>1056596
>>Там для 31 различных
>ну, int может быть и 16 битным.
Если signet_t, значит это POSIX. Если POSIX, то int не может быть 16-битным. См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
Аноним 03/09/17 Вск 19:07:50  1056673
image.png (7Кб, 299x70)
>>1056669
Олсо
Аноним 03/09/17 Вск 20:23:07  1056721
>>1056476
Сравнивать программирование с написанием веб-говна на PHP нельзя. Ты бы еще PHP в математикой сравнил. Это разные вещи.

Вчера вот заглядывал в сырцы Python - так там куча .c и .h файлов. Уверен, что и много другого интересного софта написано на C. А чтобы его например пропатчить, нужно C знать. Да и вообще это другое программирование, нежели на скриптоязыках. Ты программированием ради денег занялся или тебе что-то в нём понравилось?
Аноним 03/09/17 Вск 20:58:00  1056742
>>1056589
Не совсем понял условие, но наговнокодил вот это: https://pastebin.com/yR5RxYTS

Сам начинающий, прошу кому не влом - максимум критики по коду.
Аноним 03/09/17 Вск 22:50:33  1056830
>>1056669
>Если signet_t, значит это POSIX
да вроде ничего это не значит. как захотят так и сделают, в контексте ос.
Аноним 03/09/17 Вск 22:53:51  1056833
хотя тогда, наверно, ушли бы от от несоответствующего имени. хуй знает, надо смотреть, в чём есть не полная поддержка позикса в линуксе и бзд.

сложно это всё.
Аноним 03/09/17 Вск 23:38:41  1056847
>>1056830
>да вроде ничего это не значит
Не нашёл sigset_t в голом C. Значит POSIX.
Аноним 03/09/17 Вск 23:56:36  1056853
А чего это у вас K&R на английском и второе издание? Вот вам третье на русском
http://www.programming1189.ru/files/Kern_Ritch.pdf
Аноним 04/09/17 Пнд 00:29:05  1056859
>>1056853
Потому что программист должен знать английский, тем более, если он не на сишечке пишет, а не на каком-нибудь jQuery. А что касается третьего издания, то изданий два, а русское "третье" - багфикс для русского перевода второго.
Аноним 04/09/17 Пнд 00:31:50  1056860
>>1056859
>Потому что программист должен знать английский, тем более, если он не на сишечке пишет, а не на каком-нибудь jQuery
такте то комплексы.
Аноним 04/09/17 Пнд 00:41:26  1056862
>>1056860
Очередной типичный для программистов таракан, что поделать.
Аноним 04/09/17 Пнд 03:13:22  1056888
>>1056860
Какие комплексы? Большинства годных статей на русском нет. Либо ты макака, потому что тебе негде учиться, либо ты осознаешь ситуацию и учишь язык. Это не говоря уже об общении с другими программистами и комментариях в коде.
Аноним 04/09/17 Пнд 03:53:49  1056891
>>1056888
у тебя какая-то каша в голове. с чего ты решил, что всем нужно читать годные, что есть только на английском, твоему мнению, статьи, и читать исходники на английском?

какой-то максимализм выпирает. как кто хочет, так пусть и учится. ты лучше свои навыки реализовывай и не выёбуйся.
Аноним 04/09/17 Пнд 04:19:10  1056892
>>1056742
>Counter
Я тоже об этом подумал, но ты тут очень много кода впихнул. Можно создать набор символов - образцов и потом программа по ним делает сравнение, но и у тебя неплохая идея со счетчиком. Т.е псевдокод -
Принять значение
Сравнить с [Переменная]
Все совпадения Right
Вывести
Несовпадения Wrong
Вывести
Аноним 04/09/17 Пнд 04:26:43  1056893
>>1056891
Он прав вообщет. Я специально занялся английским, потому что русский контент сосет жепу, редко найдешь учебное пособие которое переведено как следует. Везде провалы. Да и ресурсы в основном где пишутся полезные статьи, фичи, алсо конференций, В россии кто нибудь C конференций устраивает? Интервью с Брайаном Керниганом, расширенный набор книг по программированию от разных авторов, спецификации вместе с драфтами, да куча всего на английском. И поэтому нужно обязательно знать английский, особенно если ты хочешь чего то добиться. А так если ты программингом занялся ради смехуечков и пиздхаханек то для этого подойдет какой нибудь, ну... Язык для создания приложений для телефончиков?
Аноним 04/09/17 Пнд 04:34:18  1056894
>>1056853
Там перевод пиздец какой корявый. Например:
>Напишите программу, копирующую символы ввода в выходной поток и заменяющую
стоящие подряд пробелы на один пробел.
Т.е спрашивается, какой нахуй выводящий поток? Напиши как в книжке -
Напишите программу копирующая ввод в вывод, заменяя каждую последовательность нескольких пробелов одним.
Все. Сложно?
И так вся книга.
Аноним 04/09/17 Пнд 04:35:36  1056895
>>1056894
>копируящая
Копирующую

фикс
Аноним 04/09/17 Пнд 04:50:56  1056898
>>1056893
всё ясно. с возрастом пройдёт.
Аноним 04/09/17 Пнд 04:56:13  1056899
>>1056898
Куда мне до тебя, мелкобуквенного.
Аноним 04/09/17 Пнд 05:05:10  1056901
>>1056899
ещё одна неполноценность в окружающих. а как как же хорошо что ты выше этого).
Аноним 04/09/17 Пнд 05:13:00  1056902
>>1056898
джвачую, ребенок еще не понимает, что важные вещи даже на англопидерском никто писать не будет
Аноним 04/09/17 Пнд 05:20:14  1056905
>>1056901
Верно.
Аноним 04/09/17 Пнд 09:30:24  1056924
что вы думаете о wxdev c++
Аноним 04/09/17 Пнд 09:49:53  1056928
>>1056888
> Большинства годных статей на русском нет
Знать английский и читать технические (научные) статейки не одно и то же. В студенчестве я регулярно делал доклады по алгебре с англицких книжек. Однако не мог без субтитров смотреть даже мультики для детей-аутистов, а любая неадаптированная книга уже на первой странице содержала сотню незнакомых мне слов.
Для вопросов на стековерфлоу хватает английского уровня гуглопереводчика.
Аноним 04/09/17 Пнд 10:41:33  1056933
>>1056893
>"конференций" два раза подряд
конференции

Сначала русский подучи.
Аноним 04/09/17 Пнд 11:53:13  1056946
>>1056928
Собственно, в этом и смысл. Человека >>1056888 спросили, почему нет русского перевода в шапке? Самый первый пришедший в голову ответ был не "потому что перевод плохой" могу сказать, что он не плохой, а потому что ТЫ ОБЯЗАН ЗНАТЬ АНГЛИЙСКИЙ, ЕСЛИ ТЫ НЕ МАКАКА. Логика прослеживается, конечно, но связь между вопросом и ответом ОЧЕНЬ опосредованная и явно прошла через цепочку когнитивных искажений. Я, если что, хорошо знаю английский, просто мне бомбит с тех, кто делает из него священную корову по поводу и без.

Аноним 04/09/17 Пнд 12:00:44  1056952
Я уже молчу про то, что, действительно, давайте будем честными: нихуя не надо знать английский для программирования. Если вы называете уровень чтения литературы по программированию (обычно сухой и бедной на сложную лексику или, тем более, грамматику, дабы читатель сосредоточился на предмете) или прослушивания лекций ЗНАНИЕМ АНГЛИЙСКОГО, то у меня для вас плохие новости -- это уровень седьмого-девятого класса. А то слюней напускали, ояебу просто.
Аноним 04/09/17 Пнд 12:09:23  1056956
>>1055733 (OP)
Я все книги по программированию читаю на английском. Я даже не смогу те обороты речи и слова по русскому сказать
Аноним 04/09/17 Пнд 12:17:11  1056958
>>1056933
Хуя пичот.
Аноним 04/09/17 Пнд 12:18:57  1056959
>>1056946
Мань да кому ты пиздишь. И да, русский подучи.
>>1056928
Логика уровня двоща.
Аноним 04/09/17 Пнд 12:22:33  1056962
>>1056952
>нихуя не надо знать английский для программирования
Мы приняли твое мнение во внимание На самом деле нет.
>то у меня для вас плохие новости
Всем похуй на твои новости.
>это уровень седьмого-девятого класса.
Так хули ты не выучил то?
Аноним 04/09/17 Пнд 12:23:19  1056963
>>1056956
Всем так интересно.
Аноним 04/09/17 Пнд 12:33:16  1056968
>>1056959
>>1056962
>макакены кидаются какашками
Спасибо за беседу, было интересно, закроем тему.
Аноним 04/09/17 Пнд 16:12:33  1057040
>>1056958
Тебе? Мазь купи в аптеке. И свечки анальные.
Аноним 04/09/17 Пнд 16:14:32  1057041
>>1056946
Надо только профессионалам. Для обычного программирования на русском информации более чем достаточно.
Аноним 04/09/17 Пнд 16:16:08  1057043
>>1056956
Что говорит о твоей убогости, если ты не знаешь терминологии на своем языке.
Аноним 04/09/17 Пнд 16:39:58  1057060
Помогите с организацией хедеров. Дело такое. Скажем есть хедер файл, в нем есть прототипы функций, одна функция возвращает uint8_t, значит, нам надо stdint. Где логично будет подключать stdint ? Если тянуть его до хедера в файле .с то все нормально. Не будет ли тупо, если я засуну его прямо в хеадер ? Или так и надо ? Спасибо.
Аноним 04/09/17 Пнд 16:41:48  1057061
>>1057060
типа того. если ты тянешь в .c его же .h . иначе там и там.
Аноним 04/09/17 Пнд 17:02:18  1057066
>>1057061
Спасибо!
Аноним 04/09/17 Пнд 17:03:09  1057068
>>1056892
Бамп, есть у кого идеи где можно посмотреть решение?
Аноним 04/09/17 Пнд 18:21:45  1057102
>>1057068
Попробуй на киберфоруме найти / спросить.
Аноним 04/09/17 Пнд 19:29:24  1057123
>>1057102
Хорошая идея, спасибо что напомнил бро!
Аноним 04/09/17 Пнд 20:02:14  1057136
>>1057060
Основное правило такое: хедер должен включать свои зависимости. Если в хедере используется uit8_t - подключаешь stdint в хедере. Ну и очевидно, что в парном .c подключать stdint не нужно.
Аноним 05/09/17 Втр 00:22:06  1057264
apache.png (33Кб, 1440x860)
Когда вечером нехуй делать.
Аноним 05/09/17 Втр 00:35:58  1057267
>>1057264
Если что, вся эта простыня говнокода аллокейтит новый argv через анусай, после чего запихивает туда имя обрабатываемой вебсервером в данный момент страницы.
Частично портабельно (на соплярис).
А вот во фряхе вместо всего этого ебалова есть setproctitle()
Аноним 05/09/17 Втр 06:01:23  1057297
>>1057264
Хуя бог.
Аноним 05/09/17 Втр 06:30:57  1057301
>>1057264
хукта какаято
Аноним 05/09/17 Втр 12:22:10  1057372
Можно как-то передать структуру в функцию, без объявления?
Типа:
func(arg, {1,2,3,4});
Ну или хотя бы объявить сразу здесь же? А то чот очень душно как-то получается. Извиняюсь, если проморгал этот момент.
Аноним 05/09/17 Втр 12:53:22  1057384
>>1057372
>без объявления
>статическая типизация
>под каждый пук выделяется память
Хм...
Аноним 05/09/17 Втр 13:11:02  1057392
>>1057372
https://wandbox.org/permlink/1B69Z8BBKzwZhYh9
Аноним 05/09/17 Втр 13:36:32  1057401
>>1057392
Спасибо.
Аноним 05/09/17 Втр 17:56:44  1057512
Аноны, вместо русских бук в консоли иероглифы (Р'С?РчР? РїС?РёР?РчС'), в чем может быть проблема?

Включал вот так :
#include <locale.h>
setlocale(LC_ALL, "Rus");
Аноним 05/09/17 Втр 18:10:31  1057521
>>1057512
в системе: плохая).
Аноним 05/09/17 Втр 18:41:29  1057537
>>1057512
Поройся в настройках среды, обычно можно кодировку менять. В кодеблокс это edit -> file encoding
Аноним 05/09/17 Втр 18:48:38  1057541
>>1057537
Какую кодировку выбрать? Сейчас стоит UTF - 8.
Аноним 05/09/17 Втр 18:53:24  1057546
>>1057541
виндовс же не может в utf-8. может закодируешь в cp1251?
Аноним 05/09/17 Втр 18:58:22  1057550
>>1057546
Спасибо.
Аноним 05/09/17 Втр 19:11:16  1057554
>>1057541
Юникод.
Аноним 06/09/17 Срд 04:57:47  1057806
Ребят, я видел чувак для камеры наблюдения записал массив [256]
Это для чего так? Т.е значение совпадает с кодеком. Как это работает?
Аноним 06/09/17 Срд 11:19:09  1057898
Какой-то более-менее общепринятый компиляторо/платформо независимый, пусть и не самый быстрый метод для арифметических операций с целыми, как знаковыми, так и беззнаковыми, стандартных 8, 16, 32, 64 разрядностей, позволяющий избежать переполнения вообще существует? Всё что удалось нагуглить - какие-то хаки и костыли , но я не самый способный.
Не очень хочется выдрачивать велосипеды. Подскажите, если кто знает, пожалуйста.
Аноним 06/09/17 Срд 11:39:48  1057917
scrsht.png (3Кб, 288x52)
На околокачественный код потянуло. Как лучше назвать структуру окна (того, что в ОС), сам тип окна в ней и высоту с шириной? Стремлюсь к кратким наименованиям, полные порой выглядят жутко.

Текущая версия не нравится "pw" и обилием "w".
Аноним 06/09/17 Срд 11:46:13  1057921
>>1057917
>Стремлюсь к кратким наименованиям, полные порой выглядят жутко
Пиздуй читать "Чистый код", говно.
Аноним 06/09/17 Срд 11:50:51  1057924
>>1057921
Я так не напишу ничего и останусь нищим. Ответь на вопрос, пожалуйста. Хотя спасибо, пролистаю всё таки.
Аноним 06/09/17 Срд 11:52:46  1057926
>>1057924
Сам спойлер в конце.
Аноним 06/09/17 Срд 11:53:15  1057927
>>1057926
%%> сам
там
Аноним 06/09/17 Срд 12:04:02  1057929
fuck!.png (20Кб, 458x174)
>>1057921
Да ты охуел! Не согласен с книжкой. Гораздо проще один раз посмотреть на структуры и комментарии к ним, а потом беззатруднительно читать весь остальной, компактный код. Конечно, есть место длинным наименованиям, но это нужно далеко не везде, я думаю. Потому скажи мне как назвать структурку и её элементы.
Аноним 06/09/17 Срд 15:14:21  1058053
>>1057898
каким образом это может решить компилятор, вставлять ассерт после каждой инструкции?

есть же специальные инструменты.
Аноним 06/09/17 Срд 15:45:57  1058069
>>1058053
Ну у компилятора-то возможностей куда больше, он может вставить что-то типа jnc, jc, jo, jno - однобайтовая инструкция, выполняется один такт. Жалко только, что стандарт предпочитает неопределённое поведение, видать на ПДП подобной хуйни не было.
>есть же специальные инструменты.
Ты про какие? Те которые проверяют исходный код или которые позволяют работать динамически? Если про последние, то линкани, пожалуйста. Собственно мне нужна функция навроде __builtin_add_overflow из GCC, только что бы по-переносимей.
Аноним 06/09/17 Срд 18:27:26  1058185
>>1058069
да фиг знает, чёт сам сижу читаю по поводу.
Аноним 06/09/17 Срд 18:35:13  1058191
но вообще слабо верится в быструю проверку компилятором. ведь есть же всевозможные правила конвертации типов, неявный инт. даже если представить это без оптимизации вообще.

как минимум это что-то должно знать контекст.
Аноним 06/09/17 Срд 18:38:36  1058195
>>1055733 (OP)
Ананасы, как вы, погромируя всякие железки, определяете оптимальный размер стека? Я вот пишу хуйню на броадкомовском говно-сдк, в котором обычному printf в uart с какого-то хуя нужно 4096 байт стека, постоянно ловлю всё новые и новые stack overflow. Размеры рассчитываю на глаз и включаю заодно runtime-проверки операционки, конечно и заебался уже так делать.
Аноним 06/09/17 Срд 18:55:19  1058206
например что-то типа
add eax ebx
mov ax (или как там) %куда-то там

и типа это конвертация из инта в чар, по беззнаковому это стандартно, знаковому - нет. как это, например проверять, знаковый вариант? (char)((int)a + (int)b);

по идее же надо будет проверять диапазоны обоих, а потом и результат?

а например такой контекст = (int)a + (uint)b

будим считать за переполнение, когда a < 0 и скастуется к uint ?

тогда нужно проверить a на 0 =< a <= INT_MAX . хотя это вроде стандартное поведение.

просто размышляю. наверно реально, если компилируется без оптимизаций. может флаги есть в гцц?
Аноним 06/09/17 Срд 19:23:52  1058219
>>1057929
Два чаю, гораздо лучше читаются программы с переменными i, j, k, tmp, array[].
Аноним 06/09/17 Срд 19:41:26  1058229
>>1058219
мне кажется, что читаемость больше зависит от твоего умения вовремя отделить код в функцию и организовать структуру.
Аноним 06/09/17 Срд 21:10:53  1058305
>>1057929
> Потому скажи мне как назвать структурку и её элементы.
typedef struct {
GLFWWindow *physicalWindow;
unsigned int width, height;
} Window;
Если не нравится - иди решай свои проблемы - научись печатать более чем одним пальцем, купи себе монитор с разрешением выше 640x480, найди IDE с автодополнением, если ленивый. А в комментариях пиши не расшифровку своей тарабарщины, а полезные вещи.
Аноним 06/09/17 Срд 21:20:58  1058309
>>1058305
>я так скозал.
ух какой карась.
Аноним 06/09/17 Срд 21:36:25  1058317
>>1058309
Это не я так сказал, так пишут все нормальные люди. В том числе и те, кто когда-то был ньюфагом и злоупотреблял короткими именами.
Аноним 06/09/17 Срд 21:42:27  1058322
>>1058305
> купи себе монитор с разрешением выше 640x480
У меня 1024x768! А иды не нужны, ровно как и твойУёбищноеНазваниеПеременныхБлядь. Мне гораздо приятнее читать код состоящий из кратких переменных. Достаточно понимать принцип выбора названий и область под которую погроммист пограммит.
Аноним 06/09/17 Срд 21:45:11  1058324
>>1058322
> Достаточно понимать принцип выбора названий и область под которую погроммист пограммит
и код будет прекрасно читаться.

Так, как делаешь ты, на самом деле делают далеко не везде, и раньше я такого вообще не видел, но тут только с дивана могу говорить.
Аноним 06/09/17 Срд 21:48:30  1058327
>>1058322
> Мне гораздо приятнее читать
Если проект - твой собственный, и кроме тебя его читать никто не будет - пиши, как тебе нравится. Хоть весь юникод на однобуквенные переменные заюзай. Но помни, что если кому-то вдруг придется это читать, он будет крыть тебя матом каждую ебаную секунду.
Аноним 06/09/17 Срд 22:18:23  1058340
>>1058327
>Хоть весь юникод
нельзя же.

> что если кому-то вдруг придется это читать
да и пусть нахуй идёт.

к чему все эти доёбки? если на работе как-то нужно писать по особому, там же на месте и ознакомят с правилами.

а то пиздец, пиши для себя как хочешь, но не показывай никому, а то тебя материть будут.
Аноним 06/09/17 Срд 22:26:51  1058350
>>1058340
> нельзя же.
В C99 запилили extended identifiers. Весь юникод, конечно, нельзя, но символов, которые разрешено использовать в идентификаторах - овердохуя.
Аноним 06/09/17 Срд 22:36:01  1058360
>>1058350
жёстко. я смотрю можно прям в кодах \u1234()
Аноним 07/09/17 Чтв 05:04:01  1058426
https://ideone.com/mOxynh

Помогите удостовериться.
Массиву character[TNOCHAR] присваивается 128 имен
Им присваивается каждому 0
Далее идет пересчет каждого введенного совпавшего символа
++character[c];

Запускается цикл который выводит 128 символов
Тут самое важное
Запускается еще один цикл который сравнивает значение j со значением Попавшихся совпадений character[Любое совпадение в character[c]] и инкрементируется значение j до кол-ва попавшихся character[c] и выводится кол-во символов '*' и символ новой строки после того как совпадения закончатся.
Все верно?
Аноним 07/09/17 Чтв 06:50:11  1058431
>>1058426
У тебя там в ideone чуть ниже есть standard input. Введи туда свои символы и посмотри, что получится. Но хуй знает, описал ты это, конечно, коряво. 128 имен каких-то, совпадения какие-то. Гистограмму оно строит. Все блять.
Аноним 07/09/17 Чтв 10:45:07  1058495
>>1058206
Ну конвертация-то в более узкий тип - совсем простая операция, только границы проверяй. Тот же х86, вроде бы, имеет одтельную инструкцию проверки диапазона.

Кстати же, придётся проверять ещё и деление для случая SIGNED_MIN / (-1), ну а SIGNED_MIN % (-1) по идее аппаратно вылететь должен.

Для типов меньше 64х бит можно привести данные к более широкому, проверить и отсечь если попадают в диапазон. Вот тут https://blog.regehr.org/archives/1139 мужик пишет, что относительно шутсрый метод. Для максимальных же, один пёс придётся выполнять проверки, а для знакового ещё и пилить умножение руками. Ещё можно учесть, что некоторые компиляторы-таки поддерживают безопасные операции, в ряде случаев можно наассемблерить необходимые проверки, и по итогу получить кромешный пиздец из ифдефов. Какая же ебаная хуита, простите.
Аноним 07/09/17 Чтв 11:49:10  1058511
>>1058426
На будущее, чтобы инициализировать все элементы целочисленного массива нулями, достаточно написать массив[вместимость] = {0}
Аноним 07/09/17 Чтв 12:00:45  1058518
Аноны, нужно распарсить .pcap файл размером в 10 мб, на питоне это занимает около 9 секунд(!!!).
Решил реализовать эту часть алгоритма на Си, а конкретней:
1. парсинг pcap файла
2. запись данных в БД постгрес
Если со вторым пунктом ясно всё и нагулится, то насчёт первого не уверен.
Какие будут советы/варианты вообще и по первому пункту в частности?
p.s. думаю моих знаний в Си хватит для этого, более чем.
Аноним 07/09/17 Чтв 12:31:31  1058529
>>1058518
Любишь писать велосипеды?
Я бы скормил pcap сурикате и импортировал получившийся eve.json.
Аноним 07/09/17 Чтв 12:38:00  1058533
>>1058529
Не люблю писать, но время парсинга огорчает.
Если всё будет плохо - смирюсь с тем что есть.
Аноним 07/09/17 Чтв 15:32:28  1058625
>>1058511
Спасибо, я пока на 1 главе, такие тонкости мне мозг сломают нахуй.
Аноним 07/09/17 Чтв 18:47:03  1058725
>>1058625
Чё, вместо цикла = {0} справа приписать тяжело? Я, правда, не уверен, что это достаточно портабл и вообще работает в си, а не в крестах.
Аноним 07/09/17 Чтв 18:57:43  1058732
>>1058725
Это есть в стандарте. Когда ты инициализируешь один из элементов, остальные заполняются нулями. В данном случае инициализируется первый, и слегка непортабл это только когда нулевые указатели хранятся не в виде последовательности нулевых битов. Но я таких ебнутых машин не знаю.
Аноним 07/09/17 Чтв 19:02:14  1058736
>>1058732
> Это есть в стандарте
Не означает, что это портабл
Аноним 07/09/17 Чтв 19:05:45  1058740
>>1058736
> Это есть в стандарте
> Не означает, что это портабл
Означает.
Аноним 07/09/17 Чтв 19:12:24  1058742
>>1058740
В мире фей, где нет старых компиляторов может означать. Но там это может что угодно означать, что пыльца в соцветиях ноздрей хоботов голубых слонов созрела, например. Мир фей же
Аноним 07/09/17 Чтв 19:16:42  1058745
>>1058725
Ну не тяжело, но должно быть понимание базовое, хотя бы почему и когда это делать. Пока как говориться, велосипед поизучаю, а там уже и буду экспериментировать.
Аноним 07/09/17 Чтв 19:17:06  1058746
>>1058742
да ты что-то гонишь браток. это с самой первой версии фишка.
Аноним 07/09/17 Чтв 19:18:52  1058747
>>1058742
В моем мире поддержка хотя бы C89 есть под каждую необходимую мне железку. Если мне вдруг встретится что-то, не поддерживающее C89, я не стану называть это компилятором Си. Это будет компилятор кастомного языка с C-like синтаксисом.
Аноним 07/09/17 Чтв 19:20:48  1058748
>>1058746>>1058747
Если это реально стандарт C89, то приношу письменные извинения за дегазацию в лужу у благородных донов
Аноним 07/09/17 Чтв 19:27:32  1058753
>>1058748
Да, это есть в C89. А я, в свою очередь, прошу прощения за разговоры о непортабельность инициализации указателей - все там нормально инициализируется, вне зависимости от представления в памяти, а описанные выше проблемы возникают при попытке делать обнулять через memset(..., 0, ...).
Аноним 07/09/17 Чтв 19:47:58  1058766
>>1058431
Чувак, я знаю вывод. Программа написана правильно и видимо ты ее не понял, как и контекст вопроса.
Аноним 08/09/17 Птн 00:58:27  1058874
>>1058426
Про массив сказал, ещё кое-что:
1) Отделяй операторы пробелами от операндов, а ещё ставь пробел справа от знаков типа , или ; -- когда будешь писать вещи хотя бы немного сложнее читаемые, чем двойной счётчик, отсутствие пробелов глаза ибат жоски будет.
2)Маловажная ремарка: каноничноъ в for-цикле пользоваться пост-инкрементом/декрементом, а не пре-. С массивами (т.к. индексация с нуля) удобнее задавать счётчик как for (i = 0; i < zalypa; i++), но во всех остальных случаях читабельность повысится при отсчёте с единицы: for (i = 1; i <= zalypa; i++).
Я так-то тоже вкатывальщик, просто немного подальше закатился, оэлдэфаги, можете обоссать
Аноним 08/09/17 Птн 01:21:47  1058876
Котаны, можно ли как-нибудь отличать память на стеке и память в куче?
Например, у меня есть структура, несколько полей которой принимают ссылку на область памяти double(звездочка). Есть функция delete_struct, которая проходится по этим полям free().
Можно сделать так, чтобы программа не ломалась из-за попытки очистить память в куче?

Тут с примером чуть понятнее: https://pastebin.com/exxrwWjh
Аноним 08/09/17 Птн 01:29:20  1058878
>>1058876
щито?
Аноним 08/09/17 Птн 01:41:57  1058881
>>1058874
> каноничноъ
Труъ эстеты пишут с преинкрементом, потому что у него нет специального поведения в отличие от постинкремента.

>>1058876
Нет, нельзя. К тому же, есть еще вариант статически выделенных данных. Ты, конечно, можешь нагородить платформенно-зависимый костыль (ну там, регион стека детектить, с секцией данных сверяться), но сделай лучше флажок в структуре, не выебывайся.
Аноним 08/09/17 Птн 01:55:00  1058884
>>1058876
так никто не делает. пишут функции конструктор и деструктор
в твоем коде непонтяная хуита с ошибками.
Аноним 08/09/17 Птн 02:10:28  1058888
Господа, нужна помощь. Сразу прошу, анон, не пинай нуба, мне всего ровно 18, и я пытаюсь постичь С/Спп.
В общем, не понимаю я логики работы с включениями исходников - все эти заголовочные файлы и прочее. В книжках нашел только общие положения, на всяких хабрах - то же, либо какие-то рецепты для конкретных случаев. Нипанятна.
А теперь суть проблемы. Допустим, есть у меня некий файл first.h. В нем мы определяем константу coeff типа int:

#ifndef FIRST_H_INCLUDED
#define FIRST_H_INCLUDED

const int coeff = 5;

#endif // FIRST_H_INCLUDED

Далее создаем заголовочный файл second.h. В него пихаем определения функции:

#ifndef SECOND_H_INCLUDED
#define SECOND_H_INCLUDED

#include "first.h"

double func(double x);

#endif // SECOND_H_INCLUDED

Функцию определяем в файле second.cpp. В нем "инклудим" second.h и используем константу coeff (наверное и так понятно как должно выглядеть). В мэйне подцепляем second.h и вызываем функцию func. Типа по моим понятиям должно работать. Однако оно выдает ошибку multiple definition of coeff. Как правильно надо включать файлы, чтобы я мог и константой воспользоваться, и чтоб компилилось?
Аноним 08/09/17 Птн 02:12:49  1058889
>>1058888
Заранее извиняюсь что без разметки, но кода мало, вроде как можно обойтись.
Аноним 08/09/17 Птн 02:16:08  1058890
>>1058888
Не делай константы через const. Это плохо работает, не всегда нормально оптимизируется и все такое. Делай через #define как люди. Если все же хочешь, чтобы работал твой вариант, у тебя два выхода: сказать, что константа statiс или писать в хедере, что она extern, а реальное определение пихать в один из .c файлов.
Аноним 08/09/17 Птн 02:22:08  1058891
>>1058890
на самом деле в реальной программе там строка const char*, мой пример искусственный и чисто модельный. А строку можно дефайном вставлять?
Хм. Щас попробовал перенести строчку #include "first.h" из файла "second.h" в файл "second.cpp" и все заработало. Странно это...
Аноним 08/09/17 Птн 02:23:28  1058892
>>1058891
не ври. все должно работать
Аноним 08/09/17 Птн 02:26:55  1058895
>>1058891
Ну а отвечал я про примитивные типы вроде double или int. Со строками все зависит от того, зачем тебе строка (дубликаты строк не все компиляторы схлапывают). В общем и целом, лучше делать extern в .h, строку в .c.
Аноним 08/09/17 Птн 02:31:32  1058897
>>1058895
Дурацкий вопрос, но все же. А что значит extern? И чем отличается от static?
Аноним 08/09/17 Птн 02:32:05  1058898
>>1058888
const int coeff = 5; это глобальная переменная
ты инклудишь в second.cpp и там это переменная, и в main.cpp и там тоже эта переменная.
ты перенес инклуд, и в main.cpp больше нет объявления этой переменной
Аноним 08/09/17 Птн 02:34:50  1058899
>>1058898
короче, иди читай как работает конпеляция и линковка в си. это азы, без которых ты ничего не поймешь
Аноним 08/09/17 Птн 02:36:36  1058900
>>1058897
static ограничивает видимость модулем (объектным файлом, единицей компиляции). Если extern - это определение (definition), то его видно извне, а если это объявление (declaration), то объявление для него может быть в другом модуле.
Аноним 08/09/17 Птн 02:37:24  1058901
>>1058900
> объявление для него может быть в другом модуле
определение
Аноним 08/09/17 Птн 02:43:03  1058902
>>1058900
>extern - это определение (definition), то его видно извне
extern значит, что переменная определена в каком-то другом cpp-файле или подключаемой библиотеке. тогда во время линковки заместо этой переменной будет подставлен адрес этой другой определенной где-то переменной с таким названием
Аноним 08/09/17 Птн 03:07:52  1058906
>>1058902
Ощм немного прояснилось, но буду еще разбираться. Аригато гадзаимас, анон.
Аноним 08/09/17 Птн 03:29:00  1058907
>>1058874
Проиграл. Чувак, программу не я писал, я написал объяснение её работы и спросил - Верно ли я понял? А писал ее профи.
Аноним 08/09/17 Птн 06:04:48  1058910
Ебашу тут Дейтелов 2009ого года. И чет у меня во второй программе сумма неправильная выходит, подозреваю что-то случилось за 8 лет. объясните что?

#include <stdio.h>

main(void)
{
int integer1, integer2, sum;

printf("Enter first integer\n");
scanf("%d", &integer1);
printf("Enter second integer\n");
scanf("%d", &integer2);
sum = integer1 + integer2;
printf("Sum is %d\n, sum");

return 0;
}

Аноним 08/09/17 Птн 07:06:09  1058916
>>1058902
так-же нужно отметить, что модификатор extern дефолтный для всех объявлений функций
Аноним 08/09/17 Птн 07:28:51  1058919
>>1058910
Кавычка не там в последнем принтфе.
Аноним 08/09/17 Птн 08:12:46  1058926
>>1058919
#define _CRT_SECURE_NO_WARNINGS

А вот это нахуя меня просят писать, чтобы скомпилировать программу?
Аноним 08/09/17 Птн 08:24:37  1058928
>>1058884
> конструктор и деструктор
Тредом ошибся?
Аноним 08/09/17 Птн 09:46:05  1058936
>>1058881
Благодарю.
Переделывать не буду, просто на всякий случай все маллоками зафигачу.

>>1058884
С ошибкой, не ошибками. С программе даже комментарий сделан, где именно эта ошибка.
Аноним 08/09/17 Птн 09:49:44  1058938
>>1058926
Пытаешься байтоёбствовать в visual studio?
Аноним 08/09/17 Птн 11:10:44  1058953
>>1058938

Оно не хотело выполнять программу, пока я это не написал. Что не так с этим VS?
Аноним 08/09/17 Птн 11:51:13  1058970
>>1058953
>Что не так с этим VS?
все
Аноним 08/09/17 Птн 11:53:32  1058972
>>1058907
>писал профи
Чёт непохоже
Аноним 08/09/17 Птн 12:23:24  1058985
>>1058970
объясните хоть нахуй эта строчка там нужна?
Аноним 08/09/17 Птн 12:55:41  1059004
>>1058985
Отключает бугурт компилятора студии по поводу использования "небезопасных" функций. Т.е. большинства, где используются указатели в том или ином виде.
Надо понимать, что Visual Studio - это не среда для разработки на Си. Это среда разработки на Managed C++. Да, в плюсах, даже управляемых, есть возможность использования сишного кода, но приходиться попердеть с директивами препроцессора или unmanaged вставками.
Ты просто определись: либо ты пишешь на си, либо не на си. Майкрософтоподелия к си имеют весьма посредственное отношение. Назначение Managed C/C++ только в том, чтобы делать врапперы для нэйтивных библиотек в комовскую оболочоку, с последующим вызовом их из управляемого кода, написанного на любом языке .net семейства. Программы на нём пишут только дэбики уникумы.
Аноним 08/09/17 Птн 13:06:54  1059013
>>1058972
Ну ты толстить уже начал. Тема не для тебя, забей.
Аноним 08/09/17 Птн 13:07:53  1059014
>>1059004
Проблема в том, что все остальные IDE выглядят как куски говна, поэтому делаю задания из книжки в VS. Вот как-бы и все. А почему так вышло, что они небезопасные?
Аноним 08/09/17 Птн 13:25:09  1059018
>>1059013
Давай спустимся с небес идеального кодинга на землю ради ответа на простой вопрос, который мучает меня: почему некоторые люди не ставят пробелы?
Аноним 08/09/17 Птн 13:32:25  1059023
>>1059014
>А почему так вышло, что они небезопасные?
Потому что Стив Балмер так решил. А вообще тебе нужно почитать про дотнетовский CLR, управляемый/неуправляемый код, всякую хуиту про ООП и отличия указателя от ссылки. Здесь всё же Си обсуждают.

>что все остальные IDE
Может быть местные гуру меня поправят, но Си - это не "эй поцоны, я ДЭВЭЛОПЮ код на макбуке в няшной ИДЭ с дарк интефейсом". Си - это системное программирование, линукс кернел и ымбыдед. Поэтому либо пользуешься специализированными IDE вроде Keil4 или VisualDSP++, которые облегчают процесс разработки говнокода под конкретные платформы. Либо превозмогаешь себя и пишешь код в блокнотике, параллельно постигая make и gcc.
В качестве блокнотика могу посоветовать VS Code, если уж так любишь майкрософтоподелия
Аноним 08/09/17 Птн 15:07:58  1059065
В gcc возможно задать размер скомпилированного объектного файла? Чтобы был кратным 4-ем, к примеру?
Аноним 08/09/17 Птн 15:13:18  1059067
>>1059023
>А вообще тебе нужно почитать про дотнетовский CLR, управляемый/неуправляемый код, всякую хуиту про ООП и отличия указателя от ссылки.

>Либо превозмогаешь себя и пишешь код в блокнотике, параллельно постигая make и gcc.

Постой, шеф. Я открыл только первую книгу по программированию.
Аноним 08/09/17 Птн 16:14:38  1059086
>>1059018
Потому что у каждого свой стиль.
Аноним 08/09/17 Птн 17:28:20  1059100
>>1059004
>Visual Studio - это не среда для разработки на Си. Это среда разработки на Managed C++
Чо? Можно же писать на unmanaged C++, и на С89С95/АМD1 офк. А если прикрутить clang/c2, то еще и С11 будет
Аноним 08/09/17 Птн 17:31:16  1059101
>>1059023
Есть clion и mingw, почему бы их не использовать?
Аноним 08/09/17 Птн 18:23:21  1059123
https://pastebin.com/FgXY3SUy
Строчка 34: объясните подробно, пожалуйста, почему так передавать второй аргумент в функцию нельзя? И правильно ли я использую двумерный массив в таком случае вообще? Это задачка на моделирование "черепашьей графики".
Аноним 08/09/17 Птн 18:37:25  1059131
13514336096235.jpg (23Кб, 376x450)
Анончик, можеш подсказать плз написать круговой динамический массив в Си? Я знаю что простой круговой массив пишется через index % size. Но как мне его сделать динамическим?
Аноним 08/09/17 Птн 18:51:56  1059139
283stroustrup.jpg (24Кб, 600x300)
>>1059131
С помощью класса
Аноним 08/09/17 Птн 18:54:04  1059141
>>1059131
realloc?
Аноним 08/09/17 Птн 19:01:53  1059144
>>1059141
можешь показать в коде? допустим у меня есть массив а[5]. Как мне его увеличить?
Аноним 08/09/17 Птн 20:55:51  1059191
>>1059014
> А почему так вышло, что они небезопасные?
Такими сделали. Когда дизайнилась стандартная библиотека, об уязвимостях еще не думали. И "небезопасность" таких функций не в использовании указателей, как говорят ньюфаги выше, а в отсутствии контроля границ или недостаточной сигнализации о том, что данные в буфер не влезли: например, печально известная gets() пишет данные в буфер, но не позволяет ни указать его максимальную длину, ни сигнализировать о том, что буфер переполнился. А, например, какая-нибудь snprintf, сделанная позже, и, вроде бы, правильно, позволяющая указать максимальный размер буфера, возвращает не количество записанных в буфер символов, а нахуй не нужное количество символов, которое могло бы быть записано в буфер бесконечного размера. При этом, чтобы узнать, что буфера не хватило, тебе нужна явная проверка, а если ты поленишься (очень многие ленятся), то в твоей программе появляются truncation-уязвимости (приходит тебе такой аттачмент в письме foo(многобуков).exe.jpg, пишет такая программа его на диск, делает snprintf(filename, MAX_PATH, "%s/%s", temp_folder, attachment_name), а оно не влезает, обрезается, и на диск летит уже foo(многобуков).exe). И вот Microsoft для решения этой проблемы придумала подмножество _s (safer) функций, которые фэйлятся, если что-то не влезло, и даже пропихнула их в стандарт (Annex K), но оно никем, кроме Microsoft не поддерживается, и там есть проблемы с runtime constraint handlers, и, в общем, почти никто ими не пользуется, кроме самой Microsoft. И ты не пользуйся, но о проблемах стандартной либы помни.
Аноним 08/09/17 Птн 21:08:45  1059195
>>1059123
commands - одномерный массив, ты не можешь индексировать его дважды. Алсо, несмотря на то, что ты там при инициализации понаставил фигурных скобок, он остался одномерным, и инициализаторы просто записались в него по порядку ([0] = 2, [1] = 5, [2] = 12, [3] = 3...). Сделай либо нормальный двумерный массив commands[COMMANDS][2], либо массив указателей на массивы int, можно с compound literals (С99) примерно так: (int *array[] = { (int[]){ 1 }, (int[]){ 5, 12 }, итд }).
Аноним 08/09/17 Птн 21:37:52  1059207
>>1055733 (OP)
Почему говорят, что "функция возвращает void", если на самом деле она ничего не возвращает? Как говорить правильно? Что такое на самом деле void? Как он работает?
Аноним 08/09/17 Птн 21:44:03  1059212
>>1059207
Формально void это даже тип данных. Если это слово стоит перед функций, то значит функция ничего не возвращает. Т.е так и говорить, "функция ничего не возвращает", или возвращает пустоту
Аноним 08/09/17 Птн 22:39:06  1059234
>>1059131
бамп вопросу
https://ru.wikipedia.org/wiki/Кольцевой_буфер - вот что мне нужно, только чтобы увеличивался/уменьшался при необходимости
Аноним 08/09/17 Птн 22:57:05  1059249
>>1059234
>увеличивался/уменьшался при необходимости
realloc
Аноним 08/09/17 Птн 23:06:34  1059259
>>1059195
Почему в Си такие ебаные массивы?
Аноним 08/09/17 Птн 23:13:24  1059265
>>1059259
Потому что внутрь процессора менеджер кучи как-то не получилось запихать, а Си - достаточно низкоуровневый язык.
Аноним 09/09/17 Суб 00:27:30  1059296
>>1059259
У неосиляторов вечно что-то виновато.
Аноним 09/09/17 Суб 00:27:51  1059297
>>1059259
Кроме них самих, конечно.
Аноним 09/09/17 Суб 08:14:09  1059359
>>1059191

Спасибо, что пояснил.
Аноним 09/09/17 Суб 09:09:04  1059365
Кто-нибудь подскажет, как по номеру сигнала получить имя?
У меня в массивe *sys_siglist[] в строках забиты описания сигналов, даже имя не вычленить.
А большая часть функций, которые что-то печатают о сигналах (например, strsignal), обращаются именно к нему.
Придётся делать, как в kill сделали (массив структур sys_signame)?
https://github.com/karelzak/util-linux/blob/master/misc-utils/kill.c
Каждый сигнал с ifdef'ом инициализировать, это же мрак.
Аноним 09/09/17 Суб 12:40:17  1059400
>>1059296
>>1059297
Керниган, залогинься
Аноним 09/09/17 Суб 19:51:30  1059513
>>1055733 (OP)
А куда пропал оф. тред плюсов?
Аноним 09/09/17 Суб 19:59:58  1059520
>>1059513
Он на месте.
Куда пропали твои глаза?
Аноним 09/09/17 Суб 23:00:41  1059605
Анончики, как грамотно переписать вот этот кусок кода? В книге написано что goto для долбаёбов, а как сделать без него не соображу.
Нужно прочитать символ 'a', 'm', 'e', 's' или 'd'. На остальные вывести сообщение об ошибке.
Заранее спасибо.

goto l1;
while (ch != 'a' && ch != 'm' && ch != 'e' && ch != 's' && ch != 'd' ){
printf ("Введите корректный варинт\n('a', 's', 'm', 'd', 'e')\n");
l1:do {
ch = getchar();
}while(!isalpha(ch));
}
Аноним 09/09/17 Суб 23:13:46  1059611
>>1059605
goto не для долбоебов, но и не для этого случая.
do { ch = getchar(); } while (ch != EOF && ch != 'a' && ch != 'm' и т. д)
if (ch == EOF) { поток ввода кончился } else { нам дали требуемый char }
Аноним 09/09/17 Суб 23:17:10  1059615
>>1059611
Спасибо ещё раз.
Аноним 10/09/17 Вск 06:26:01  1059692
Почему не работает?

#include <stdio.h>

int main(void) {

int r, pi, circ;

printf("Radius: \n");
scanf("%d", &r);

printf("Diameter is %d\n", r 2);
pi = 3.14159;
circ = 2
r * pi;
printf("Circumference is %f\n", circ);
}
Аноним 10/09/17 Вск 06:59:00  1059695
>>1059692
> int pi
В советской россии пи равняется трем, ага.

int - это integer, целое. Не дробь. Дроби хранят в float или double, это типы с плавающей точкой. Можно еще в фикседпоинте, или даже явно в виде числителя/знаменателя, но тебе это пока рано.

Соответственно, double pi (так как десятичная дробь), double circ (так как после умножения дроби на целое ты чаще всего хочешь дробь), и все у тебя будет.

Алсо, лучше сделать pi не переменной, а константой:
#ifndef MATH_PI
#define MATH_PI 3.14159265358979323846
#endif
(или сделать #define _USE_MATH_DEFINES и подключить math.h, оно тебе определит M_PI в числе прочего, но это слегка нестандартная хуйня).
Аноним 10/09/17 Вск 07:00:47  1059698
>>1059695
Ахда, не работает конкретно потому, что в printf ты передаешь int, а спецификатор %f хочет дабл, такие дела.
Аноним 10/09/17 Вск 08:03:39  1059707
ДНО.png (12Кб, 775x197)
>>1059698
Пасиба, брат. Я когда делал просто вписал Пи ручками и все получилось. А еще такой вопрос, вот такие рисунки можно делать только если в каждый новый принт новую строку рисовать, т.е. рисовать все четыре одновременно или можно сделать по отдельности фигуры и проще?
Аноним 10/09/17 Вск 08:25:17  1059712
>>1059707
Можешь создать массив достаточных размеров, а потом распечатать его:
#define SCREEN_WIDTH 80
#define SCREEN_HEIGHT 24
char screen[SCREEN_HEIGHT+1][SCREEN_WIDTH+1];
// Очищаеш (плюс сразу переводы строк втыкаешь, чтобы быстрее выводить).
for (size_t y = 0; y < SCREEN_HEIGHT; y++) {
for (size_t x = 0; x < SCREEN_WIDTH; x++) {
screen[y][x] = ' ';
}
screen[y][SCREEN_WIDTH] = '\n';
}
screen[SCREEN_HEIGHT][0] = '\0';

// Рисуеш.
screen[10][10] = '*';

// Выводиш.
puts(&screen[0][0]);

Но вообще у тебя задание скорее всего предполагает именно одновременную отрисовку в едином цикле (т.е., в зависимости от Y координаты ты рисуешь звездочки и нужное количество пробелов в текущей строке для каждой фигуры, потом перевод строки, потом следующую строку так же и т. д.). Можешь тоже буфер сделать шириной с фигуру, тогда не придется ебаться с пробелами.
Аноним 10/09/17 Вск 11:39:04  1059731
>>1059101
> clion
Ну ты и говноед...
Аноним 10/09/17 Вск 12:05:14  1059736
>>1059731
Единственная годная IDE с поддержкой С11
Что не так?
Аноним 10/09/17 Вск 12:11:49  1059739
>>1059731
говноед - это тот, кто дрочит на инструментарий

в анус себе свои преференции запихай и пиздуй на пары
Аноним 10/09/17 Вск 12:18:19  1059743
>>1059736
мэйкфайлы то уже поддерживает это говно?
Аноним 10/09/17 Вск 12:18:47  1059744
>>1059739
>пиздуй на пары
сам пиздуй, джетбрейндрочер
Аноним 10/09/17 Вск 12:20:51  1059745
>>1059743
Есть cmake
Аноним 10/09/17 Вск 12:25:22  1059746
>>1059745
цмэйк нинужен
Аноним 10/09/17 Вск 12:35:38  1059753
>>1059746
Ну тогда соси хуй в блокноте без автокомплита
Аноним 10/09/17 Вск 12:36:55  1059755
>>1059753
>автокомплита
забыл синаксис си?
Аноним 10/09/17 Вск 12:45:49  1059759
>>1059755
Имена функций и переменных будешь полностью ручками писать?
Аноним 10/09/17 Вск 13:23:52  1059786
>>1059759
да, я их все помню. а если у тебя вызывается 500 штук этого говна, то ты не тру погромист.
Аноним 10/09/17 Вск 15:24:27  1059835
Дали тестовое задание-тср сервер которые бы кое что делал. Сделал. Ответ-недостаточно точное. Яебу вообще, работало как надо, тестил как мог. Хз
Аноним 10/09/17 Вск 17:17:46  1059902
>>1059835
да
Аноним 10/09/17 Вск 18:52:37  1059956
image.png (66Кб, 371x378)
Когда пять минут как вкатился в си и, не желая разбираться в собственном говнокоде, попёрся отвлекать занятых людей.

мимоэксделфибог
Аноним 10/09/17 Вск 20:53:39  1060001
>>1059956
А где оно глючит-то? Если ты про /n, то да, у тебя кривые руки - escape-последовательности пишутся с бэкслешем: \n.
Аноним 10/09/17 Вск 20:55:10  1060004
>>1059956
При чем здесь Code::Blocks?
Аноним 10/09/17 Вск 20:56:37  1060005
>>1060004
Он просто не знает еще, что IDE - не компилятор. Его делфя успешно скрывала от него существование dcc.exe.
Аноним 10/09/17 Вск 21:07:07  1060011
>>1059956
Квадратная закрывающая скобка в строке 7...
Аноним 10/09/17 Вск 21:09:16  1060012
>>1060011
Тогда бы не скомпилировалось
Аноним 11/09/17 Пнд 01:47:20  1060072
Разумно ли писать бекенд на си?
Аноним 11/09/17 Пнд 01:51:02  1060073
>>1060072
Бэкенд чего? Веб? Скорее всего, нет.
Аноним 11/09/17 Пнд 01:59:23  1060076
>>1060073
Спс
Аноним 11/09/17 Пнд 14:20:19  1060244
>>1059786
Не, скорее ты простой дурачёк, который никогда не работал со средними/большими проектами, лол
Аноним 11/09/17 Пнд 17:56:04  1060344
Котоны, помогите. Есть код на C, нужно скомпилировать под ARM архитектуру. Как это сделать? Нашел тулчейн arm-linux-gnueabi-gcc, но objdump по объектному файлу выдает архитектуру elf32-little.
Аноним 11/09/17 Пнд 17:57:57  1060346
>>1060344
> elf32-little
А тебе что нужно? Компилируй и не выделывайся.
Аноним 11/09/17 Пнд 18:57:49  1060377
>>1060346
Когда я это запускаю на целевой машине, она мне пишет not found. Поэтому я думаю что как-то не так скомпилировал. И ещё бинарник запускается на x64 убунте, это нормально вообще?
Аноним 11/09/17 Пнд 19:00:36  1060380
>>1060377
А как компилируешь?
Аноним 11/09/17 Пнд 20:09:02  1060427
>>1060380
Arm-Linux-gcc -mamr -o output.bin source.c
С++ помогите Аноним 11/09/17 Пнд 20:16:33  1060435
pizdez.webm (8589Кб, 854x480, 00:00:32)
>>1055733 (OP)
аноны, помогите с кодом, я нихуя не понимаю, как работают глобальные переменные, очень прошу, я заебался, уже всё перепробовал. Я думаю тут мне помогут, не смотря на то, что это кресты всё-таки..

Unit1.h
блаблабла
extern bool HUI;

Unit1.cpp
#include "Unit1.h"
HUI = true;

Unit2.cpp
#include "Unit1.h"
if(HUI == true) { Label1->Caption = "Работает!"; }
else { Label1->Caption = "Соси хуй"; }


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

Умоляю, анон, помоги, как сделать, чтобы переменную видел весь проект и использовать можно было из любого места, прошу, анон, вот тебе ваванджапан в реверсе и негативе авансом.
Аноним 11/09/17 Пнд 20:22:14  1060437
>>1060427
Хуй знает, должно рабоать. Ты бинарник не перепутал?

>>1060435
Все правильно у тебя. Вот только в крестах тоже есть неявный int, когда ты забыл тип:
> Unit1.cpp
> HUI = true
bool HUI = true;
Аноним 11/09/17 Пнд 20:38:22  1060442
>>1060437
спасибо за ответ, анон, но не помогло.
теперь другая проблема, ебучий builder c++ ругается на Unresolved external и в основном проекте, раньше только в пустом ругался, в котором я пытался разобраться в этой проблеме. решения нет, хз пока у кого спросить про эту ошибку. всё равно спасибо
Аноним 11/09/17 Пнд 20:44:48  1060443
Кто-нибудь может объяснить зачем сейчас писать вот так:
int
sum (int a, int b)
Вот это вот функция. Это же 89, верно ? Зачем и кому сейчас это надо ?
Аноним 11/09/17 Пнд 21:18:24  1060448
>>1060344
Должно быть так:
arm-linux-gnueabi-gcc -<args>
Аноним 11/09/17 Пнд 22:15:42  1060464
>>1060443
Ты про int на отдельной строке? Или про что? Возвращаемый тип на отдельную строку лепят в некоторых проектах, где названия возвращаемых типов длинные, плюс еще атрибуты всякие прописываются типа конвенции вызова. Если писать в одну строку, декларацию все равно придется разбивать.
Аноним 11/09/17 Пнд 22:17:23  1060466
>>1060442
Удали все собранные бинарники, собери начисто, покажи как ругается.
Аноним 11/09/17 Пнд 23:09:40  1060484
>>1060442
>ругается на Unresolved external
Небось на какой-нибудь _init, _start и т.п. ругается?
Аноним 11/09/17 Пнд 23:12:43  1060489
>>1060344
>Есть код на C, нужно скомпилировать под ARM архитектуру.
Подробнее, что за платформа, какая ось.
Планшет на андроиде и плата с стм32 - оба подразумевают ARM, но вот компиляция будет разной.
Аноним 11/09/17 Пнд 23:48:54  1060511
>>1060489
Шо ты несешь. Различия только в выборе архитектуры команд (в STM только thumb) и в доступности всяких флоатов. В остальном, компилятор - он и есть компилятор.
Аноним 12/09/17 Втр 00:19:56  1060528
>>1060464
Блядь. Я думал это формальное описание старого стандарта. Вот я дебил. Ладно. Спасибо!
Аноним 12/09/17 Втр 09:03:34  1060592
>>1060489
Устройство на базе процессора AT91SAM9260-QU, ось линукс с ядром 2.6.22. Пока пытаюсь просто скомпилировать простейший код, который бы заработал.
Аноним 12/09/17 Втр 09:18:01  1060593
>>1060484
на _HUI который и является булевой переменной, я просто так и не понял причину этой ошибки в принципе, почему она возникает ВООБЩЕ интересно, а не только у меня, суть ошибки.

>>1060466
а вот это я не пробовал, как буду дома, сделаю. Удалить exe и obj? или еще какие? сделаю вечером и отправлю сюда скрин
Аноним 12/09/17 Втр 09:31:45  1060598
>>1060592
>Пока пытаюсь просто скомпилировать простейший код, который бы заработал.
Простейший код - это записать единичку в указатель на регистр, управляющий светодиодом. Скидывай сюда код и вывод компилятора.
>>1060511
Устройства под линупсами поддерживают нэйтивную компиляцию. Бэйрметал - кросс онли.
>This specifies the name of the target ARM processor. GCC uses this name to determine what kind of instructions it can emit when generating assembly code. Permissible names are: `arm2', `arm250', `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7', `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700', `arm700i', `arm710', `arm710c', `arm7100', `arm720', `arm7500', `arm7500fe', `arm7tdmi', `arm7tdmi-s', `arm710t', `arm720t', `arm740t', `strongarm', `strongarm110', `strongarm1100', `strongarm1110', `arm8', `arm810', `arm9', `arm9e', `arm920', `arm920t', `arm922t', `arm946e-s', `arm966e-s', `arm968e-s', `arm926ej-s', `arm940t', `arm9tdmi', `arm10tdmi', `arm1020t', `arm1026ej-s', `arm10e', `arm1020e', `arm1022e', `arm1136j-s', `arm1136jf-s', `mpcore', `mpcorenovfp', `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s', `cortex-a5', `cortex-a8', `cortex-a9', `cortex-a15', `cortex-r4', `cortex-r4f', `cortex-m4', `cortex-m3', `cortex-m1', `cortex-m0', `xscale', `iwmmxt', `iwmmxt2', `ep9312'.
И это только один флажок gcc, для выбора архитектуры ARM.
Про всякие хитровыёбанные платы, которые требуют BSP, я уже и не говорю.
Аноним 12/09/17 Втр 09:35:08  1060599
d7vex8[1].jpg (49Кб, 539x568)
>>1060593
>Удалить exe
>ось линукс с ядром 2.6.22
Аноним 12/09/17 Втр 09:39:44  1060604
>>1060598
С какими ключами запускать компилятор чтобы чтобы он вывел информацию?
Аноним 12/09/17 Втр 09:44:16  1060608
>>1060599
всмысле linux? у меня винда же
Аноним 12/09/17 Втр 09:48:59  1060613
>>1060604
Ошибки компилятор выводит в любом случае. Для варнингов есть -Wall -Wextra
Кстати -Wall - флажок практически мастхэв в любых случаях
>>1060608
Значит кросскомпилятор, да? Где тулчейн качал?
Аноним 12/09/17 Втр 09:56:22  1060621
>>1060613
у меня c++ builder 6, он работает только под виндой. Я знаю, что я говноед, но так реально проще
Аноним 12/09/17 Втр 09:56:37  1060622
1.png (19Кб, 808x676)
2.png (9Кб, 661x418)
>>1060613
Первый скрин - компиляция, второй - запуск.
Аноним 12/09/17 Втр 10:37:20  1060639
>>1060622
давай вывод file test_arm
Аноним 12/09/17 Втр 10:46:46  1060645
3.png (26Кб, 808x676)
>>1060639
Аноним 12/09/17 Втр 10:51:29  1060650
>>1060645
/lib/ld-linux.so.3 на месте? Уж очень похоже на это
https://unix.stackexchange.com/questions/378301/linux-executable-fails-with-file-not-found-even-though-the-file-is-there-and-i
Аноним 12/09/17 Втр 10:57:36  1060653
>>1060645
Да, имелся ввиду вывод file на целевой машине, а не виртуалке.
Аноним 12/09/17 Втр 11:02:21  1060655
>>1060653
На целевой машине нет утилиты file. Там очень урезанный линукс.
>>1060650
Действительно, этой библиотеки нет. Где я ее могу взять и зависит ли она от версии ядра?
Аноним 12/09/17 Втр 11:13:18  1060660
>>1060655
Попробуй флажок -static для компилятора. У тебя динамический эльф собирается на новой версии ядра, а запустить пытаешься на старой.
Аноним 12/09/17 Втр 11:19:00  1060664
>>1060660
Скомпилировал с флагом -static, теперь пишет Illegal instruction.
Аноним 12/09/17 Втр 11:34:38  1060670
>>1060664
>Illegal instruction
Ну даж хз. Попробуй -mcpu=arm9
Аноним 12/09/17 Втр 11:39:42  1060672
>>1060670
Тоже самое. Пиздец какой-то, я уже неделю с эти ковыряюсь.
Аноним 12/09/17 Втр 11:44:12  1060675
>>1060672
Что за плата хоть?
Аноним 12/09/17 Втр 11:56:09  1060681
>>1060675
Частная разработка завода. Плата модуля ЦП в гибком мультиплексоре.
Слушай, file показывает что была использована библиотека ld-linux.so.3, которой на целевой машине нет. Может ее туда подсунуть и тогда все заведется? Только вот суффикс 3 в имени библиотеки что означает? Версию ядра?
Аноним 12/09/17 Втр 12:58:37  1060715
Не совсем по теме треда, но: поставил десятку вместо восьмерки, код, который писал ранее на OpenCL, пЕрестал нормально работать. Комп зависает при первом выполнении шейдера, если в дебаге запускать, падает на clFinish. Падает только в том случае, когда в шейдере есть синхронизация с barrier - с любыми аргументами. В чем может быть проблема?
Аноним 12/09/17 Втр 13:13:01  1060722
>>1060681
Подсунул библиотеку. Теперь Input/Output error.
Аноним 12/09/17 Втр 13:20:30  1060725
>>1060681
>Может ее туда подсунуть и тогда все заведется? Только вот суффикс 3 в имени библиотеки что означает? Версию ядра?
Если ты хочешь взять ld-linux.so.3 со своей виртуалки, и подсунуть под арм платы - мне кажется это не самая разумная идея. Если ты только не найдёшь эту библиотеку собранную под твой арм.

Ты же где-то исходники для ядра линукса брал? Если ты работаешь на этом же заводе - у тебя должны быть сорцы. Ковыряй мэйкфайл, смотри с какими ключами и какой компилятор запускается. Illegal instruction - насколько я помню, означает, что файл система сожрала, но на уровне исполнения произошла ошибка. Может -msoft-float нужно указать, может уточнить -march или -mcpu.

Собирать программу с нового ядра - под старое можно, но если честно, я никогда подобным не занимался. Вангую, что одними опциями компилятора тут не отделаться.
Аноним 12/09/17 Втр 13:38:42  1060731
4.png (26Кб, 808x676)
>>1060725
Да я сам этим никогда не занимался. Работаю в конторе веб-разработчиком, внезапно шеф вспоминает что у нас есть мультиплексор, собранный на заводе в другом городе. А поскольку единственный программист в штате - это я, то и поручили разобраться с этой штукой мне. А я с железками вообще никогда не работал. Исходники ядра есть, мне это мало о чем говорит. Содержимое мейк-файла на пикрил. Все эти ключи я уже пробовал. В линуксе на самой плате нет практически нихера, так что приходится компилировать на убунте в надежде что заведется на этой железке.
Аноним 12/09/17 Втр 13:48:59  1060733
>>1060731
И что, скомпилированное с -static и -march=arm9tdmi точно также вызывает illegal instruction?
Можно ещё конечно readelfом сравнить то, что успешно исполняется на плате и то, что получается после компиляции у тебя.
Аноним 12/09/17 Втр 14:09:23  1060752
5.png (21Кб, 808x676)
>>1060733
Да, с этими флагами все так же illegal instruction. Вот, например, сравнение моего бинарника и того, что работает на плате.
Аноним 12/09/17 Втр 14:34:53  1060769
>>1060752
покажи лучше readelf -a обоих файлов
Аноним 12/09/17 Втр 14:44:15  1060776
>>1060769
Рабочий бинарник: https://pastebin.com/v8rnaMhW
Тестовый бинарник: https://pastebin.com/KStx0FEa
Аноним 12/09/17 Втр 16:22:38  1060843
>>1055733 (OP)
В чем преимущества и недостатки этого языка по сравнению с другими языками?
Аноним 12/09/17 Втр 16:47:35  1060862
Пытаюсь написать пирамидальную сортировку, но выходит так, что сортировка пузырькем выходит быстрее.
В чем косяк того, что я написал?

https://pastebin.com/mpD7p1QL
Аноним 12/09/17 Втр 19:31:46  1060961
Кто-то в курсе, malloc обязана возвращать чётный адрес и можно ли на это положиться?
Аноним 12/09/17 Втр 19:58:23  1060977
>>1060961
нет, она нуль возвращает, если не смогла выделить память.
Аноним 12/09/17 Втр 20:48:02  1060999
>>1060961
malloc возвращает адрес, подходящий для любой переменной, поэтому частично можно на это положиться, если на целевой машине переменные размером более 1 байта требуют выравнивания.
На x86 выравнивание не обязательное, но на 8 байт тебя все равно выровняют. В целом, тебе, конечно, никто ничего не гарантирует, но на любой 32-битной машине malloc вернет тебе адрес, который кратен минимум четырем.

>>1060977
0 четный.
Аноним 12/09/17 Втр 20:57:14  1061007
>>1060999
>0 четный.
на сколько делится?
Аноним 12/09/17 Втр 20:59:52  1061011
>>1061007
На сколько хочешь, даже на матрицу
Аноним 12/09/17 Втр 21:02:38  1061013
>>1061007
https://ideone.com/iWv3Qr
Аноним 12/09/17 Втр 21:06:01  1061017
>>1061013
матаноблядская магия, если 0 делится на все то угодно, почему он четный?
Аноним 12/09/17 Втр 21:07:52  1061021
>>1061017
Потому что четное число по определению - это число, у которого остаток от деления на 2 равен нулю. Ну или можешь сказать, что это 2 умноженное на любое целое число.
Аноним 12/09/17 Втр 21:09:05  1061023
>>1061021
На любое натуральное число и пресловутый ноль, по-твоему
Аноним 12/09/17 Втр 21:37:14  1061042
>>1061017
>если 0 делится на все то угодно, почему он четный?
Потому что он делится на двойку, дебил.
Аноним 12/09/17 Втр 21:54:23  1061046
>>1061023

Троллинг тупостью пошел?
Аноним 12/09/17 Втр 22:03:28  1061053
>>1061046
Нет, это перавильное замечание. Если ты не француз и не матлогик, натуральные числа ноль не включают.
Аноним 12/09/17 Втр 22:11:37  1061060
>>1060999
>В целом, тебе, конечно, никто ничего не гарантирует, но на любой 32-битной машине malloc вернет тебе адрес, который кратен минимум четырем.
Благодарю. А что бы наверняка, нет какой-нибудь опции проверить это, типа #ifdef MALLOC_ALIGN_EVEN ?

Аноним 12/09/17 Втр 22:19:35  1061064
>>1061060
это стандарт выравнивание будет до самого большого типа, которому необходимо выравнивание. или тебе обязательно нужно знать?
Аноним 12/09/17 Втр 22:38:11  1061075
>>1061060
В С11 можешь узнать alignof(max_align_t). alignof в stdalign.h, max_align_t в stddef.h. До C11 с гарантией никак, но можно смотреть на выравнивание структур (если до проверки на него никто не повлиял директивами или ключами компилятора). В struct test_alignment { char x; double d; }; дабл скорее всего будет выровнен до его натурального выравнивания, поэтому sizeof(struct test_alignment) - sizeof(double) скорее всего даст тебе выравнивание меньшее или равное выравниванию, гарантированному malloc().
Аноним 12/09/17 Втр 22:44:30  1061083
>>1061053

Тогда поезжай во Францию, может хоть там тебе расскажут о существовании отрицательных чисел, из которых, ходят слухи, некоторые даже бывают четными.
Аноним 12/09/17 Втр 23:16:39  1061100
>>1061083
Прошу прощения, не удосужился прочесть всю переписку. Ты прав.
Аноним 13/09/17 Срд 00:02:35  1061127
>>1061075
Спасибо, этого должно хватить.
>>1061064
Я ценный бит хотел использовать указателе.
Аноним 13/09/17 Срд 09:59:24  1061205
>>1060776
Всё это немного выходит за рамки языка Си и ближе к красноглазикам. Продублируй вопрос в /s/ на всякий случай.
А ещё лучше, переконфигурируй glibc под целевое ядро и будет тебе счастье.
Аноним 13/09/17 Срд 13:06:53  1061269
>>1061205
Разобрался с этой ерундой. Взял с https://www.uclibc.org/ образ root_fs_arm.ext2, примонтировал его, сменил корневой каталог на root_fs_arm.ext2/bin/su используя эмулятор qemu и там бинарник скомпилировался как надо, на целевой плате все работает. Спасибо за помощь. Сам бы я хер разобрался с этим всем.
Аноним 13/09/17 Срд 15:03:15  1061326
>>1059191
>И "небезопасность" таких функций не в использовании указателей, как говорят ньюфаги выше
Ну извините. Мой кукарек основан на опыте быдлокодинга на C#. В сярпе "небезопасность" - это именно использование поинтеров. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/unsafe
Аноним 14/09/17 Чтв 17:52:25  1061923
Добрый вечер, господа. Интересует такой вопрос: может ли кто-нибудь из вас написать программу, которая считывает все данные из очереди сообщений POSIX (mqueue)? Чтобы прям вторым аргументом дать ей имя очереди, а на выходе в каком-нибудь файле получить содержимое очереди. Спасибо.
Аноним 14/09/17 Чтв 18:16:37  1061938
Где найти программиста С/С++ который не прочь заняться разработкой ПИРАТСКОГО СЕРВЕРА?
Аноним 14/09/17 Чтв 20:44:19  1062031
Объясните, почему
char str[150] = "abcd";
нормально присваевается, а

char str[150];
str[150] = "abcd";

выдает ошибку.
Аноним 14/09/17 Чтв 22:06:47  1062074
>>1062031
В первом случае ты объявляешь массив чаров, заполняешь первые 4 элемента, остальные заполнятся автоматически нулями.
Во втором ты говоришь, что элемент 150 равен "abcd". Но одному элементу обязана соответствовать 1 символ.
Аноним 14/09/17 Чтв 22:30:10  1062088
>>1062074
А как тогда правильно присвоить "abcd", если массив уже объявлен в виде char str[150];
Мне нужно, чтоб эффект был как в первом случае.
Аноним 14/09/17 Чтв 22:31:15  1062089
strcpy, memcpy и прочие функции, которые работают со строками.
Аноним 14/09/17 Чтв 23:35:59  1062116
>>1062088
memcpy
Аноним 15/09/17 Птн 10:20:16  1062214
У меня проблема, аноны. Компилирую под ARM, использую функции mq_open(), mq_send(), mq_recieve() библиотеки librt. При компиляции в конце ставлю флаг -lrt. Однако все равно получаю ошибку "undefined reference to `mq_open'". Посмотрел по пути /lib, там лежат библиотеки librt-0.9.27.so и librt.so.0. Пробовал даже подключать их так -L/lib/librt-0.9.27.so и -L/lib/librt.so.0, все равно не компилируется. Под убунтой компилятором arm-linux-gnuebi-gcc все работает как надо, но он мне не подходит. А в тулчейне с компилятором arm-linuxuclibc-gcc такая херня. Может кто-нибудь помочь с этим?


Аноним 15/09/17 Птн 11:05:17  1062238
>>1062214
Еще добавлю что если в убунте проверить библиотеку таким образом: "grep -r mq_close librt-0.9.29.so", то ответ будет "Двоичный файл librt-0.9.29.so совпадает". А если сделать то же самое для библиотеки в тулчейне, то ответом будет пустая строка. Будто бы эти функции не реализованы в версии библиотеки librt-0.9.27.so. Я пробовал подменять библиотку в тулчейне с 27 на 29 версию, но компилятор все равно не видит этих функций.
Аноним 15/09/17 Птн 11:40:41  1062255
>>1062214
С какими ключами компуклируешь? В какой последовательности?
Аноним 15/09/17 Птн 13:41:39  1062297
Крестотред проебался, можно у вас спросить?
Аноним 15/09/17 Птн 14:15:41  1062306
>>1062255
arm-linux-uclibc-gcc -march=armv5te -mtune=arm9tdmi -Wall -static -o slotinfo slotinfo.c -lpthread -lrt
Аноним 15/09/17 Птн 14:36:49  1062315
>>1062306
Попробуй "-lpthread -lrt" писать до "-o"
Аноним 15/09/17 Птн 16:15:43  1062357
Есть код

int i;
char mass[252];

i=1; mass[0]='z';
scanf ("%c", &mass);
i = 2;
while ( mass[i-1] != '\n' ) {
scanf ("%c", &mass);
i++;
}

printf ("%d\n", strlen(mass));

Почему после введения ab и нажатия enter выдается результат 20 вместо ожидаемого 2?
Не пойму, откуда там аж 18 лишних взялось.
Аноним 15/09/17 Птн 16:18:54  1062359
>>1062357
Блин, парсер сожрал i в квадратных скобках, где scanf.
Аноним 15/09/17 Птн 16:31:28  1062364
>>1062359
И если 'z' и '\n' учесть, то 4 всего ожидается.
Аноним 15/09/17 Птн 20:53:37  1062496
>>1062357
\0 в конец строки за тебя кто писать будет?
Аноним 15/09/17 Птн 22:07:02  1062540
>>1062496
Ясно, теперь заработало как надо.
А автоматически завершающий \0 по какому принципу ставится, раз strlen все-таки срабатывал?
Аноним 15/09/17 Птн 22:09:54  1062542
>>1062540
strlen срабатывал, потому что mass у тебя в стеке. И рано или поздно среди мусора в стеке встретится нулевой байт.
Аноним 15/09/17 Птн 22:11:41  1062544
>>1062540
Автоматически, естественно, за тебя \0 никто не поставит (ну кроме случаев, когда у тебя строковый литерал "foo", тогда да, он, как полноценная строка, включает в себя и \0 тоже).
Аноним 16/09/17 Суб 15:47:05  1062854
>>1062542
Как распределяется этот мусор? Почему-то \0 каждый раз в одном и том же месте встречается, иначе бы 20 каждый раз после введения ab не выдавалось.
Аноним 16/09/17 Суб 20:45:09  1062967
>>1062854
> Как распределяется этот мусор?
Да ты охуел с такими вопросами. Все, что тебе нужно знать - это undefined behavior, и его нужно избегать, а не искать закономерности. Возьми gdb и посмотри содержимое стека, если уж так интересно.
Аноним 16/09/17 Суб 21:02:59  1062975
>>1062967
>undefined
Тут больше похоже на undocumented.
Аноним 16/09/17 Суб 21:20:09  1062979
>>1062975
> J.2 Undefined behavior
> The value of an object with automatic storage duration is used while it is
indeterminate
> 6.7.9
> If an object that has automatic storage duration is not initialized explicitly, its value is
indeterminate.
Ты тут новичок, да?
Аноним 17/09/17 Вск 03:24:36  1063073
>>1055733 (OP)
> Что читать:
> - Классика от Отцов
А почему не Дейтелы?
Аноним 17/09/17 Вск 07:49:06  1063096
>>1063073
> А почему не Дейтелы?
Дейтелов паста рекомедует из-за того, что это абсолютно энтри-левел
Аноним 17/09/17 Вск 16:54:08  1063204
>>1062979
>indeterminate
На деле-то оно оказалось в моем случае достаточно детерменированным. Но методом тыка я уже разобрался, от чего зависит стабильное появление \0 в определенном месте мусорной кучи, когда его явно не задали в коде.
Аноним 18/09/17 Пнд 08:07:02  1063352
>>1055787
И нахуя он такой нужен тогда?
Аноним 18/09/17 Пнд 09:08:17  1063370
>>1062315
Если переместить их до -o, то компилятор еще и заголовочный файл <semaphore.h> теряет в довесок к <queue.h>.
Аноним 18/09/17 Пнд 10:05:56  1063384
>>1063370
Нормальный у тебя порядок опций был, не слушай его. А вот -static скорее всего гадит, так как librt, возможно требует динамической линковки.
Аноним 18/09/17 Пнд 10:12:43  1063388
01.PNG (40Кб, 848x512)
В вузе начали С, написали вот это, не работает. Гуглил, но там все ссылки на С++ ведут. Пробовал все кавычки и скобки, писал с .h и без, ничего не помогло. Что делать?
Компилятор CodeBlocks Mingw
Аноним 18/09/17 Пнд 10:15:39  1063389
>>1063384
Хреново если так. Ибо без статика у меня на ARM-машине бинарник вылетает с ошибкой not found. Думаю оно имеет ввиду что не найдена библиотека.
Аноним 18/09/17 Пнд 10:15:45  1063390
>>1063388
Тебе на каком языке то писать надо?
если С, то про cout, cin забудь, в С есть только printf,
Если C++, то #include <iostream>
Аноним 18/09/17 Пнд 10:20:50  1063393
>>1063390
Препод в вузе дал эти операторы, и в методичке его они есть, охуеть.
Спасибо, сам теперь удивляюсь своей тупости.
Аноним 18/09/17 Пнд 10:28:13  1063395
Собираюсь на нем писать под микроконтроллеры, есть специализированные материалы про это? И какие подводные?
Аноним 18/09/17 Пнд 11:16:26  1063412
>>1063395
Arduino
Аноним 18/09/17 Пнд 13:16:26  1063476
>>1063412
Avr
Аноним 18/09/17 Пнд 15:01:47  1063518
>>1063395
Сейчас в России мейнстрим - STM32, у них ко всему прочему очень удобные отладочные платы с встроенным отладчиком. Полно семинаров/вебинаров от производителя, материалы все выложены. Здесь http://www2.hitex.com/download-isg неплохие мурзилки. Также постарайся не подсесть на ломаный софт типа IAR и Keil.
Аноним 18/09/17 Пнд 17:09:29  1063574
>>1063518
Такое дело, я в беларуси, и записался в лабораторию в универе, а там avr, хотелось бы узнать интересно ли это
Аноним 18/09/17 Пнд 17:45:39  1063589
Как в С создать копию массива т.е. скопировать массив array1 в переменную array2 без регистрации и СМС?
Аноним 18/09/17 Пнд 17:47:08  1063590
>>1063589
memcpy
Аноним 18/09/17 Пнд 19:29:22  1063623
>>1063589
int array1[] = {1, 2, 3};
int* array2 = array1;

не благодари
Аноним 18/09/17 Пнд 19:34:31  1063625
>>1061938
http://bfy.tw/DzXx
Аноним 18/09/17 Пнд 20:41:35  1063645
Снимок.PNG (38Кб, 780x531)
Всё равно нихуя не заработало, решил переписать на С++, теперь ему не нравится n.
Что здесь не так? В гугле по ошибке всё на английском и тема не та.
Аноним 18/09/17 Пнд 20:46:38  1063648
>>1063645
Тебе даже номера строк указали, где ты облажался. Поставь себе линукс и гцц, там сообщения на русском специально для дебилов, не желающих учить английский. Закрывать открытые фигурные скобки за тебя кто будет? А n(<15) - это что за заклинание?
Аноним 18/09/17 Пнд 20:49:53  1063649
>>1063648
Б-же, сам уже ору. Я ведь смотрел в упор на эту строку и всё равно не видел ничего
Аноним 18/09/17 Пнд 21:04:31  1063653
>>1063388
> iostream
Ты тредом ошибся.
Аноним 18/09/17 Пнд 21:20:29  1063658
>>1063653
>iostream.h
Он еще и годом ошибся.
Аноним 18/09/17 Пнд 23:08:21  1063687
>>1063658
>Он еще и годом ошибся.
Скорее веком.
Аноним 19/09/17 Втр 00:16:40  1063703
>>1063352
С этим то аноном все ясно, похапе фрилансер 300к/сек и ничего, что про стек впервые слышит, но у меня вот реально проблема. Пишу на си, начинаю скучать по шаблонам и всякому ООП, тяне к плюсам. Начинаю писать на плюсах, охуеваю от этих блядских шаблонов и всякого ООП, тянет назад к сям. Пишу на чем-то другом - хочется вернуться к сям. Это как-то лечится?
Аноним 19/09/17 Втр 00:19:22  1063705
>>1055788
Не надо так делать. Читай Кернигана и Ритчи. Базарю.
Аноним 19/09/17 Втр 00:27:02  1063706
>>1063703
Лечится по мере накопления опыта.
Аноним 19/09/17 Втр 06:14:47  1063740
>>1063703
Хуя какой я богачь, аж завидно :(
Ладно ООП, С из другого мира, но шаблоны...
даже generic macro добавили, чтобы шаблоны не добавлять
Аноним 19/09/17 Втр 06:15:24  1063741
>>1063703
Это тебе в Rust
Аноним 19/09/17 Втр 11:05:17  1063775
Почаны, компуклирую под мипс на гцц. Readelf показывает, что в скомплированном объекте куча разных секций и символов.
Стандартные секции типа bss, rodata, text и data - с ними всё ясно. Но где можно почитать про остальные секции, которые генерируются компилятором/линковщиком? Все эти reginfo, sbss, MIPS.abiflags, pdr и так далее?
Аноним 20/09/17 Срд 01:24:13  1064116
>>1063741
Да, кстати, подумываю вкатиться. По описанию дюже пиздато, если у них получилось сделать, как обещали, буду им обмазываться, пока не охуею.

>>1063706
Бля, буду ждать.

>>1063740
Нужны шаблоны, пиши на плюсах. Или вкатывайся в магию препроцессора.
Аноним 20/09/17 Срд 01:25:13  1064117
>>1063775
Думаю, большая часть в дукоментации компилятора/линковщика, как ни странно.
Аноним 20/09/17 Срд 03:01:09  1064124
Крестовые классы действительно удобны? Я люблю Си и не люблю кресты из-за тотальной усложнённости. Но если классы полезны, то, думаю, можно перейти на кресты беря от них только классы.

Игорю пишу. Оно того стоит?
Аноним 20/09/17 Срд 03:16:41  1064125
>>1064124
> Игорю пишу. Оно того стоит?
Да, имеет некоторый смысл. Всякие коллекции (особенно с шаблонами) не придется переизобретать по сто раз на дню, перегруженные операторы сделают математику гораздо более читаемой, а виртуальные методы и наследование действительно нужны в играх (да, на сишке тоже можно, но на сишке и прыгать вокруг этого всего нужно больше). А вот переходить только ради того, чтобы использовать ключевое слово class и методы вместо ключевого слова struct и функций с явным this в сишечке - не стоит.
Аноним 20/09/17 Срд 13:23:30  1064205
>>1064117
Как ни странно, но нихуя.
Всё таки нашёл, что искал. Вся эта хуита описана в SYSTEM V APPLICATION BINARY INTERFACE для семейства MIPS.
Оставлю для потомков ссылку, вдруг кто-нибудь тоже искать будет.
http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf
Аноним 22/09/17 Птн 07:22:05  1064873
Ребятки, как научится правильно собирать программы вместе с большими библиотеками , например ffmpeg, в каких книжках это подробно объясняется для сопляков???
Аноним 22/09/17 Птн 08:54:33  1064882
>>1064873
О сборке и установке принято писать в файлах README и INSTALL, которые прилагаются к исходникам конкретного софта.
Аноним 22/09/17 Птн 09:11:25  1064884
>>1064882
Поподробнее плиз. Ну есть тут например описание, и что дальше то делать , как например собирать со своим проектом, как это дело линковать, как создать .so библиотеку из этого всего с помощью gcc

https://github.com/FFmpeg/FFmpeg/blob/master/INSTALL.md
Аноним 22/09/17 Птн 10:17:55  1064891
>>1064884
Тогда тебе надо для начала пройти школьный курс информатики.
Аноним 22/09/17 Птн 10:22:12  1064894
>>1064873
Мне кажется, тебе нужен cmake. В каждой папке проекта ты создаешь конфиг, в котором описываешь действия над локальными файлами и связи с другими частями проекта. Например тебе нужно собрать экзешник, так ты перечисляешь исходники, указываешь расположение хедеров и подпроектов, в которых собираются библиотеки, прописываешь инструкции по установке (что и куда скопировать после сборки). cmake на основании дерева таких конфигов генерит множество более низгоуровневых конфигов, например тех же Makefile, но не обязательно.

autoconf (configure), упомянутый в ffmpeg похож, но ебанутее

Туториалов по cmake полно, но документация написана очень специфически, нужно время чтобы привыкнуть, без примеров очень сложно.
Аноним 22/09/17 Птн 10:28:29  1064897
>>1064884
Вот есть бесплатная книга http://www.stolyarov.info/books/programming_intro/vol2
Начиная с 441 страницы рассказываются основы сборки программ.
Аноним 22/09/17 Птн 16:06:38  1064991
Почему такой код:
https://pastebin.com/petDuZbE
Печатает мне пустую строку, а
https://pastebin.com/tumWJ9ZS
этот корректно заменяет все 'c' на 'b'?
Аноним 22/09/17 Птн 16:31:19  1064995
>>1064991
У тебя здесь s = '\0'; первое же вхождение "с" заменяется на нуль-терминатор. printf выводит всё говно до первого символа '\0', а он у тебя получается на в самом начале.
Замени "ccabc" на "bbabc" и он тебе выведет "bbab".
Аноним 22/09/17 Птн 23:03:25  1065210
146374743317097[...].png (45Кб, 300x300)
itoa
offsetof
int size = snprintf(NULL, 0, format, ...);
char* buffer = malloc(size);
sprintf(buffer, format, ...);

ЖМУ ПИНУС!!!!
ШВАБОДКА, ПЕТУХИ!!!
Аноним 23/09/17 Суб 08:15:39  1065290
Есть ли здесь сишники, которым платят за разработку софта на этом языке без необходимости обмазываться крестами/жабой/шарпом/питоном?
Аноним 23/09/17 Суб 13:43:34  1065400
Пишу свой переключатель потоков под x86. Какие регистры принадлежат контексту и требуют сохранения?

switch_threads:
push eax
push ecx
push edx
push ebx
push ebp
Аноним 23/09/17 Суб 14:04:07  1065407
>>1065400
Ты тредом не ошибся?
> Какие регистры принадлежат контексту и требуют сохранения?
Очевидно, что все, которые доступны для записи. pushad, pushfd, стейт FPU/SSE тоже, отладочные, сегментные регистры тоже имеет смысл сохранять.

>>1065290
> без необходимости обмазываться крестами/жабой/шарпом/питоном
А что, в 2017 существуют такие программисты, которые пишут на каком угодно языке, но только на нем одном?
Аноним 23/09/17 Суб 15:47:42  1065467
>>1065407
>А что, в 2017 существуют такие программисты, которые пишут на каком угодно языке, но только на нем одном?
Мой вопрос исключил лишь определенные языки, а не вообще все кроме си.
Аноним 25/09/17 Пнд 20:08:04  1066364
Написал тест переполнения стека процессора: https://ideone.com/ok6m10
В ideone код не работает, в Dev-C++ запускается, вызывает сигнал SIGSEGV, т.е. насколько я понимаю, признает стек переполненным и затыкается.
Проблема в том, что по ТЗ тест должен выдать результат - например, число итераций, которое вызывалась рекурсивная функция или подсчитанный объем стека в байтах. То есть, после переполнения программа должна продолжаться. Отсутствие эксепшенов в Си слегка вгоняет меня в ступор. Как продолжить работу программы при переполнении?

Была мысль с помощью malloc оценивать свободное пространство, и если malloc возвращает null, сворачивать рекурсию, но такое не заработало.

Вообще такая задача вызывает у меня массу вопросов, например, есть ли смысл проведения подобного теста. Логика тут вообще такая: функция вызывается рекурсивно и на каждой итерации N создается 3N переменных. Отсюда сразу еще и такой вопрос: надо ли очищать через free память на каждой итерации?

Надеюсь, кто-нибудь поможет.
Аноним 25/09/17 Пнд 20:11:17  1066368
>>1066364
>запускать сишный код в браузерном интерпретаторе идеоне.
наркоман
Аноним 25/09/17 Пнд 20:43:50  1066392
>>1066364
> переполнения стека процессора
В процессоре нет стека.

> тест
Хуевый тест. Это все очень сильно зависит от ОС.

> То есть, после переполнения программа должна продолжаться.
Ты слегка охуел. После подобных ошибок программа должна тихо сдохнуть. Тем более после сегфолта. Но ты можешь попробовать, во-первых, сделать свой counter volatile, во-вторых, установить обработчик SIGSEGV с помощью signal (signal.h) и всю работу делать в обработчике. Но гарантий не будет никаких. В-третьих, можешь подумать о setjmp/longjmp для возврата из обработчика сигнала в main. Это не по стандарту, но в целом работает.

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

> Была мысль с помощью malloc оценивать свободное пространство
В винде, например, есть лимит на размер стека. Т.е., свободной памяти еще гигабайты, а у тебя стек оверфлоу.
Аноним 28/09/17 Чтв 04:51:19  1067485
>>1065407
Многие системщики. Хотя сейчас железо позволяет портировать кресты дохуя куда, потому как правило, пишут только самые низкоуровневые вещи, потом портируют компилятор цэ2плюса и далее пишут на плюсах. Более того, тут Rust завезли, который, по слухам, пиздат до невозможности, умеет почти что в сборщик мусора, но без рантаймов (все полезности делает компилятор) и еще всякие плюшки. Думаю, если все действительно так радужно, скоро начнут писать низкоуровщину на нем. Тащемто, он для этого и проектировался, чтобы писать не на сях там, где можно писать только на сях и ассемблере.
Аноним 28/09/17 Чтв 04:51:54  1067486
>>1067485
Это вот сюда >>1065290
Аноним 30/09/17 Суб 19:48:24  1068706
https://pastebin.com/tH3jt3p1
Почему после ввода любой буквы начинается бесконечный цикл с default? Ведь буквы же в Си имеют и числовое представление. После ввода любой цифры больше трёх default нормально срабатывает, мне нужно, чтоб и с буквами также было.
Аноним 30/09/17 Суб 20:05:45  1068719
>>1068706
> Почему после ввода любой буквы начинается бесконечный цикл
Платина.
1) Потому что буквы не подходят под формат %d.
2) Потому что ты не проверяешь возвращаемое значение scanf.
3) Потому что в input при вводе буквы ничего не присваивается, там мусор.
4) Потому что после ввода буквы ты не очищаешь поток ввода, и там по-прежнему остается буква.

> Ведь буквы же в Си имеют и числовое представление
Если %с скажешь, будет у тебя числовое представление буквы, но тогда и конвертировать цифры из строки в число для тебя никто не будет.
Аноним 30/09/17 Суб 20:57:52  1068744
>>1068719
>3) Потому что в input при вводе буквы ничего не присваивается, там мусор.
>4) Потому что после ввода буквы ты не очищаешь поток ввода, и там по-прежнему остается буква.

Тогда почему вместо мусора в бесконечном цикле отображается последняя введённая цифра, если в коде перед scanf в цикле поставить printf("%d\n",input);, затем после запуска ввести цифру, а потом букву?
Аноним 30/09/17 Суб 21:35:38  1068762
>>1068744
Потому что цифра подходит и присваивается, а буква не присваивается, и значение input сохраняется. Посмотри, сколько тебе scanf возвращает.
Аноним 01/10/17 Вск 12:41:32  1069112
>>1068762
Если после ввода буквы scanf ничего не присваивает переменной input, тогда оставшаяся часть цикла должна сработать как при предыдущем значении input. Что мешает-то?
Аноним 05/10/17 Чтв 14:38:48  1071103
Screenshot from[...].png (4105Кб, 1366x768)
Screenshot from[...].png (4105Кб, 1366x768)
Программа должна считать кол-во строк, но не работает (взята из Кернигана и Ритчи). Компилирую gcc. Почему так?
Аноним 05/10/17 Чтв 15:45:37  1071140
>>1071103
Разобрался.
Аноним 06/10/17 Птн 14:32:46  1071578
>>1071103
>>1071140
Держи в курсе.
Аноним 06/10/17 Птн 16:59:24  1071641
Анон, где полную документацию изменений в С11 поискать? Из основных тезисов ничего не сказано про константы и присваивания

int a, b, m, n, z;
m = n = 5;
z = a = b = 0;
z--, ( a = b ) = z + ( m != n );
printf ("%d %d %d %d %d\n",
a, b, m, n, z);
MingW последний с c11 стандартом пропускает это, C99 выдает ошибку на =(без скобок считает)

Или еще

int x;
x = 5; ++ x =10;
printf ("%d\n", x);

C11 меняет константу(я еще не проверял в дебагере), ну он точно выдает 10, C99 не пропускает эту ошибку.



Аноним 06/10/17 Птн 21:07:27  1071760
>>1071641
Оба твоих примера не скомпилируются. Оператору = нужно lvalue слева, поэтому никаких инкрементов, никаких скобок туда втыкать нельзя. И, конечно же, ничего в C11 по этому поводу не менялось, и в дальнейшем тоже не изменится. Подозреваю, что ты, как и многие итт, перепутал Си с крестами. В крестах так можно.
Аноним 06/10/17 Птн 21:56:33  1071769
>>1071103
Каля или свеженькая убунта?
Аноним 06/10/17 Птн 23:15:58  1071798
>>1071769
Скорее дефолтный Debian.
Аноним 07/10/17 Суб 09:40:58  1071874
15042854990870.png (78Кб, 792x1023)
>>1063703
Слушай я сам вкатился в Сишку после 10 лет опыта в С++, но по шаблонам скучал только первые пару месяцев и недоумевал почему их не добавили в стандарт, а потом понял почему и решил что правильно сделали не дай бог им там появиться.
Ну ты и сам поймешь потом, просто для примера возьми и сравни исходники какого-нибудь крупного С проекта, типа ядра линукс или гцц, и сравни их с каким нибудь проектом на С++, ты охуеешь насколько С++ уебищный и непонятный язык по сравнению с СИ, во многом ( если не в основном ) благодаря шаблонам.
Как сказал один мимохуй где-то в интернетах: Если ты за 2 минуты чтения хедера не понял полностью как это все работает, то можешь смело выбрасывать такой код в помойку. И это правильно сказано, хочу заметить.

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

Я вот уже где-то год, пишу в основном на СИ, после тех бездарно потраченых 10 лет на С++. И до сих пор переодически нахожу вещи введеные в самых первых стандартах, куда более продуманными и логичными по сравнению с последними высерами в стандартах С и С++.
Я даже не использую С11, потому что там нету ничего полезного, ну может кроме stdatomic.h которые спокойно заменяются GNU built-ins в GCC и Clang ( и мб Intel ) ( а другие компилеры и не нужны ).
Даже посмотри на комментарии в стиле С++ даже они уебищны сами по себе, превращая код в кашу их каких-то пометок, будто на туалетном листе и сравни блочные комментарии ANSI C, которые предназначены для подробного описания кода цельными блоками в основном в хедерах над фунциями и структурами данных, а не пометками посреди кода, которые только ухудшают его читаемость.
Еще т.к я бывший плюсовик, то естественно привык объявлять переменные по ходу надобности, прямо по среди кода. Недавно осознал что, отцы K&R все-таки не просто так это сделали и не из-за каких-то там ограничений или чего-то подобного, а потом типа появился спаситель С++ и разрешил хуярить все в перемешку, потом отупевшие от этого люди в стандарте добавили это в ISO С99.
А теперь поясню почему разделение кода и данных это хорошо:
Во-первых, это СУЩЕСТВЕННО повышает читаемость кода.
Во-вторых, это не дает тебе лепить большие толстые функции > ~100 строк, ведь чем больше функция тем больше в ней задействованно переменных, и тем труднее за ними уследить в одной области видимости, в купе с обработкой ошибок через goto.
Как говорится в linux kernel code style guide - Functions should be short and sweet, and do just one thing.
..
if you have a complex function, and you suspect that a less-than-gifted first-year high-school student might not even understand what the function is all about, you should adhere to the maximum limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to in-line them if you think it’s performance-critical, and it will probably do a better job of it than you would have done).

Another measure of the function is the number of local variables. They shouldn’t exceed 5-10, or you’re doing something wrong. Re-think the function, and split it into smaller pieces. A human brain can generally easily keep track of about 7 different things, anything more and it gets confused. You know you’re brilliant, but maybe you’d like to understand what you did 2 weeks from now.
...

Вот эти золотые слова, должны быть основой любого code style любого проекта.
А если этих правил предерживаться, то Mixed declarations and code абсолютно не нужен, и должен быть отключен в компиляторе через -Werror=declaration-after-statement, если используется стандарт поддерживающий это.

В общем, можно еще долго дискутировать на тему, чем СИ лучше С++ и не зря все серьезные проекты пишутся на СИ, а не С++. Со временем ты поймешь все эти истины и вообще больше не захочешь видеть С++ никогда в жизни, если уж что-то надо быстро и просто накалякать что-то на коленке, то лучше взять более приспособленные языки типа явы или C#, а не С++.
Аноним 07/10/17 Суб 10:57:31  1071883
>>1071874
> А теперь поясню почему разделение кода и данных это хорошо:
> Во-первых, это СУЩЕСТВЕННО повышает читаемость кода.
Долго держался, но все же проиграл с поехавшего.
Аноним 07/10/17 Суб 13:59:17  1071947
>>1071883
Мне тоже показалось, что что-то неладно, но если там и правда
>5-7 автоматическиъ переменных на фукнкцию
то лучше их объявить в начале, и правда
Аноним 07/10/17 Суб 14:05:54  1071953
>>1071874
> Если ты за 2 минуты чтения хедера не понял полностью как это все работает, то можешь смело выбрасывать такой код в помойку.
Как по мне если ты чего то не понимаешь, скорее всего ты тупой.
Аноним 07/10/17 Суб 14:11:11  1071955
>>1071874
Знатно просрался с этой пидорашки
Аноним 07/10/17 Суб 14:54:58  1071984
>>1071947
Нет, конечно тебе будет казаться это неудобным после того как везде пихают уже mixed declarations.
Но поверь опыту действительно лучших программистов в мире - разработчиков ядра линукс, в которые входят люди из разных топовых компаний типа гугла, интела, амазона и т.д с топовыми образованиями. Они то просто так не станут придерживаться такому code style, который отточен и проверен годами.
Почитай исходники линукс, все функции там действительно маленькие, и с ходу понятные.
Тем более, в си и с++ разные методики освобождения ресурсов, если в с++ используют RAII, шаред поинтеры и т.п. когда можно не парясь сделать return посреди функции или бросить исключение и ресурсы автоматически очистятся, то в си так сделать нельзя, в си ошибки обрабатываются обычно через goto на секции с освобождением ресурсов и представь как легко ошибиться, если у тебя в коде каша из переменных. А если у тебя код разбит на маленькие функции по несколько переменных, то начиная читать код ты сразу видишь какие ресурсы у тебя в функции есть и легко проверить все ли ресурсы были освобождены по выходу из нее.
Если ты бы когда нибудь писал на ассемблере, то понимал бы как легко ошибиться даже с памятью на стеке.
В общем, си это тебе не хуйня для обезьян типа крестовиков и всех остальных чернорабочих.
С++, как и другие ООП языки не требует особой подготовки, поэтому на них выгодно делать проекты в коммерческих компаниях, где можно как можно с меньшими затратами заменить Васю на Петю, порог вхождения низкий.

>>1071953
Вынужден тебя разочаровать, это далеко не всегда так.
Как я уже цитировал выше, Линуса:
>if you have a complex function, and you suspect that a less-than-gifted first-year high-school student might not even understand what the function is all about

Твой код должен быть понятен, даже студенту школьнику, если ты конечно не говнокодишь лично для себя.

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

Я считаю, единственный возможный вариант использования С++ это СИ с классами либо какие-то вариации MISRA С++, Где запрещены STL, шаблоны, исключения, виртуальные функции, и т.п и тем более полностью запрещен С++11.

Но если ты рядовой быдлокодер, не заморачивайся и ебаш как попало с шаред поинтерами и т.п. А лучше вообще возьми пыху или JS там с каким-нибудь electron'ом и вообще все будет в шоколаде.
Аноним 07/10/17 Суб 15:00:31  1071987
>>1071984
Не не не, я не сомневаюсь что есть случаи когда говнокод - это говнокод. С этим ничего не поделаешь. Но заявление про 2 минуты - это уже как-то попахивает максимализмом. Да и вообще это таоке, мол мне лень разбираться в коде, лучше сам напишу всё заново. В итоге вместо 1 говнокода в конторе теперь 2.
Аноним 07/10/17 Суб 16:08:19  1072029
>>1071874
>ну а чтоб полностью убедиться в этом открой исходники Boost.
... - сказал человек, ни разу не открывавший исходники STDlib.
>его проектировали больные люди
Почти все программисты отчасти больные люди. Плюсы проектировали, пытаясь сохранить совместимость с C, и благодаря этому язык получил развитие. Было ли это компромиссом по сравнению с чьим-то идеалом? Да.
>Со временем ты поймешь все эти истины
"Понять истины" - это словосочетание сроду "нырнуть в камни". Если то, что ты изрекаешь, называется истиной, то её можно познать. Чтобы познать истину, достаточно критического склада ума и того, чтобы кто-то её продемонстрировал. Считаешь, что всё сказанное тобой истина и негативно характеризует именно плюсы - вперёд, демонстрируй, мы посмотрим.
>отцы K&R все-таки не просто так это сделали и не из-за каких-то там ограничений или чего-то подобного, а потом типа появился спаситель С++ и разрешил хуярить все в перемешку, потом отупевшие от этого люди в стандарте добавили это в ISO С99.
Я хочу сделать две переменные, инициализатор одной я могу вычислить одним выражением, а для инициализации другой мне нужно несколько строк кода или луп. Что предлагают отцы? Олсо, что предлагают отцы, если я хочу определить функцию в функции? Ну, знаешь, такую, которая вне этой функции не понадобится, а назвать для улучшения читаемости кода хочется.
>А теперь поясню почему разделение кода и данных это хорошо:
Лучше поясни, почему предоставленная свобода является свойством языка, а не тех, кто на нём пишет. Никто не мешает тебе сделать свой стиль кода и придерживаться его (очевидно, что ты можешь позволить себе это, если ты перешёл с плюсов на Си), ты даже можешь написать свой анализатор, который будет тебе пинка давать в нужном месте.
Либо докажи, что на Си нельзя написать нечитаемую работающую мешанину.
>Ну ты и сам поймешь потом, просто для примера возьми и сравни исходники какого-нибудь крупного С проекта, типа ядра линукс или гцц, и сравни их с каким нибудь проектом на С++, ты охуеешь насколько С++ уебищный и непонятный язык по сравнению с СИ, во многом ( если не в основном ) благодаря шаблонам.
Си - уёбищный и непонятный язык по сравнению со Schema.
Из шаблонов мне не нравится специализация, методика разворачивания вариативного списка аргументов, следовательно, всё это я не использую. Так тоже можно.
>и тем труднее за ними уследить в одной области видимости, в купе с обработкой ошибок через goto.
>А теперь поясню почему разделение кода и данных это хорошо:
Звучит иронично, потому что в плюсах ты и данные мог отделять (один блок определений на несколько методов), и ошибки мог обрабатывать не через гото, а вызовом методов и лямбд или даже с помощью исключений.
>пометками посреди кода, которые только ухудшают его читаемость.
>Еще т.к я бывший плюсовик, то естественно привык объявлять переменные по ходу надобности, прямо по среди кода.
Жирными мазками эпатируешь, блядь.
Аноним 07/10/17 Суб 16:21:40  1072040
>>1071874
>Слушай я сам вкатился в Сишку после 10 лет опыта в С++
Собственно дальше можно было не читать.
Аноним 07/10/17 Суб 16:28:07  1072042
>>1072029
>Олсо, что предлагают отцы, если я хочу определить функцию в функции?
Ебать говноед.
Дальше не читал.
Если ты хочешь определять функции в функции, то тебе точно не в семейство языков СИ.
Аноним 07/10/17 Суб 16:31:59  1072043
>>1072042
Все функции должны лежать в единицах трансляции кучей и не быть никак связаны, так нам завещали авторы первой версии стандарта. Аминь!
Аноним 07/10/17 Суб 17:09:16  1072055
>>1072042
Ты не чувствуешь, что ты сопротивляешься природе, объявляя локальные переменные вместо глобальных?
Аноним 07/10/17 Суб 17:10:15  1072057
>>1071987
Он преувеличил про 2 минуты, но наша задача не допустить "ну если не тупые поймут" принципов. Мы всегда хотим по максимуму упростить код.
Аноним 07/10/17 Суб 17:12:03  1072060
>>1072043
>лежать в единицах трансляции кучей и не быть никак связаны
Не особо понял, что ты имел ввиду.
У функций есть разный linkage - external и internal.
Что тебе мешает связать функции из разных единиц трансляции?
Аноним 07/10/17 Суб 17:27:18  1072067
>>1071874
Чот толсто
>Если ты за 2 минуты чтения хедера не понял полностью как это все работает, то можешь смело выбрасывать такой код в помойку.
10 лет опыта, и в коде не разбираться, да даже если это говнокод, то это всё прекрасно разбирается.
Аноним 07/10/17 Суб 18:44:23  1072102
image.png (47Кб, 677x300)
image.png (9Кб, 835x53)
image.png (17Кб, 430x251)
Сап, программач.

Возникла необходимость кроссплатформенно (на уровне исходного кода) создавать окно и получать его идентификатор (пикрелейтед 1). Делать это было решено с помощью GLFW, однако тут я внезапно столкнулся с некой проблемой - линковкой.
Для компиляции пользуюсь gcc из набора MinGW (пикрелейтед 2). Путь к библиотекам прописал, сами библиотеки он тоже видит (если, например, ошибиться в названии, то начинает ругаться на не найденную билиотеку), но при этом выбрасывает "undefined reference" на вызов любой функции из GLFW.
Исходный код - пикрелейтед 3.

Спаси, анон, как эту ебанину фиксить?
Аноним 07/10/17 Суб 19:36:56  1072134
>>1072060
>Что тебе мешает связать функции из разных единиц трансляции?
Конкретно мне мешает то, что в плюсах есть гораздо более удобный способ классифицирования функций и вложения их. Да, действительно, можно компенсировать отсутствие неймспейсов, классов и лямбд бОльшим количеством файлов с кодом, но ЗАЧЕМ?
Аноним 07/10/17 Суб 22:21:15  1072196
>>1072134
Че ты там компенсировать собрался я не понял.
Ебани лучше на пхп че нить, там вообще можно ХТМЛ сразу в код вставлять, прикинь охуеть да?
Аноним 07/10/17 Суб 22:32:07  1072204
>>1072102
>#include "GLFW/glfw3.h"
>#include "stdio.h"
Ты что ебанутый?
Аноним 07/10/17 Суб 22:50:23  1072210
>>1072196
У тебя все переменные глобальные? Вот прикинь, точно так же не все функции должны быть глобальные.
Аноним 07/10/17 Суб 22:53:56  1072213
>>1072210
Че за хуйню несет? Пиздец.
Иди учи матчасть. Функции у него не линкуются, перменные глобальные везде, функции глобальные. Ебануться ты про какой вообще язык говоришь?
Аноним 07/10/17 Суб 22:54:22  1072214
>>1072204
Ну не стукай, я не сишник. Что не так?
Аноним 07/10/17 Суб 23:42:02  1072230
>>1072213
>Функции у него не линкуются
Сам придумал, сам посмеялся?
>функции глобальные
В C есть "неглобальные" функции?
>перменные глобальные везде
Это вообще-от вопрос был. Судя по тому, как ты отказываешься на него отвечать, переменные у тебя неглобальные. Теперь объясни мне, почему переменные не должны быть глобальными, а функции должны.

И вообще вырази свою точку зрения лучше, чем "дальше не читал".
Аноним 07/10/17 Суб 23:59:55  1072237
>>1072230
> В C есть "неглобальные" функции?
Я не он, но предположу, что статические в некотором роде неглобальны, так что инкапсулировать можно с помощью статика.
Аноним 08/10/17 Вск 00:03:26  1072238
>>1072230
>В C есть "неглобальные" функции?
Представь себе.
Ну ты наверняка не слышал даже о линковке символов в С, и не представляешь как выстроить программу на С.
Понятие не имеешь о модульности, о заголовочных файлах, о юнитах компиляции, о модификаторе static, о формате ELF, о его секциях, о том что представляет собой бинарный файл и как система его читает.
Советую ознакомиться со всеми этими вещами, тогда может быть ты перестанешь нести откровенный бред и научишься наконец-то программированию, а не макакингу.

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

Я не собираюсь тебе тут расписывать все детали построения программ на С, потому что в инете полно материала об этом и это не описать в двух словах. Нужно понимать как вообще работает все на низшем уровне от структуры бинарника, до модификаторов видимости символов в С.
Если ты не хочешь в этом разбираться, тогда С не для тебя. С это довольно низкоуровневый язык, который требует глубокого понимания предметной области, чтобы на нем писать, что-то сложнее хелоу вордов.
Аноним 08/10/17 Вск 00:23:44  1072246
>>1072238
Ты уже и меня заебал своей тупостью. В си вообще нет ни глобальных функций, ни переменных, иди почитай стандарт. Но при этом мы все тут понимаем, что имеет в виду анон выше. Торчит ли при этом у тебя фунция голым задом из модуля не имеет никакого значения.
Аноним 08/10/17 Вск 00:40:48  1072251
>>1072238
Ты не туда воюешь. Си я более-менее знаю и пердолить статики, указатели, маллоки, битшифты, препроцессор, рекурсивные макроопределения, хвостовую рекурсию и прочее я умею.
>Ну ты наверняка не слышал даже о линковке символов в С
Она такая же, как в плюсах (минус пердолинг с названиями экспортов в таблицах), так что слышал.
>Понятие не имеешь о модульности
В плюсах то же самое. Испугал ежа голой жопой.
>о заголовочных файлах, о юнитах компиляции, о модификаторе static
В плюсах то же самое. Глобальная переменная тоже может быть невидимой извне, неглобальной она от этого не становится. Все функции в Си "глобальные" (о чём я тебе и говорил).
>о формате ELF, о его секциях, о том что представляет собой бинарный файл и как система его читает.
К языку С не относится касательно, к стандарту языка С - никак. Нужно будет знать что-то о формате ELF или WinPE - открою спецификацию и прочту, это святыня какая-то?
>В С есть все, что необходимо для построения самых сложнейших систем.
Тебе для построения сложнейших систем необходимы только кнопки 0/1 и бумага с ручкой.
>Если даже на чистом ассемблере пишут полноценные ОС типа калибри и минует, то о чем вообще речь?
Это ты мне скажи, о чём ты ведёшь речь. Я задал дискусионный вопрос автору высера, ты из всего моего линного поста выделил именно его.
Аноним 08/10/17 Вск 08:40:29  1072292
>>1072246
>Торчит ли при этом у тебя фунция голым задом из модуля не имеет никакого значения.
Вот как раз это имеет огромное значение при проектирование приложений.
Я вообще не понимаю, что вы тут хотите мне доказать? Что язык С не соответствует каким-то вашим ожиданиям и представлениям о локальных и глобальных переменных?


>>1072251
>Глобальная переменная тоже может быть невидимой извне, неглобальной она от этого не становится. Все функции в Си "глобальные"
Блять, поясни пожалуйста тогда что ты понимаешь под локальный и глобальной переменной, потмоу что по моему у тебя об этом не правильное представление.
Алсо, ты можешь сделать перменную локальной в пределах юнита компиляции, ты можешь сделать переменную локальной в пределах области видимости функции, цикла, условия и вообще любого блока видимости.
Аноним 08/10/17 Вск 11:01:15  1072311
>>1072292
>Я вообще не понимаю, что вы тут хотите мне доказать?
Лично я сюда зашёл для того, чтобы привнести рациональность в пост 10летнего крестовика.
>>1072292
>Блять, поясни пожалуйста тогда что ты понимаешь под локальный и глобальной переменной, потмоу что по моему у тебя об этом не правильное представление.
Локальное - это то, что определено в структе или компаунд стейтменте. В стандарте вообще не используются слова global (только в одном месте: http://port70.net/~nsz/c/c99/n1256.html#F.8.1p1) и local, так что по отношению к стандарту неправильным моё представление быть не может.
>Алсо, ты можешь сделать перменную локальной в пределах юнита компиляции
Здесь наши с тобой опыты расходятся. В моём опыте никто и никогда не говорил о невидимых извне переменных, как о локальных. В качестве пруфа моей нормальности прими ссылку на стаковерфлоу:
https://stackoverflow.com/search?q=%5Bc%5D+local+variable
Аноним 08/10/17 Вск 13:47:51  1072358
>>1072311
>Локальное - это то, что определено в структе или компаунд стейтменте. В стандарте вообще не используются слова global (только в одном месте: http://port70.net/~nsz/c/c99/n1256.html#F.8.1p1) и local, так что по отношению к стандарту неправильным моё представление быть не может.
>>1072292
>язык С не соответствует каким-то вашим ожиданиям и представлениям о локальных и глобальных переменных?

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

Я не понимаю, как по твоему должно было быть?

По моему, все очень логично.
extern - глобальная переменная.
static - локальная в пределах компиляции.
auto - локальная на стеке.
__thread - локальная в пределах треда.

Тебе этого мало? Я просто даже не представляю, какие виды локальных переменных еще могут быть По моему опыту в различныъ ЯП кроме С/С++, типа Явы, С#, D, питон, перл, луа, пхп, яваскрипт, хаскель, математика, матлаб. Нигде виды переменных особо не отличаются, ибо это то, что есть в С, это уже более чем достаточно.
Аноним 08/10/17 Вск 15:50:49  1072400
>>1072358
>Тебе этого мало?
Во избежание дальнейшего разговора на неинтересную мне тему я не буду напоминать тебе о том, что мой дискуссионный вопрос, дальше которого ты не читал, был не о переменных.
>Нигде виды переменных особо не отличаются
Бред сивой кобылы. Ты говоришь о видимости? Видимость переменных может:
1) вообще не зависеть от места их определения, а лишь от того, было выполнено определение или нет - Perl (с версии 5 скоуп управляет только хранением, а не видимостью), Шелл до какой-то версии (в баше можно приписать local. В Посиксе этого нет)
2) зависеть от скопа (функция, глобальный, суперглобальный), от static (значение совсем другое) и от того, было ли выполнено определение - PHP
3) зависеть от того, было ли объявление выше в скопе (без учёта вложенности блоков), при этом у каждой функции свой скоп - Джаваскрипт
4) версия Си - скоп на каждую фигурную скобку
5) чистая функциональщина
И это я ещё про единицы трансляции не говорил: в PHP вообще нет доступа к переменным извне и нет способа определения одной переменной на всех. Что значит "не отличаются"?
>Я не понимаю, как по твоему должно было быть?
По-моему должно быть так, что если есть несколько функций, которые работают с одними и теми же данными, то у меня должен быть инструмент для их обобщения. Такой инструмент у меня есть.
>extern - глобальная переменная.
Допустим, что я понял твою криво выраженную мысль. Дай ссылку на текст, в котором под глобальностью подразумевается именно это.
Аноним 08/10/17 Вск 16:52:02  1072417
Простой вопрос. Как вывести значение из двумерного массива указателей "int ✬✬arr;". По-простому "arr[num][num]" сигфолтит. Это у меня проблемы или так делать в сишке нельзя?
Аноним 08/10/17 Вск 17:13:43  1072424
>>1072417
> сигфолтит
Туда ли ты обратился, петушок?
Аноним 08/10/17 Вск 17:30:49  1072432
>>1072400
>Бред сивой кобылы. Ты говоришь о видимости? Видимость переменных может:
Ладно может с пхп и яваскрип я что-то напутал ибо последний раз писал на этом еще в школе.
Но говоря про С только видимость определяет тип переменной. Т.к в С нету объектов, а есть только базовые типы и структуры состоящие из них, то есть переменные при выходе из их области определения не нужно очищать, вызывать деструкторы и т.п ( кроме переменных на стеке, где память указываемая ими, может быть перезаписана после выхода из области видимости в силу специфики работы стека ).
Но ты понимаешь, что С это низкоуровневый язык где предоставляющий тебе самому управление памятью, а в других языках, инициализация и деинициализация переменных может влечь за собой аллокейты из кучи и другие действия, типа сборки мусора и т.п?
В С как в ассемблере, хочешь глобальную переменную, определяй ее в секции .data, хочешь локальную переменную вычитай сколько нужно из rsp, хочешь динамическую память, дергай ядро ОС.

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

> Дай ссылку на текст, в котором под глобальностью подразумевается именно это.
У тебя своей головы нету, чтобы без чужого мнения это самостоятельно понять?
Ты когда объявляешь переменную в глобальном неймспейсе, она по умолчанию extern.
Аноним 08/10/17 Вск 17:37:27  1072434
>>1072424
А что не так?
Аноним 08/10/17 Вск 17:44:20  1072440
>>1072417
Проблемы у тебя. Показывай код.
Аноним 08/10/17 Вск 17:45:28  1072441
>>1072417
>По-простому "arr[num][num]" сигфолтит.
Это вылет за границы массива.
Аноним 08/10/17 Вск 18:10:24  1072458
>>1072417
>двумерного массива указателей "int ✬✬arr;"
Это называется "двумерный динамический массив", если тебе так хочется.
Аноним 08/10/17 Вск 18:11:49  1072459
>>1072417
А ты массив-то вообще инициализируешь?
Аноним 08/10/17 Вск 18:43:05  1072476
>>1072432
Хватит уже про Си рассказывать, я без тебя знаю его и до фига всего другого, и про экстерн я тоже знаю. Даже если ты очень знающий и скиластый, ты должен с собеседником говорить, а не сам с собой и своими мыслями.
>У тебя своей головы нету, чтобы без чужого мнения это самостоятельно понять?
Ты так и не открыл ссылку, по которой находится список вопросов и ответов о языке C, в которых люди употребляют слова "local" и "variable". Попробуй прочитать эти упоминания, держа в уме твоё личное определение глобальности. Пока ты этого не сделаешь, говорить с тобой не о чем.
>Ну так и что, тебе мешает такой инструмент реализовать без глобальных переменных?
Какие ещё глобальные переменные, блядь? Ты совсем охуел? Прочти ещё раз цитату >>1072042 из моей портянки, которую ты осуждаешь, слова "переменная" там нет. И это, если ты не знал, в С++ (языке семейства С++) с 11 года есть лямбды, подмножество которых совместимо с C-функциями.
Аноним 08/10/17 Вск 18:46:18  1072480
>>1072476
Я вообще не понимаю, чего вы тут обсуждаете. Вложенные функции есть в гцц в виде расширения. Лямбды, видимо, будут в C2x.
Аноним 08/10/17 Вск 19:23:35  1072497
>>1072480
Обсуждаем термин "глобальная переменная", который во всём мире означает "определённый вне функций", а именно у этого почтенного индивида означает "external linkage".
Заодно практикуюсь в общении с людьми, которые учат меня, разговаривая сами с собой.
Аноним 08/10/17 Вск 20:57:11  1072530
>>1072476
>>1072497
>"глобальная переменная" означает "external linkage".
Ну так и есть.
Определи ее вне функции в *.c файле со static она будет локальной на уровне юнита компиляции не будет доступна из вне, что как раз и означает локальность.
Как этого можно не понимать...
Аноним 08/10/17 Вск 21:47:16  1072546
>>1072530
У тебя котик дома живёт?
Аноним 08/10/17 Вск 22:24:51  1072562
>>1072546
Собака. Я же не пидор.
Аноним 09/10/17 Пнд 00:30:27  1072612
>>1055733 (OP)
шарю лютейшую годноту от реально гения в плане разъяснениыя. Да, он ебанный индус, да блядь его произношение это пиздос, но блядь, как же он ахуенно разъясняет и объясняет то, что вы будете читать в 1к страничных книгах.

https://www.youtube.com/watch?v=si-KFFOW2gw&list=PLVlQHNRLflP8IGz6OXwlV_lgHgc72aXlh

После этого рекомендую пробежатся уже по King C.C. A modern Approach C (2008), что бы закрепить материал.

Потом советую пройтись по C in Nutshell, для более продвинутого закрепления и понимания сишечки.

Потом советую прочитать: Reese R. - Understanding and Using C Pointers - 2013

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

Потом обязательно Practical C Programming 3rd Edition

И Ben Klemens - 21st Century C, 2nd Edition - 2014

Ну и к этому моменту вы будете свободно плавать в синтаксисе и понимании языка для выражения всего чего можно, вот тут и начинается само программирование, и погружение в программирование и написание годноты и чего только захотите:
Principles of Data Structures Using C

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

Но до этого ОБЯЗАТЕЛЬНО загуглите нормальные туториалы по дебагингу, профайлингу, поиску и нахождению ошибок и так далее.

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

=======================

Теперь что касается шапки - шапку писал отбитый нахуй долбоеб.

К&R крайне критикуемая книга, которую книгой назвать нельзя, она нахуй вообще ни на что не годится, это некий референс документ, а для референса всегда есть Prinz P., Kirch-Prinz U. - C Pocket Reference - 2002

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

Ну а дальше винапи, и прочий скам, можете на С++ перекатиться, можете продолжить дрочитьСи.

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

Не можете понять что такое Binary Heap - вы нахуй не нужны в программировании.

===============

касательно мотивации - к сожалению с Си без вовлечения в какой-то проект где он используется будет крайне тяжело если сравнивать например с C#

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

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

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

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

Удачи зайчики.
Аноним 09/10/17 Пнд 00:34:18  1072613
>>1072612
КАМПЬЮТАРР ЛАНГВИСС
Аноним 09/10/17 Пнд 01:00:54  1072619
>>1072613
да я тоже проигрываю постоянно. Но согласись, все по делу, и с дельными примерами, ничего вообще лишнего и нет задач "а давайте посчитаем на нашем первом занятии факториал такого-то числа, либо единицы измерений математической формулой поизменяем.
Аноним 09/10/17 Пнд 01:20:35  1072622
>>1072562
А у меня котик.
Аноним 09/10/17 Пнд 01:25:03  1072623
>>1072102
Бамп вопросу. Использование конкретно GLFW вообще необязательно, сойдёт любая легковесная кроссплатформенная библиотека, которая сможет создать мне окно и дать его идентификатор.
Аноним 09/10/17 Пнд 01:30:05  1072627
>>1072562
Вообще то у меня котик.
Спит щас клубочком, так мило...)
Аноним 09/10/17 Пнд 05:57:41  1072654
>>1072612
Бред неосилятора.
Аноним 09/10/17 Пнд 08:36:28  1072671
>>1072612
Сейчас бы учить что-то с видосиков
Аноним 10/10/17 Втр 09:20:06  1073287
>>1071874
согласен, хоть и звучит это весьма жирно.

>>1072497
мастерски доебался.

>>1072134
>бОльшим количеством файлов с кодом, но ЗАЧЕМ?

вот это я не понял, плюсовики не делят программы на модули?
Аноним 10/10/17 Втр 09:30:29  1073294
>>1073287
Ты сам жирный.
Аноним 10/10/17 Втр 22:19:12  1073775
Бля, помогите пожалста с однородными массивами
https://ideone.com/MNI6wN
Прога должна считать сумму всех отрицательных чисел, произведение между максимальным и минимальным значением и затем сортировать по возрастанию. Сумму и сортировку делает, а произведение делает, но не так - добавляет в вычисление либо максимальное, либо минимальное значение, смотря какое первее стоит. Что не так в коде? И как сделать так, чтоб если между максимальным и минимальным нет чисел, писало что-нибудь типа "произведение = 0"?
Аноним 10/10/17 Втр 22:29:49  1073779
>>1073775
> *imin=i;
Не делай так. i не инициализирована.

> добавляет в вычисление либо максимальное, либо минимальное значение
Очевидно, что тебе нужно начинать цикл не с frirst, а с first + 1.

> И как сделать так, чтоб если между максимальным и минимальным нет чисел, писало что-нибудь типа "произведение = 0"?
if (first + 1 >= end) { return 0; } (естественно, swap перед этим по необходимости).
Аноним 11/10/17 Срд 00:01:01  1073797
>>1073779
Братан, закину денежку тебе если ты мне это в код вставишь
Аноним 11/10/17 Срд 23:00:49  1074247
(53Кб, 600x450)
думаю сейчас о такой вещи, как... например, есть приложения и есть их менеджер, всё вместе работает на одном потоке - менеджер переключает выполнение когда приложения или выходят из своего main(), или вызывают специальную функцию - для каждого делаем setjmp() и заранее отделяем стек, типа по 1К, например - ну понятно, после прыжка же стек будет смещён назад. наверно как-то нужно самому хранить верхушку стека - не очень пока вижу всю историю в целом.

в общем, будет работать?
Аноним 11/10/17 Срд 23:08:10  1074250
так-то резервный вариант использовать треды, но это тупо, только из за стека тянуть всю эту чепуху.

а блин, не понятно ещё как сколько принты стека отжирают. а без них как-то скучно.
Аноним 11/10/17 Срд 23:14:48  1074256
или ещё вариант, при переключении копировать значения стека в динамичную память. но это как-то жёстко. может как-то подменять его, при первом вызове.

как-то же это всё люди делают.
Аноним 13/10/17 Птн 07:31:27  1074777
в общем да, нужно знать верхушку стека, иначе всё по пизде пойдёт. но блин, какое же говно.

https://stackoverflow.com/questions/20059673/print-out-value-of-stack-pointer

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

а что если, вызывая новое приложение, прыгать к самому последнему и из его кода делать call....
Аноним 13/10/17 Птн 07:54:47  1074785
ну это тоже, не используя стек внутри функций (строго память) и не вызывая их. фигня короче.

просто я вот думаю, как сделать удобней возврат после запроса в обработчик. ну вот, допустим он вызывает опять приложение app0(void p) - где *p для значений этого инстанса. и как вот туда ему прыгать, к контексту внутри? switch ? гццшный goto массив? я не знаю.

наверно действительно проще треды. может у этого название есть, типа блокирующиеся треды в одном потоке. хер знает.
Аноним 13/10/17 Птн 09:33:54  1074803
>>1074785
> может у этого название есть, типа блокирующиеся треды
В нормальных ОС это есть искаропки. Называется фиберы, реализуют кооперативную многозадачность. И да, чем тебе не нравится ебля контекста ручками? Это единственный адекватный подход. И вообще, чего ты добиться хочешь и зачем? И ты заебал своим бложеком, иди-ка ты в /dr/. Или пиши нормально.
Аноним 13/10/17 Птн 09:45:18  1074806
>>1074803
> типичный пассивно-агрессивный пидоран
я не удивлён. в прочем, я ничего расписывать не буду, чисто попукал в мёртвый тред.
Аноним 13/10/17 Птн 10:14:32  1074809
вообще я смотрю это позиксная ucontext.h мне нужна. но интересно было бы запердолить как-то вручную. и не понятно откуда берётся слово то фибр, если везде пишут про курутинс.

>>1074803
ладно-ладно. не обижайся, это было познавательно.
Аноним 13/10/17 Птн 10:47:12  1074817
немного в продолжении:

https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html

> #define crBegin static int state=0; switch(state) { case 0:
> #define crReturn(i,x) do { state=i; return x; case i:; } while (0)
> #define crFinish }
> int function(void) {
> static int i;
> crBegin;
> for (i = 0; i < 10; i++)
> crReturn(1, i);
> crFinish;
> }

> #define crReturn(x) do { state=__LINE__; return x; \
> case __LINE__:; } while (0)

прикольный вариант.
Аноним 13/10/17 Птн 10:50:14  1074818
>>1074809
Можешь еще green threads погуглить. А фиберы из Windows, очевидно же.
Аноним 13/10/17 Птн 14:36:07  1074900
Если инициализировать поинтеру адрес 0, и инициализировать его значение нулем, и в рамках цикла идти дальше пока не не закончится память, инициализируя все нулем, можно ли так все данные в памяти компьютера переписать?
Аноним 13/10/17 Птн 14:58:18  1074923
>>1074900
В современных ОС - только память процесса, да и то с оговорками: придется проглатывать исключения при попытке доступа к невыделенной памяти и придется как-то обойти свой собственный код. Чтобы затереть всю память (как делает, например, BIOS при проверке памтяи), нужен нереальный (flat real mode) или правильно настроенный защищенный режим, чтобы процессу была доступна последовательно вся физическая память.
Аноним 13/10/17 Птн 15:21:03  1074943
>>1074923
Спасибо, то есть даже если под рутом на линуксе делать, никаких глобальных форматирований не стоит ожидать?
Аноним 13/10/17 Птн 15:38:24  1074949
>>1074900
>Если инициализировать поинтеру адрес 0
Будет null pointer dereference и сегфолт.
Аноним 13/10/17 Птн 15:46:53  1074956
>>1074943
> то есть даже если под рутом на линуксе делать
root process != kernel mode process
Аноним 13/10/17 Птн 16:02:44  1074970
>>1074956
а драйвера прямо в физическую могут?
Аноним 13/10/17 Птн 16:09:53  1074975
>>1074970
Драйверы тоже разные есть. User mode и kernel mode. Последние с оговорками могут.
Аноним 13/10/17 Птн 16:13:18  1074977
>>1074949
> Будет null pointer dereference и сегфолт.
NULL pointer - это абстракция из стандарта Си. В любой ОС можно сделать так, чтобы никаких сегфолтов не было. В частности, в XP (и вроде бы даже в 7 SP1 до некоторых пор) можно было выделить память по 0 прямо из юзермода, без особых привелегий.
ПЕРЕКАТ Аноним # OP  13/10/17 Птн 16:27:13  1074991
ПЕРЕКАТ
>>1074988 (OP)
>>1074988 (OP)
>>1074988 (OP)
ПЕРЕКАТ
Аноним 13/10/17 Птн 16:28:14  1074993
printf("%f ", t++ = s++);

В таком выражении будет печататься значение для t или для s?
Аноним 13/10/17 Птн 16:32:51  1075000
>>1074993
Точнее вот https://pastebin.com/jh9Cm7dw
где t и s - массивы.
Аноним 13/10/17 Птн 16:36:00  1075003
>>1074977
При чем тут абстракции языка? Ты понимаешь, что переменная это всего лишь указатель на адрес памяти?

Если ты напишешь на С:
char mem = 0;
mem = 0;

То на ассемблере это будет выглядеть примерно так:
mov ax,0
mov [ax],0

Что является обращением к памяти по адресу 0, что на системе с виртуальной памятью в user mode вряд ли возможно, т.к процессу назначается не нулевой стартовый адрес.
В общем, такое невозможно в принципе сделать в загруженной ОС.

Вот почитай http://wiki.osdev.org/Memory_Map_(x86)
Аноним 13/10/17 Птн 16:36:22  1075004
>>1074993
У постфиксного ++ приоритет выше всего, поэтому берется адрес из s, потом s инкрементируется, потом адрес дереференсится звездочкой, потом аналогично вычисляется левый аргумент, и = пишет в него значение из правого. Более понятный аналог:
float temp = (t[0] = s[0]); // Ну или звездочки, но их макака съест.
printf("%f ", temp);
++s;
++t;
На свой вопрос сам ответишь.
Аноним 13/10/17 Птн 16:40:38  1075010
>>1075003
> При чем тут абстракции языка?
При том, что по соглашению и из-за распространенности Си операционные системы не мапят первые 4 или 64 килобайта. Чтобы говнокод с NULL падал, как и положено. Но:
1) Ты вообще читал, что я написал? Никто не запрещает тебе выделить память самому. Если не из юзермода, то уж из кернелмода 100% возможно.
2) У тебя там 16-битные инструкции, а в том же DOS обращение по нулевому офсету было стандартной практикой, а с обращения к нулевому офсету нулевого сегмента (far null pointer) начиналась печать таблицы обработчиков прерываний. Например, в отладочных целях.
Аноним 13/10/17 Птн 16:44:42  1075014
>>1075010
> Если не из юзермода, то уж из кернелмода 100% возможно.
Ни чего что кернел мод работает с виртуальной памятью тоже? И обычные kmalloc выделяют тебе виртуальную память?
Аноним 13/10/17 Птн 16:48:04  1075017
>>1075004
Меня интересует случай, когда присваивание находится внутри printf.
Правильно ли я понимаю, что раз левый аргумент вычисляется последним, то его значение и напечатается, то есть в моем случае для t?
Аноним 13/10/17 Птн 16:57:10  1075021
>>1075014
Я не понимаю, что ты пытаешься доказать. kmalloc - это тупой маллок, он не позволяет указать виртуальный адрес, по которому нужно выделить память.

>>1075017
> когда присваивание находится внутри printf.
От того, что оно синтаксически там находится, поведение не меняется.

> Правильно ли я понимаю, что раз левый аргумент вычисляется последним, то его значение и напечатается, то есть в моем случае для t?
Последним вычисляется присваивание, у = наименьший приоритет. Но = как и все операторы "возвращает" результат, он равен присваиваемому значению, и вот этот результат становится аргументом printf.
Аноним 13/10/17 Птн 17:11:39  1075025
zero.png (17Кб, 614x424)
>>1075003
> Что является обращением к памяти по адресу 0, что на системе с виртуальной памятью в user mode вряд ли возможно
Вот специально для тебя наговнокодил. Требует рута, поэтому не ideone.
Аноним 13/10/17 Птн 17:20:48  1075029
>>1075025
Что-то я не понял, что за mmap такой, который возращает код а не адрес памяти?
http://man7.org/linux/man-pages/man2/mmap.2.html

Посмотри, какой адресс тебе вернет mmap, то что там происходят я не знаю.
Аноним 13/10/17 Птн 17:24:00  1075030
>>1075029
> который возращает код а не адрес памяти
А я-то думал, что с тобой не так. А ты просто читать не умеешь. У тебя по ссылке черным по белому написано, что MAP_FAILED = (void *) -1. Ну и, конечно же, mmap() возвращает мне адрес, по которому я замапил страницу, а замапил я ее по 0, поэтому он мне возвращает 0. Если запущу не под рутом, вернет MAP_FAILED.
Аноним 13/10/17 Птн 17:33:19  1075040
>>1075030
Нет с возвратом я понял, потом.
Но ты же не знаешь точно какой адресс, тебе возвращает mmap т.к просто опускаешь возвращаемое им значение. Сомневаюсь, что там будет 0х0, тем более даже если это так, он все равно мапится на виртуальную память, так что смысла в этом не особо много, т.к. нулевой адрес в виртуальной памяти процесса, впринципе возможен, только он будет укзывать то на другой физический.
Аноним 13/10/17 Птн 17:45:27  1075047
>>1075040
> Но ты же не знаешь точно какой адресс, тебе возвращает mmap
MAP_FIXED же. Я ему явно указываю, что хочу именно NULL.

> так что смысла в этом не особо много
> он будет укзывать то на другой физический
А вот тут ты прав. Чтобы пройтись по физическим страницам последовательно, нужна другая магия. Называется /dev/mem, ее точно так же можно замапить, но оно не везде доступно, и те регионы, которые через него видно, целиком и полностью зависят от ядра. Но через кернелмод можно и это обойти.
Аноним 13/10/17 Птн 18:22:00  1075068
>>1075040
>он все равно мапится на виртуальную память, так что смысла в этом не особо много, т.к. нулевой адрес в виртуальной памяти процесса, впринципе возможен, только он будет укзывать то на другой физический.
и к чему это всё? кого ебёт что там в физической памяти. мы живём в мире с единорогами и радугами.

но я читал про это как-то, хотя мне всегда казалось, что NULL может менять своё значение в зависимости от платформы, на деле вроде нет. но опять же, это пространство языка, не будет тебе malloc выделять 0 и ладно.
Аноним 13/10/17 Птн 18:35:08  1075078
>>1075047
>/dev/mem
Ну во-первых он отключен по умолчанию.
Да и потом, не думаю что из protected mode можно что-то записать в такую низкоуровневую память < 1MB. Думаю, что процессор не даст что-то туда записать и сделает прерывание.
Аноним 13/10/17 Птн 18:39:16  1075081
>>1075078
> Думаю, что процессор не даст что-то туда записать
Процессору абсолютно похуй, какой адрес выставлять на адресную шину. Защищенный режим защищает один процесс от другого, а не компьютер от программ.
Аноним 13/10/17 Птн 18:55:56  1075088
>>1075081
Ну попробуй, собери ядро с /dev/mem или напиши свой syscall или модуль ядра, и попробуй че-нить записать туда напрямую.
Аноним 13/10/17 Птн 19:07:36  1075092
>>1075088
Я бы не говорил, если бы не пробовал. И с линуксом, и напрямую.
Аноним # OP  13/10/17 Птн 21:14:59  1075139
НАПОМИНАЮ ПРО ПЕРЕКОТ
>>1074988 (OP)
>>1074988 (OP)
>>1074988 (OP)
>>1074988 (OP)
>>1074988 (OP)
>>1074988 (OP)

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 521 | 28 | 144
Назад Вверх Каталог Обновить

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