Сохранен 535
https://2ch.hk/pr/res/579550.html
24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

C Programming Language. 2nd thread.

 Аноним 13/11/15 Птн 03:02:11 #1 №579550 
14473729310460.jpg
Второй тред, посвященный прародителю всех С-подобных языков и по совместительству единственным идеальным и всесторонне годным средством программирования как на системном, так и на прикладном уровне.

С чего начинать:
Классика от Отцов: http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf
Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
ООП, например: http://www.cs.rit.edu/%7Eats/books/ooc.pdf

Предыдущий тред тонет по следующему адресу: >>518562 (OP)
Аноним 13/11/15 Птн 15:06:59 #2 №579761 
>>573595
как верно заметил >>573638 , у тебя бесконечный цикл.
При каждой итерации ты присваиваешь k = 0

while (k<=n)
{
k=0;
Аноним 14/11/15 Суб 02:58:40 #3 №580127 
14474591207700.jpg
>>579550 (OP)
Доброго времени суток, помогач, надеюсь ты достаточно ночной.

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

Склонировал репозиторий с Savannah, открыл и офигел от непонимания. Спрашиваю советов мудрых.

Вот смотри на исходник: http://pastebin.com/riccXnsa

59 main (int argc, char argv)
Во всех учебниках я видел *argv[] вместо
argv. Второй вариант это синтаксический сахар? Или это указатель-на-указатель, но почему?

66 set_program_name (argv[0]);
ЗАЧЕМ?
Они же в самом начале написали
#define PROGRAM_NAME = "yes"

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

Аноним 14/11/15 Суб 03:20:23 #4 №580131 
>>580127
char argv и char* argv[] это одно и тоже. Двумерный динамический массив - это массив из указателей на указатели. Сначала ты выделяешь память на массив из указателей на указатели, и это будет твоим числом строк, затем ты идёшь по этим строкам и запихиваешь в них твои динамические массивы, которые и будут этими строками, а их длины будут кол-вом столбцов.
Аноним 14/11/15 Суб 03:21:35 #5 №580132 
>>580127
>эти переносы
Ядро-то Маяковский писал, не иначе.

59: при передаче в функцию массив преобразуется к указателю на тип элементов массива в крестах это называется std::decay, поэтому разницы между такими записями в данном случае нет.

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

Вообще, большая часть этого кода потому и присутствует как ритуалы, направленные на выполнение многочисленных соглашений, которым должны следовать утилиты.
Аноним 14/11/15 Суб 09:33:27 #6 №580171 
>>580127
> set_program_name (argv[0]); ЗАЧЕМ?
> Они же в самом начале написали
> #define PROGRAM_NAME = "yes"
В дефайне "официальное" имя приложения. А вот если ты сделаешь симлинк oui для yes, это имя попадет в argv[0], и будет использоваться в usage() глобальная переменная program_name (или это макрос?) вроде оно и где-то там еще, чтобы юзер не охуел, как это, он запускал oui, а ему предлагают yes вызывать.
Аноним 14/11/15 Суб 09:59:33 #7 №580179 
Сап. Можно ли как-нибудь из x-macro вытащить первый элемент? В моём проекте используется такая его разновидность:

#define FOO(V) \
V(Sandstorm) \
V(Stencil) \
V(Mower) \
V(Restroom)

Эти имена попадают в enum, в объявления функций, в строковые константы и т.д.

Мне нужно вытащить первый элемент и длину. Длину просто:

#define PLUS_ONE(foo) +1
int length = FOO(PLUS_ONE);
#undef PLUS_ONE

С первым элементом не знаю как. Надо сгенерить что-то вроде

int first = kSandstorm;

Кто-нибудь?
Аноним 14/11/15 Суб 19:18:10 #8 №580456 
>>580179 бамп
Аноним 15/11/15 Вск 01:30:42 #9 №580713 
>>580131
>>580132
>>580171
Спасибо за пояснение, аноны.

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

Кстати, посоветуйте дебилу какую-нибудь хорошую книжку по документированию программного обеспечения (как правильно оставлять комментарии, как написать простенький man), можно на английском.
Аноним 15/11/15 Вск 01:34:17 #10 №580715 
>>580713
Копай в сторону doxygen.
Аноним 15/11/15 Вск 02:01:25 #11 №580720 
>>580713
Steve McConnell, Code Complete
Аноним 15/11/15 Вск 10:01:21 #12 №580789 
>>579550 (OP)
> Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
А есть что-нибудь более современное?
Аноним 16/11/15 Пнд 22:35:20 #13 №581593 
>>580789
sqlite3, но сейчас набегут разные личности, которые не считают это хорошим стилем на самом деле код неплох
Аноним 20/11/15 Птн 07:33:48 #14 №584538 
Есть ли в Ц что-нибудь типа dictionary питона?
Аноним 20/11/15 Птн 10:43:18 #15 №584575 
>>584538
Нету. Но ты можешь сам запилить всё, что тебе нужно, с помощью массивов, enum'ов и вспомогательных функций/макросов.
Аноним 20/11/15 Птн 15:16:26 #16 №584706 
>>584575
Хуево, потому что я как раз таки не могу.
Аноним 20/11/15 Птн 18:18:41 #17 №584947 
Как запилить свою библиотеку? Есть какие-нибудь гайды годные? Я конечно парочку наковырял, но мало ли.
Аноним 21/11/15 Суб 03:29:27 #18 №585318 
>>584706
Тогда возьми либу.
Аноним 21/11/15 Суб 07:02:18 #19 №585344 
>>581593
>sqlite3
ВерБлюДоСтайл ниНуЖеН
Аноним 21/11/15 Суб 07:27:53 #20 №585345 
>>584947

пишешь исходный код функций, компилишь его в обжект файл, пакуешь в формат либы, кладешь в директорию поиска
какого хуя тебе еще требуется ?
гайд как написать полезную и нужную либу что ли ?
Аноним 21/11/15 Суб 09:06:43 #21 №585349 
>>585345
Нет, просто как в формат либы запаковать не знаю. Содержимое либы я в целом напридумывал (она мне для личного пользования все-равно нужна, да и в целях обучения). Разве что один вопрос: внутри либы нужно подключать другие нужные для неё либы?
Аноним 21/11/15 Суб 09:10:36 #22 №585350 
>>585349
укурись опциями компилятора и линковщика, в коде твоей ебучий либы ссылки на другие либы ненужны
Аноним 21/11/15 Суб 09:33:57 #23 №585355 
>>585349

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

динамическую либу не забуть подгрузить в ходе исполнения программы
статическую просто укажи компилятору когда ее надо использовать
Аноним 21/11/15 Суб 10:29:11 #24 №585369 
>>585350
>>585355
Спасибо
Аноним 21/11/15 Суб 13:37:11 #25 №585421 
>>585355
>формат динамической либы указывается в опциях компилятора
ой ни пизди, динаму нуно подгружать хитровыебонами в коде, статика впердоливаеца в архив по желанию, можно и не архивить
Аноним 21/11/15 Суб 13:45:34 #26 №585423 
пользуясь случаем, абасал динамические библиотеки как ненужное уебанство
нюфаг 21/11/15 Суб 14:51:18 #27 №585450 
Что делают всякие моденые стрелочки в коде? Типа 'value ->default = 0'? Это что же такое делается, сорт оф словари путона?
Аноним 21/11/15 Суб 14:51:37 #28 №585452 
>>585450
>модные
скорофикс
Аноним 21/11/15 Суб 14:54:46 #29 №585455 
>>585450
value->default это (*value).default
Аноним 21/11/15 Суб 14:56:43 #30 №585459 
>>585455
Спасибо
Аноним 21/11/15 Суб 16:17:33 #31 №585528 
>>585455
Это ведь равнозначно написаному тобой?
struct value val;
val.default = 0;
Аноним 21/11/15 Суб 16:18:35 #32 №585529 
>>585528
Тьфу блядь, отбой. Просто запутался.
Аноним 21/11/15 Суб 16:48:59 #33 №585553 
>>585528
Нет. Это равнозначно к обращению поля не структуры, а указателя на структуру. Такой простенький синтаксический сахарок.
Аноним 21/11/15 Суб 17:36:32 #34 №585602 
14481165925190.jpg
В общем у меня вопрос уровня просто интересно.
Пускай есть 2 интовые переменные, которые имеют максимально допустимое значение для интовых переменных, берем их, складываем и через указатель запихиваем в память. Что произойдет?
1) Нихуя, вернет ошибку переполнения еще на моменте складывания
2) Нихуя, вернет ошибку на моменте попытки запихнуть в память
3) Запихнет в память первую половину разрядов 2 представления нового числа
4) Запихнет в память вторую половину разрядов 2 представления нового числа
Честно говоря склоняюсь к первому, но все же
Аноним 21/11/15 Суб 18:16:05 #35 №585652 
>>580127
Нужно сюда смотреть:
http://git.suckless.org/sbase/tree/yes.c

А еще в OpenBSD весь код хороший.
GNU-код почти весь жирный.
нюфаг 21/11/15 Суб 18:20:44 #36 №585656 
14481192450170.png
Вот теперь я официально нихуя не понел.
Как это вообще работает? Вайл вообще не разу не сработает, т.к. уже после первой итерации s!=-128, в итоге она прекращает выполнение только из-за того, что чар тупо заканчивается на 127 что ли?
Аноним 21/11/15 Суб 19:16:16 #37 №585699 
>>585602
Не знаю как у вас там в Сях, но у нас в крестах:

unsigned int overflow == WELL defined:
результат == остаток по разрядности типа
например, uint_max + 7U == 6U

int overflow == Undefined behaviour
КРОВЬ ГОВНО КИШКИ ПО СТЕНАМ
Аноним 21/11/15 Суб 19:31:55 #38 №585722 
>>585656
https://ideone.com/cdWzab
Теперь понятно?
Аноним 21/11/15 Суб 19:51:37 #39 №585742 
>>585602
Вообще undefined behavior, но обычно ещё на этапе сложения у тебя результат должен поместится в int и поэтому старшие биты, не влезающие в int просто отбросятся.
https://ideone.com/NVLaHx
Аноним 21/11/15 Суб 20:05:55 #40 №585750 
>>585722
После 127 вернется к -128?
Аноним 21/11/15 Суб 21:16:32 #41 №585808 
Пытались ли создать в Си аналог крестовой STL? Чтобы не городить каждый раз велосипед для распространенных структур данных. Алсо, были ли попытки реализовать обобщенное программирование до C11?
Аноним 21/11/15 Суб 21:19:26 #42 №585810 
>>585808
Ну вот тебе аналог крестовых шаблонов.
https://github.com/ampl/gsl/blob/1a819c2daab24f5ff53b145f02cb3dd308dd10d6/cblas/dgemm.c
Аноним 21/11/15 Суб 23:39:09 #43 №585938 
Можно ли как то получить знак всего выражения с помощью функции? Или только на fabs делить придется?
Аноним 21/11/15 Суб 23:41:49 #44 №585940 
Сравнить с нулем? Проверить старший бит?
Аноним 21/11/15 Суб 23:43:44 #45 №585941 
>>585938
Можно.
int sign = {твое_выражение} < 0;
Если {твое выражение} выродится в отрицательное число, то sign будет равен единице.
Аноним 21/11/15 Суб 23:49:12 #46 №585944 
>>585941
Спасибо. А если не выродится?
Аноним 21/11/15 Суб 23:52:13 #47 №585948 
>>585944
Будет 0.
Можешь проверить:
int sign1 = 10-15 < 0;
int sign2 = 15-10 < 0;
printf("sign1 = %d, sign2 = %d\n", sign1, sign2);
Аноним 22/11/15 Вск 00:02:08 #48 №585954 
>>585948
Спасибо, онон
Аноним 22/11/15 Вск 13:55:36 #49 №586182 
>>584575
А map тебе чем не dictionary?
Аноним 22/11/15 Вск 14:20:29 #50 №586202 
>>585750
Да.
Аноним 22/11/15 Вск 14:53:42 #51 №586221 
>>586182
std::map? Тут тред про C.
Аноним 22/11/15 Вск 19:33:21 #52 №586492 
14482100013730.png
Двач у меня есть один нубский вопрос. Что за мусор выводится вместе с результатом в этой проге?

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAS 150
#define STR 30

int main(void)
{
char txt[MAS], st[STR];
int num_st = 0, num_ch = 0, num_zero = 0;
printf("Text for processing:\n");
gets(txt);
while (txt[num_st]!= '\0') {
for (; txt[num_st] != ','; num_st++) {
if (txt[num_st] == '.') break;
st[num_ch] = txt[num_st];
num_ch++;
}
if ((st[num_ch - 1] == 'W') || (st[num_ch - 1] == 'w')) puts(st);
else {
for (num_zero = 0; num_zero != STR; num_zero++) {
st[num_zero] = ' ';
}
}
num_ch = 0;
num_st++;
}
return 0;
}
Аноним 22/11/15 Вск 19:40:55 #53 №586499 
>>586492
>>586492
У тебя конец строки в st не записывается, вот он и выводит всякий мусор
Аноним 22/11/15 Вск 19:45:47 #54 №586503 
>>586499
Спасибо анон.
Аноним 22/11/15 Вск 21:10:44 #55 №586574 
>>586492
>gets
Не надо так.
Аноним 22/11/15 Вск 23:00:23 #56 №586675 
>>586574
Почему?
Аноним 22/11/15 Вск 23:18:12 #57 №586684 
>>586675
Небезопасная хуита.
Юзай get_s
Аноним 22/11/15 Вск 23:19:04 #58 №586685 
>>586684
gets_s
*фикс
Аноним 23/11/15 Пнд 00:12:05 #59 №586726 
>>586684
Зато рабочая, кроссплатформенная и не подлежащая удалению из стандарта.
https://www.opennet.ru/opennews/art.shtml?num=43062
Аноним 23/11/15 Пнд 09:30:32 #60 №586867 
>>584575
> enum
> функции-макросы

Да ты знаток няшной и алгоритмов, я посмотрю
Аноним 23/11/15 Пнд 11:33:16 #61 №586926 
>>586685
Майкрософтовские говнофункции не нужны, они создают больше проблем, чем решают. Алсо, они стали необязательными в C11, т.е., их использование - это еще и геморрой с переносимостью ко всему прочему. А >>586492
лучше использовать fgets(..., stdin), в которую можно передать лимит.
Аноним 23/11/15 Пнд 12:18:44 #62 №586950 
Юникод версия fgetws плакает и напоминает о себе.
Аноним 23/11/15 Пнд 17:27:44 #63 №587200 
>>586950
Но зачем, если в никсах fgets получит UTF-8, в винде ввод UTF-8 тоже когда-нибудь обязательно починят, а как хранить внутреннее представление, я сам решу, в зависимости от задачи.
Аноним 23/11/15 Пнд 17:46:54 #64 №587217 
>>587200
второй параметр указывает количество символов, в утф символ может быть больше байта, а так да, похуй.
Аноним 23/11/15 Пнд 18:01:43 #65 №587226 
>>586926
>Майкрософтовские говнофункции не нужны
ну что за чушь
в стандартная библиотека си открывались со временем почти все проблемы, что случаются с устаревающими библиотеками - а именно безопасность некоторых функций ввода-вывода, неприспособленность некоторых функций (сохраняющих глобальное состояние) к многопоточному программированию, приходилось делать переход от 8- 16 - 32 - 64 разрядности, делать переход от анси к юникоду, также была парочка концептуально неправильных функций (например, возвращающих результат работы через return)
и в юникс окружении (линукс) и в майкрософт поступили правильно - вместо того, чтобы резать на корню, попытались по максимуму сохранить совместимость, иногда поэтому приходилось добавлять замещающие-расширяющие функции, добавлять предупреждения и анализы небезопасных и устаревших функций в компиляторы, либо решать эти проблемы на уровне рантайма языка и системных библиотек (например, tls в винде)
Аноним 23/11/15 Пнд 18:08:32 #66 №587235 
>>585423
как плагинную систему пилить будет, болезный?
Аноним 23/11/15 Пнд 18:15:18 #67 №587245 
>>585808
>попытки реализовать обобщенное программирование
что значит попытки?
тут два способа - первый, это ты запиливаешь на макросах, плюс - получаешь type safety, но проблемы с отладкой
второй - запиливаешь на void*, плюс - нет проблем с отладчиками, минут - выключенная type safety
с другой стороны, никто не мешает импользовать шаблоны, но писать в олдскульном си-стиле, по большей то части - шаблоны, это самое охуенное что в крестах запилил
Аноним 23/11/15 Пнд 18:17:48 #68 №587252 
>>587235
вагинную, как ты dependency hell побеждать собираешься?
Аноним 23/11/15 Пнд 18:25:41 #69 №587266 
->майкрософт поступили правильно
дя, только их непортируемый манямирок нахуй никому не нужен
Аноним 23/11/15 Пнд 18:32:53 #70 №587272 
>>587226
Проблемы с безопасностью стандартных функций действительно имеются, но решение от Microsoft - худшее из возможных. Одного constraint handler достаточно, чтобы от этого говна отказаться.

>>587217
> второй параметр указывает количество символов
Байтов. Да, строка в UTF-8 может обрезаться посреди символа, так же как ввод может просто не влезть в буфер. Все об этом знают.
Аноним 23/11/15 Пнд 19:07:25 #71 №587292 
>>587272
не пизди,
num
Maximum number of characters to be copied into str (including the terminating null-character).


Аноним 23/11/15 Пнд 19:10:36 #72 №587293 
>>585810
Двачую этого, причем типобезопасный и с возможностью отладки, в отличии от крестов.
Аноним 23/11/15 Пнд 19:12:11 #73 №587296 
>>587235
плагины нинужны
Аноним 23/11/15 Пнд 19:32:20 #74 №587304 
>>587292
Там жопой написано, читай раздел полностью. Но суть в том, что getc читает один char, даже если он является только частью mbcs-символа. Соответственно, и в fgets речь идет о количестве char в массиве, а не о символах, которые code point и которые в UTF-8 могут состоять из нескольких байтов.
Аноним 23/11/15 Пнд 21:44:45 #75 №587437 
>>587226
>также была парочка концептуально неправильных функций (например, возвращающих результат работы через return)
А что не так с return?
Аноним 23/11/15 Пнд 22:58:13 #76 №587534 
>>587437
код ошибки/код успешного завершения должен возвращать, а не использоваться для возврата значения
Аноним 23/11/15 Пнд 23:00:46 #77 №587540 
>>587272
>решение от Microsoft - худшее из возможных
>constraint handler
?
Аноним 23/11/15 Пнд 23:09:19 #78 №587549 
>>587534
Насколько я знаю, большинство функций ввода/вывода используют ferror, так что использование возвращаемого значения для чего-нибудь еще вполне оправдана.
Аноним 23/11/15 Пнд 23:47:46 #79 №587587 
Эй бородачи, поясните всю логику этой красотки:


void
cpArrayFreeEach(cpArray arr, void (freeFunc)(void))
{
for(int i=0; i<arr->num; i++) freeFunc(arr->arr);
}


1. Что я должен ей подавать на вход в качестве второго аргумента?
2. Еще бы подробно понять что вообще она делает и как (в общем представляю)
Аноним 23/11/15 Пнд 23:49:29 #80 №587590 
14483117698090.png
>>587587
макака код ломает даже в постах на своей борде
Аноним 24/11/15 Втр 00:03:19 #81 №587600 
>>587587
>1. Что я должен ей подавать на вход в качестве второго аргумента?
Указатель на функцию, которая принимает указатель в качестве аргумента.
>2. Еще бы подробно понять что вообще она делает и как
Вызывает функцию для каждого элемента массива, находящегося в структуре cpArray.
Аноним 24/11/15 Втр 00:13:54 #82 №587625 
>>587600
Спасибо
Аноним 24/11/15 Втр 00:41:43 #83 №587642 
>>587540
google: ISO/IEC 9899:2011, Annex K, алсо можно по TR 24731-1 гуглить. constraint handler - функция, которую предлагается вызывать в рантайме, когда _s-функция считает, что все плохо подумай, как весело обрабатывать такое в библиотечном коде. _s-функции в стандарт пропихнула потому что могла Microsoft и до сих пор активно спамит угрозами при компиляции кода, который их не использует.

>>587534
> код ошибки/код успешного завершения должен возвращать
Есть "переменная" errno, ее достаточно для кодов ошибок (на самом деле она макрос с незапамятных времен, что решает возможные проблемы с многопоточностью). А функции должны возвращать вменяемые результаты.
Аноним 24/11/15 Втр 05:47:00 #84 №587721 
>>587304
а там написано, что эта поебота стопорится на первом вхождении символа '\n' который является байтом и который она хуй прочитает?
Аноним 24/11/15 Втр 05:53:04 #85 №587723 
>>585808
шаблоны нинужны
Аноним 24/11/15 Втр 05:56:26 #86 №587724 
>>587642
проиграл, гугл и микрософт это как раз те параши от "ривалюционыхкокоидей" которых нужно держаться подальше.
Аноним 24/11/15 Втр 06:59:11 #87 №587730 
>>587590
а почему параметр функции void а не cpArray? Отпизди автора клавиатурой.
Аноним 24/11/15 Втр 08:47:16 #88 №587747 
>>587730
там внутри наверноа free (ptr) lol
Аноним 24/11/15 Втр 09:01:59 #89 №587751 
>>587724
ракочую, ещё не видел ни одной корпорации, которая осилила бы C (не C++)
Аноним 24/11/15 Втр 09:07:18 #90 №587752 
>>587534
вот ты дебил. функция должна возращать результат своей работы. а ошибка это не результат а сайд-эффект
Аноним 24/11/15 Втр 09:11:07 #91 №587753 
>>587751
>функция должна возращать
она же девочка, она никому ничего не должна
Аноним 24/11/15 Втр 10:29:07 #92 №587772 
>>587721
Написано. Но прочитай также и про shift state. Алсо \n в mbcs встретится только в виде себя самого, но никак не в виде части mbcs-символа. Например, в UTF-8 все continuation bytes >= 0x80. Поэтому проблемы тут нет.
Аноним 24/11/15 Втр 14:55:22 #93 №587922 
>>587642
я это знаю, вопрос в том, есть ли разумная альтернатива
Аноним 24/11/15 Втр 16:09:26 #94 №587952 
>>587922
Да. И эта альтернатива - использовать 3rd party либы или писать свои либы под крупные проекты. Брат жив, зависимость есть, Microsoft не нужен.
Аноним 24/11/15 Втр 16:54:09 #95 №587968 
Сейчас байтоёбы меня хуями обложат, но так как это всё-таки сишка, спрошу тут.
Сейчас на древнем проекте на работе, часть его написана на сишке.

Чтобы работать с коллекциями, мне нужно юзать что-то типа
http://pastebin.com/P6Q8Eb7k

А я хочу более foreach-образное.
Есть нормальный варианты кроме как не ебаться так с трупом или выносить тело в отдельную функцию?
Аноним 24/11/15 Втр 17:07:14 #96 №587973 
>>587968
Ну сделай for (get_iterator; get_next_element; ), если тебе от этого легче станет.
Аноним 24/11/15 Втр 17:08:07 #97 №587975 
>>587968
Используй плюсовый компилятор. Там лямбы есть.
Аноним 24/11/15 Втр 17:09:40 #98 №587976 
>>587968
#define FOREACH(ITERATOR_VAR_NAME, ELEMENT_VAR_NAME) ...

void do_something_with_collection(govnocollection collection) {
  FOREACH(it, elem) {
    ..
  }
}
Аноним 24/11/15 Втр 18:39:52 #99 №588071 
>>587952
не тебя спрашиваю, не передергивай
Аноним 25/11/15 Срд 09:17:00 #100 №588523 
14484322202530.png
>>587976
>>587976
больше дефайнов
Аноним 25/11/15 Срд 10:18:40 #101 №588545 
>>588523
Это плюсы. Унеси обратно.
Аноним 25/11/15 Срд 16:01:56 #102 №588799 
Планирую пилить небольшие игори для собственного развлечения, учу питон, нравится, получается, имеет смысл повозиться с сишкой и где она может пригодиться? Или возможно лучше обмазаться крестами?
Аноним 25/11/15 Срд 18:59:02 #103 №588954 
>>588799
в игорях главное йобакартиночка, что там кодить то? Кидать петухов в хрюнделей можно и без ц.
Аноним 26/11/15 Чтв 08:03:08 #104 №589424 
>>579550 (OP)
Как сделать указателем произвольную цифру? Например мне стало чрезвычайно интересно, что находится под адресом 228.
Аноним 26/11/15 Чтв 08:34:07 #105 №589428 
>>589424
очевидно объявить int p = 228 ну или привести к типу (int )228
Аноним 26/11/15 Чтв 08:34:55 #106 №589429 
>>589428
быстрофикс, там звездочка после int, макака порезал
Аноним 26/11/15 Чтв 08:35:27 #107 №589430 
\*
Аноним 26/11/15 Чтв 11:46:11 #108 №589539 
14485275712950.png
14485275712951.png
>>589429
Збс, помогло. Только есть одна непонятность.
Почему в таком цикле выводит одинаковые значения?
Аноним 26/11/15 Чтв 11:51:56 #109 №589542 
>>589539
А, всё, разобрался. Надо было звездочку вместо и поставить.

Другая проблема, пишет, что про нарушения прав доступа, как исправить?
Аноним 26/11/15 Чтв 12:05:27 #110 №589546 
>>589542
ты правда считаешь, что ОС позволит всяким питухам напрямую обращаться к памяти? Тем более к первому кибибу?
Аноним 26/11/15 Чтв 12:06:40 #111 №589547 
>>589546
Ну хз, ArtMoney же может так делать.
Аноним 26/11/15 Чтв 12:09:19 #112 №589551 
>>589547
Вангую, она юзает WinApi для доступа к памяти другого процесса. Тем более это виртуальная память, не имеющая ничего общего с реальной адресацией.
Аноним 26/11/15 Чтв 14:16:33 #113 №589616 
Котоны, разбираюсь, что находится в объектных файлах и в исполняемых файлах, правильно, что:

Обектный файлы содержат опеделенные функций в бинарном виде и обявленные но не определенные функции и переменные.

Исполняемый файл тоже самое, он собрат из несколько обектников, просто там уже все имена разрезолвины.
Аноним 26/11/15 Чтв 14:33:21 #114 №589627 
>>589616
+ в бинарнике разрулено по сегментам
Аноним 26/11/15 Чтв 18:01:26 #115 №589793 
>>589542
ОС какбе говорит тебе, что по адресу 0 памяти нет есть способы смапить, но по умолчанию некоторый кусок адресного пространства от 0 и выше не мапится, чтобы ловить нулевые указатели. В винде используй VirtualQuery(Ex), чтобы узнать, на какие регионы адресного пространства смаплена память, а какие из них пустые. Можешь также взять утилитку vmmap от sysinternals для наглядности.

>>589616
Да, ты прав. Объектный файл содержит определенные (defined, public) символы и не определенные (undefined, extern) символы. Символ - это имя, технические данные и какая-то сущность - переменная (кусок памяти в сегменте данных) или код (функция). Линкер (редактор связей) связывает extern с public. В исполняемом файле выполнено статическое связывание, а динамическое (для разделяемых библиотек) делает загрузчик при запуске.
Алсо, в объектниках тоже все разрулено по сегментам, причем сегментов может быть намного больше. Некоторые служебные, и не попадают в бинарник, некоторые схлапываются в один сегмент.
Аноним 26/11/15 Чтв 21:32:47 #116 №590030 
>>589616
Чтобы все самому заценить можешь заюзать утилитку dumpbin.exe с вижуал студио
(с параметрами /ALL /OUT:"D:/hui.txt" "полный путь к файлу обьектов" )



Аноним 26/11/15 Чтв 21:35:06 #117 №590037 
Что это за ? Указатель на указатель что ли?
Портирую одну С библиотеку на язык PureBasic, но в нем нет такой штуки с двойным , так что я просто заменил на , но это привело к ошибке доступа к памяти при обращении к этому полю структуры.

struct cpArray {
int num, max;
void
arr;
};
Аноним 26/11/15 Чтв 21:37:25 #118 №590039 
14485630456510.png
>>590037
Опять обезьяна разметку портит
Аноним 26/11/15 Чтв 21:43:47 #119 №590050 
>>590039
cpArray - "заголовок" массива, а arr, наверное, массив указателей на элементы. Покажи побольше кода.
Аноним 26/11/15 Чтв 22:22:03 #120 №590086 
14485657233360.png
>>590050
Вот докопался до этих 2 функций
Аноним 26/11/15 Чтв 22:25:57 #121 №590089 
>>590086
Ну вот, в cpArray максимальное количество элементов в arr, текущее количество элементов, и сам arr, который по сути void ∗arr[max], в котором хоранятся указатели на объекты. При такой структуре указатель на массив не изменяется при изменении размера массива.
Аноним 27/11/15 Птн 01:55:29 #122 №590226 
>>590089
Спасибо оказалось я еще не учитывал выравнивание данных в импортированных структурах, что само по себе приводило к превращению их в кашу
Аноним 27/11/15 Птн 02:35:10 #123 №590233 
Суток времени доброго. Программач, хочу вкатиться в iOS разработку, но опыта нет никакого в программировании вообще. Собственно хотелось бы начать с Си, да алгоритмами заняться. И что выбрать в таком случае гумманитарию (ну или просто лентяю, который пропинал балду на уроках математики)?
Аноним 27/11/15 Птн 08:33:17 #124 №590310 
>>590233
Бозарю С это не тот язык который потерпит чью-то лень.
Если не хочешь задротствовать по-хардкору лучше сразу иди на какое-то обьектное говнецо типа Сишарпа.
А математика это такое, достаточно основ (все равно же в играх будешь в основном готовые движки/решения использовать и т.д, а не писать свои с 0)
Аноним 27/11/15 Птн 08:46:45 #125 №590313 
>>590310
двачую. сам освоил си только после кучи мейнстримовых языков. если ты не будущий керниган, тебе нечего делать в программировании на си
Аноним 27/11/15 Птн 11:39:22 #126 №590377 
>>590313
Я не могу начать обж-си учить до си, ибо я не имею опыта.
Аноним 27/11/15 Птн 11:46:29 #127 №590380 
>>590233
http://c.learncodethehardway.org/book/
Аноним 27/11/15 Птн 13:03:21 #128 №590428 
Бля, там 32 ключевых слова вместе с типами. Чего там сложного то? Ебанулись совсем.
Аноним 27/11/15 Птн 14:56:46 #129 №590468 
>>590428
Двачую. Си - самый простой язык после ассемблера, если не считать undefined behavior вот для развития способности учитывать undefined behavior нужо время.
Аноним 27/11/15 Птн 16:12:38 #130 №590518 
>>590468
undefined behavior это незнание принципов работы ОС и архитектуры процессора
Аноним 27/11/15 Птн 17:28:54 #131 №590566 
>>589627
>>589793
Спасибо.
Как это все дело из консоли посмотреть, какие ключи gcc подсунуть?
Аноним 27/11/15 Птн 17:35:56 #132 №590575 
>>590518
Ты не прав. Например, я отлично знаю, что случится на x86, если переполнить знаковый int. Я знаю, что могу скастить на x86 указатель на int к указателю на short, и я знаю, что по нему прочитается. Но стандарт не ограничивается x86, он объединяет множество частично несовместимых архитектур. Например, на машине с big endian я по вышеупомянутому указателю на short прочитаю не то, на что расчитываю. Все, для чего нельзя задать разумное консистентное поведение - undefined (или иногда unspecified) behavior. Вторая причина наличия UB - простор для оптимизаций - если ввести правила, чтобы какой-нибудь ++i + i++ имел смысл, компилятор потеряет множество возможностей для выбора оптимального порядка вычисления выражений и т. д.

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

>>590566
objdump, readelf, pmap если у тебя линуксы.
Аноним 27/11/15 Птн 17:37:41 #133 №590580 
>>590575
>Я знаю, что могу скастить на x86 указатель на int к указателю на short
и соснуть из-за нарушения strict aliasing rule когда компилятор соптимизирует все чтения из указателя на int потому что посчитает что указатель на short с ним не пересекается.
Аноним 27/11/15 Птн 17:42:53 #134 №590586 
>>590580
Знаю. strict aliasing - это худшее, что случилось с языком за его жизнь.
Аноним 27/11/15 Птн 17:51:20 #135 №590597 
>>590575
>Например, на машине с big endian
не находишь, что это как раз и относится к архитектуре процессора?
Аноним 27/11/15 Птн 17:58:15 #136 №590605 
>>590597
И как мое знание архитектуры может повлиять на работоспособность моего кода на любой другой рандомной архитектуре?
Аноним 27/11/15 Птн 18:01:13 #137 №590610 
Я вот даже в душе не ебу, что такое strict aliasing, где вы блядь это находите? Даже не поленился и погуглил:
int a = 0x12345678;
short \b = (short \)&a;
Это оно? Что афтар-еблан ожидает получить укорачивая адрес до short? А если на моем пылесосе размер short == int?Звезда в шоке.
Аноним 27/11/15 Птн 18:04:24 #138 №590611 
>>590605
ну ты будешь знать, что представляют указатели, переполнение переменных и прочие
Аноним 27/11/15 Птн 18:21:27 #139 №590613 
>>590611
Я-то буду знать, но моя программа более переносимой от этого не станет. Я не могу знать все про все возможные архитектуры. Сишечка с его UB как раз и определяет "безопасный" способ писать переносимые программы за счет потери некоторой части свободы.
Аноним 27/11/15 Птн 18:22:02 #140 №590614 
>>590610
Ну все не так просто. Допустим, у тебя два указателя на short и int (а лучше int16_t и int32_t соответственно), которые указывают на одну и ту же область памяти. Ну например ты со звуком работаешь, и тебе удобно иногда брать и обрабатывать оба канала (два short) в виде одного числа. Пример притянут за уши, ну да и похуй.. В ходе обработки ты пишешь и читаешь по обоим указателям. Со striсt аliаsing компилятор может иногда откладывать запись до следующего чтения (или решить вообще не писать даже, если потом значение затрется чем-то еще), и если ты прочитаешь по другому указателю после того, как записал, ты будешь долго и мучительно искать баг.
К счастью, в gcc есть -fnо-striсt-aliаsing, который рекомендуется к использованию всеми, кому нужно обрабатывать бинарные данные сложной структуры сложнее, чем пример со звуком без НEОЖИДАННОСТЕЙ. К сожалению, это ограничивает компилятор в оптимизациях. Многие не готовы терять возможность байтoeбли в обмен на полпроцента скорости, поэтому пользуются -fnо-striсt-aliаsing и явным rеstriсt из C99, чтобы сказать компилятору, что указатели не пересекаются (у нас в первом тредике про rеstriсt дискуссия была, поищи).
sageАноним 27/11/15 Птн 18:25:07 #141 №590616 
>>590610
>Что афтар-еблан ожидает получить укорачивая адрес до short?

Не адрес. Афтар-еблaн знает, что в х86 little-endian, и 0x1234 5678 хранится как 78 56 34 12. Афтар-еблaн читает нижние 16 бит по бэ[0] и получает 0х5678, читает верхние 16 бит по бэ[1] и получает 0х1234.

"в сообщении присутствует слово из спам-листа". Ебучая макаба.
Аноним 27/11/15 Птн 20:00:45 #142 №590662 
>>590616
и? Зачем ему часть адреса верхняя/нижняя переменной?
Аноним 27/11/15 Птн 20:25:15 #143 №590670 
>>590614
Два указателя на одну область памяти и какие тут проблемы? Т.е. последовательность чтения/записи в эту память зависит от параметров оптимизации? Это проблема компилятора, я считаю.
Аноним 27/11/15 Птн 20:32:21 #144 №590673 
>>590670
> Это проблема компилятора, я считаю.
А вот авторы стандарта языка считают иначе и разрешили компилятору поступать так в некоторых случаях. Тебе выше написали, гугли C strict aliasing rules.
Аноним 27/11/15 Птн 21:08:31 #145 №590718 
А так никто и не ответил, как учить Си будучи нубом в программировании. От http://c.learncodethehardway.org/book/ начал зевать.
Аноним 27/11/15 Птн 21:19:35 #146 №590735 
>>590673
Некотрые посчитали, что было бы нехуево добывать к си классы =) Так разрешили или обязали?
Аноним 27/11/15 Птн 21:21:41 #147 №590739 
>>590718
нахуй, поиграйся вначале с интерпретируемыми языкамиЖ Perl, Python, Java, лучше Java
Аноним 27/11/15 Птн 22:34:36 #148 №590798 
>>590735
> разрешили или обязали
Программистов обязали, компиляторам разрешили считать, что код следует правилам.

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

>>590718
> как учить
Как и любой другой язык. Берешь любой учебник (K&R, например), читаешь и пишешь код до просветления. Для понимания указателей, рисуешь содержимое памяти на бумажке, если не можешь представить мысленно, затем закрепляешь понимание просмотром памяти в отладчике.
Аноним 28/11/15 Суб 00:40:40 #149 №590888 
чем можно профилировать программы на сишке (кроме gperf), при том что есть генерируемый в рантайме кусок кода?
Аноним 28/11/15 Суб 01:39:39 #150 №590918 
>>590888
callgrind?
Аноним 28/11/15 Суб 01:55:35 #151 №590920 
>>590888
Вариант собрать под Windows и воспользоваться софтом от Microsoft и Intel рассматривал?
Аноним 28/11/15 Суб 10:10:36 #152 №590986 
>>590616
Я с утреца понял в чем проблема и почему я подобное не встречал. Объявить структуру u32, в ней два поля l,h u16 ну можно и еще однин юнион на 32, затем эту структуру накинуть на искомый адрес, только вот зачем делать через жопу как в примере, непонятно.
Аноним 28/11/15 Суб 12:37:48 #153 №591017 
Во-первых, через union тоже UB (разработчики стандарта перестраховались по поводу выравниваний и представления значений). Во-вторых, попробуй пропарсить какой-нибудь сложный формат файла, и ты охуеешь от количества требующихся union при таком подходе.
Аноним 28/11/15 Суб 12:51:35 #154 №591025 
>>591017
Парсить на си если есть божественный перл, нахуй надо. А формат, на то и формат, что бы все поля были расписаны.
Аноним 28/11/15 Суб 14:13:32 #155 №591048 
>>590918
а как ему сказать о символах в сгенерированном коде? всмысле который в mmap-нутую память в рантайме написан.
>>590920
у меня на vtune денег нет.
нюфаг 28/11/15 Суб 17:09:51 #156 №591133 
Чому у меня ошибка сегментирования?
http://pastebin.com/tZPhBQzh
Алсо ругается на fscanf.
http://pastebin.com/54mqabw4
Аноним 28/11/15 Суб 17:47:42 #157 №591158 
>>591133
tempdata у тебя и так указатель, амперсанд не нужен.
Покажи как у тебя объявлен fd.
Аноним 28/11/15 Суб 17:57:50 #158 №591161 
>>591158
int fd
Аноним 28/11/15 Суб 17:59:39 #159 №591162 
>>591158
Все-равно ошибка сегментирования
нюфаг 28/11/15 Суб 18:00:55 #160 №591164 
http://pastebin.com/4FDuEunK
Аноним 28/11/15 Суб 18:06:06 #161 №591172 
>>591133
потому что первый аргумент fscanf это не то что возвращает open, а то что возвращает fopen.
Аноним 28/11/15 Суб 18:07:05 #162 №591174 
>>591172
Пиздос.
Аноним 28/11/15 Суб 18:53:50 #163 №591196 
>>591161
А должен быть указатель. Как его получить - http://stackoverflow.com/questions/1941464/how-to-get-a-file-pointer-from-a-file-descriptor
Аноним 28/11/15 Суб 19:39:25 #164 №591222 
Какие книжки годные кроме указанных в оп-посте есть? Ну чтобы прям вообще заебись.
Аноним 28/11/15 Суб 20:00:09 #165 №591234 
>>591222
Чем тебя в ОП-посте книги не устраивают?
Аноним 28/11/15 Суб 20:02:30 #166 №591236 
многомерные массивы.
Проблемы с получением ссылки на многомерный массив и на получение данных

https://ideone.com/Al0btz
Аноним 28/11/15 Суб 20:08:47 #167 №591245 
14487305270760.jpg
Посаны, начал учить няшную сишечку, читаю Прату порикоминдовали, потом буду читать классику от Жоки и Боки. Так вот, у меня вопрос.

А что написать для практики? Чтобы не слишком перегруженное, но интересное?
Аноним 28/11/15 Суб 20:13:00 #168 №591247 
>>591245
помоги мне >>591236
Аноним 28/11/15 Суб 20:42:36 #169 №591268 
>>591236
Бля, скомпилируй и проверь. Компилятор будет ругаться, если у тебя поебень с типами.

Это блядь уже, очевидно, что будет ругань
>current_word = abs_word;
т.к. разные типы
>int8_t current_word;
>int8_t abs_word[]

А здесь ты получаешь ссылку на элемент массива
>current_letter = &current_word[0];
Я не знаю, является ли это "содержимым буквы", лол. Честно сказать, я не понял, что ты хочешь получить.
Аноним 28/11/15 Суб 20:44:00 #170 №591269 
>>591268
ебучая вакаба

Бля, скомпилируй и проверь. Компилятор будет ругаться, если у тебя поебень с типами.

Это блядь уже, очевидно, что будет ругань
[CODE]current_word = abs_word;[/CODE]
т.к. разные типы
[CODE]int8_t current_word;
int8_t
abs_word[]
[/CODE]

А здесь ты получаешь ссылку на элемент массива
[CODE]current_letter = &current_word[0];[/CODE]
Я не знаю, является ли это "содержимым буквы", лол. Честно сказать, я не понял, что ты хочешь получить.[/CODE]
Аноним 28/11/15 Суб 21:53:43 #171 №591327 
14487368236850.png
>>591236
У тебя там не няшная, т.к. в няшной все объявления переменных должны быть в начале. А если записать, как у меня на пикче, то будет сишка.
>//Ссылка на этот многомерный массив. Верно ли??
>int8_t \current_word;
>current_word = abs_word;
Нет, надо две звёздочки int8_t \\current_word.
>//Получение содержимого буквы. Верно ли?
>int8_t \
current_letter = &current_word[0];
Тут у тебя получение адреса массива o_letter, а содержимое (первый элемент) получается строчкой ниже
>int8_t current_sign = current_letter[0];

>>591245
>не слишком перегруженное, но интересное
Сейчас не получится что-то интересное. Если не перегруженное, попробуй чтение текстового файла с диска и вывод его в консоль. Потом можешь усложнить, разбив на отдельные слова. Далее, отсортируй слова в алфавитном порядке по убыванию.
Аноним 28/11/15 Суб 21:55:44 #172 №591329 
>>591327
Вакаба, ну что ты делаешь?
\
\[i\]
\\
Аноним 28/11/15 Суб 22:18:53 #173 №591361 
>>591327
> не моноширинный шрифт
Аноним 28/11/15 Суб 22:20:03 #174 №591362 
>>591025
Перловый pack я очень уважаю, но писать нормальное решение, а не одноразовый скрипт на перле я бы не стал.

>>591222
Ben Klemens, 21st Century C
Stephen G. Kochan, Programming in C
На почитать сгодятся, но я бы не сказал, чтобы они оче годные были.

>>591327
> в няшной все объявления переменных должны быть в начале
Ты как-то медленно размораживаешься. Прошло уже 16 лет с тех пор, как можно объявлять переменные там, где тебе нужно, а не там, где было бы удобнее компилятору.
Алсо, *∗ - выбирай любую.
int test = testtest
Аноним 28/11/15 Суб 22:49:36 #175 №591393 
Короче надоело искать направление, решил просто базово вкатиться в программирование изучая фундамент. В общем в дальнейшем либо уеду в бэкэнд, либо в мобайл, либо во фронт. Вопросто только в том, что кроме самого Си и алгоритмов мне можно выучить, чтобы это было полезн в мобайле или вебе (допустим мне на данном этапе нафиг не надо знать, как устроен процессор или как устроена память (точнее больше, чем будет написанно в книгах по си))?
Аноним 28/11/15 Суб 22:49:46 #176 №591394 
>>591361
>в блокноте
>>591362
Стандарт C99 так позволяет? Какой же в VisualStudio? Она не позволяет такие вольности.
Аноним 28/11/15 Суб 22:59:42 #177 №591400 
>>591327
ок, спасибо. В треде с плюсами уже разжевали. Не нужно было сувать const куда попало - компилятор выдавал варнинги
Аноним 28/11/15 Суб 23:07:18 #178 №591404 
>>591394
В VS 2015 "почти" C11 (официально не поддерживается, но фактически проблемы только с некоторыми библиотечными функциями - если что, я не с дивана, у нас проект на C11, и уже год как сборка под VS рабочая и почти без костылей). Что касается деклараций переменных в любом месте функции то они, как и однострочные комментарии, были уже очень давно.
Аноним 28/11/15 Суб 23:14:56 #179 №591410 
>>591404
У меня древняя VS2005, однострочные комментарии поддерживает, а объявления нет. Тем не менее, gcc вполне поддерживает этот стандарт, т.к. мне пришлось править все объявления, чтобы скомпилировать тот проект в VS.
Аноним 28/11/15 Суб 23:24:20 #180 №591417 
>>591410
Да, ты прав. Гугл говорит, что только в 2013 студии появились такие объявления.
Аноним 29/11/15 Вск 00:20:09 #181 №591452 
>>591393
>Вопросто только в том, что кроме самого Си и алгоритмов мне можно выучить, чтобы это было полезн в мобайле или вебе
Чтобы быть полезным в мобайле и вебе, тебе не нужно учить ни Си, ни алгоритмы. Это я тебе заявляю как бывший веб-разработчик (Perl, PHP, JS) с опытом работы около 7 лет.
Аноним 29/11/15 Вск 01:19:09 #182 №591489 
>>591245
Алгоритм жука.
Аноним 29/11/15 Вск 02:35:04 #183 №591519 
>>591245
> А что написать для практики? Чтобы не слишком перегруженное, но интересное?
Например начни писать то что писал бы если бы уже знал язык. А осиливать будешь по ходу.
Так у тебя точно будет максимальная мотивация, а это гарантирует успешное изучение.
Аноним 29/11/15 Вск 04:40:23 #184 №591557 
14487612236590.gif
Задам платиновый вопрос, наверное.
Что сейчас с заработками у кодеров на Си? Например, на Java/C#/C++ более-менее обучаемая макака может довольно быстро начать получать 100к+. Некоторые знакомые Java-кодеры загребают чуть ли не по 300к в JetBrains.
Няшная позволяет примерно похожие деньги зарабатывать?
Аноним 29/11/15 Вск 06:14:07 #185 №591567 
14487668472410.png
14487668472411.png
Сап, программач, помоги ньюфагу с одной задачкой. На пике 1 формула полинома Тейлора для вычисления логарифма числа, на пике 2 моя имплементация этой формулы. Где-то тут ошибка, так как результаты выдает слишком уж отклоненные от реальных. Где? Целый день понять не могу. С меня как обычно нихуя.
Аноним 29/11/15 Вск 06:53:51 #186 №591572 
>>591567
Полностью все неправильно, просто пиздец.
Аноним 29/11/15 Вск 06:58:55 #187 №591573 
>>591572
Ну пояни плиз, я у мамы аутист.
Аноним 29/11/15 Вск 07:16:29 #188 №591577 
>>591573
За 500 рублей решу.
Аноним 29/11/15 Вск 08:58:41 #189 №591589 
>>591567
> ) {
Вот в чём удобство такой записи?
> i ∗ 1.0
(double)i
Но, т.к. там уже X double, то и этого не требуется.
>s += t
Но там же надо вычитать.
А где возведение в степень?

>>591417
На дворе был 2012 год. В Microsoft обратили внимание, что их стандарт C99 несколько отличается от принятого стандарта C99 и поправили свою реализацию. Спустя каких-то 13 лет.
Аноним 29/11/15 Вск 10:03:49 #190 №591600 
>>591567
Тебя не смущает, что у тебя знаменатель будет на 1,2,3, а 1,2,6,24? Посмотри хоть минуту на свой говнокод, прежде чем вбрасывать его сюда.
Аноним 29/11/15 Вск 11:44:57 #191 №591629 
>>591452
Что тогда мне надо пока я не выбрал между мобайлом и вебом?
Аноним 29/11/15 Вск 11:57:35 #192 №591636 
>>591557
Я думаю, что позволяет, но работу найти сложнее.
Аноним 29/11/15 Вск 12:00:01 #193 №591637 
>>591629
Технологии связанные напрямую с мобайлом и вебом, очевидно же.
Аноним 29/11/15 Вск 12:14:26 #194 №591644 
>>591567
Дополню, что в рядах с быстрым убыванием члена, при заранее известной границе суммирования(как у тебя) лучше инвестировать сумму - скрадывать от меньшего к большему.
Аноним 29/11/15 Вск 12:15:57 #195 №591645 
>>591637
Допустим?
Аноним 29/11/15 Вск 12:34:51 #196 №591658 
>>591645
Сука, хуле ты такой трудный. Тот же HTTP, AJAX, WebSocket, пресловутый MVC паттерн, JS (без него никуда в вебе). Попробуй настроить Web-сервер (например, Apache, Nginx), субд (наприме, MySQL). И, собственно, определись с языком, на котором хочешь писать.
Аноним 29/11/15 Вск 12:39:24 #197 №591663 
>>591589
>Вот в чём удобство такой записи?
мне, как джависту, такое гораздо удобнее и привычнее, чем все эти пердолинги с нижними подчеркиваниями и скобками на новой строке.
Аноним 29/11/15 Вск 12:49:19 #198 №591672 
>>591663
Чурка ебаная, какие нахуй нижние подчеркивания. Даром что жаваобезьяна.
Аноним 29/11/15 Вск 13:10:57 #199 №591678 
>>591672
сишечные
_abc
__abc
_abc_abc

У меня от такого глаза вытекают
Аноним 29/11/15 Вск 14:29:40 #200 №591743 
>>591678
Ляль, верблюдребство тоже нинужно, хотя в ООП поеботе смотрица норм. Вот простой пример, есть переменная age, нужно вьебенить например еще парочку, minAge и averageAge так вот Age нихуя не равен age, префиксы вводят в замешательство, логичнее ageMax, ageAvarage, а с max_age и avarage_age все збс.
Аноним 29/11/15 Вск 15:28:16 #201 №591788 
>>591663
Какие ещё подчёркивания?
if (...) {
......
} else if (...) {
.......
.......
} else {
......
......
}

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

if (...)
{
}
else if (...)
{
}
else
{
}
Мне так вот больше нравится. Может быть, есть какой-то толк, объясните, кто ту запись использует.

Или вот ещё:
if (...)
.........
Без фигурных скобок. Понятно, что следующий оператор после if можно не заключать в скобки, а с ними получается громоздко. Но визуально отделяется if.
Аноним 29/11/15 Вск 15:33:11 #202 №591796 
>>591788
Если про стиль именования переменных еще можно поспорить, то вот скобки - это 100% вкусовщина. Возьми astyle или аналог и переформатируй под себя, если у тебя ВИЗУАЛЬНЫЕ ПРОБЛЕМЫ. Можешь даже IDE настроить, чтобы автоматически все форматировалось.
Аноним 29/11/15 Вск 15:41:54 #203 №591799 
>>591636
Сегодня посмотрел hh, для чистого С вакансий нет почти в ДС-2. Либо требования какие-то ебанутые.
Для жаба/c# макаки работы на порядок больше. И денег в среднем больше. Печально это всё, конечно.

>>591743
Сорта говна, на самом деле. Тут дело привычки. Я частенько делаю обёртки для С-либ на C#, так мне уже абсолютно поебать на эти стили.
Аноним 29/11/15 Вск 15:45:28 #204 №591800 
>>591788
>Вот зачем так некоторые пишут?
Прост читают код по отступам, нормальные же люди цепляются по скобкам(причем парные скобки находятся оче удобно друг над другом).

>if (...) {
Сколько раз видел, что при таком формате код превращается в монолитную дрисню без чистых строк для разделения логики. С чистыми строками читать код по отступам намного труднее.
Аноним 29/11/15 Вск 15:58:35 #205 №591808 
>>591800
сам ты дристня, это во первых меньше строк, во вторых скобка над скобкой лучше смотрится ограничивая функцию чем условный оператор
Аноним 29/11/15 Вск 16:08:46 #206 №591816 
>>591799
ну вот будешь ченить с нуля пилить, предецо подумать, что выбрать, а лютейший пиздец, когда все понамешано.
Аноним 29/11/15 Вск 17:19:59 #207 №591848 
>>591800
Код можно превратить в нечитаемое говно с любым стилем скобок, ведь дело не в них, а в говнокодере.
Аноним 29/11/15 Вск 18:31:49 #208 №591900 
Товарищи, каким образом можно передать значения динамического массива в мультифайловом проекте?
Аноним 29/11/15 Вск 18:36:12 #209 №591906 
>>591900
Передай указатель на этот массив в нужную тебе функцию.
Аноним 29/11/15 Вск 18:56:24 #210 №591921 
>>591900
Ещё можешь объявить его как глобальную переменную через extern.
Аноним 29/11/15 Вск 23:28:59 #211 №592073 
14488289393460.png
14488289393471.png
14488289393472.png
Анон, что за ошибка в моем быдлокоде? Не могу открыть поток.
Аноним 29/11/15 Вск 23:34:43 #212 №592079 
>>592073
пjржал с каклакаментов. Пробуй "r+" или "w+"
Аноним 29/11/15 Вск 23:39:35 #213 №592085 
>>592079
Мда ... Затупил я с этим rw.
Аноним 29/11/15 Вск 23:43:05 #214 №592088 
>>592073
Не стыдно просить помощи у агрессоров?
Аноним 30/11/15 Пнд 00:48:05 #215 №592146 
>>592088
Ватники в соседнем разделе.
Аноним 30/11/15 Пнд 00:51:58 #216 №592149 
>>592073
От украинского мозги поплыли уже.
Аноним 30/11/15 Пнд 02:30:52 #217 №592220 
как вкатиться в системное программирование?
Аноним 30/11/15 Пнд 04:16:36 #218 №592263 
>>592220
Начни просто с работы с различными вендовскими апи выполняющими всякое системное барахло, как уловишь их суть и как устроены можешь перебираться на более низкий уровень - шиндовс driver kit/написание своих драйверов/недокументированные функции и структуры ядра.
Ну или аналогично на линуксе.

Так же накачай системных утилит типа Process Hacker и прочей йобы вроде поделий Русиновича (sysinternals.com). Ну и можешь его книжку почитать.
Утилиты нужны чтобы задрачивать их и понимать как работают (и пробовать написать свои аналоги), это норм даже если нет исходников.
Аноним 30/11/15 Пнд 04:56:40 #219 №592269 
14488486008600.png
Привет, двощеры! У меня тут промблемы. Поможет кто? Вот задание.

Создайте программу поиска заданного слова в текстовом файле:
(а) обычный линейный поиск;
(б) два процесса параллельно ищут текст в первой и второй половине
файла;
(в) два потока одного процесса параллельно ищут текст в разных
частях файла.
Во избежание ситуации гонки при доступ к файлу можно отобразить
его в память.
Сравните разные реализации по скорости выполнения и объемом памяти,
что они потребляют.
Аноним 30/11/15 Пнд 05:19:58 #220 №592276 
Как написать драйвер? Прогал на си в универе. Прогал контроллеры и написал пинг-понг. Как писать драйвер просто ума не приложу.
Аноним 30/11/15 Пнд 05:31:16 #221 №592280 
>>592276
Загугли "windows DDK" под нужную тебе венду и вперед. Так-то ничего сложного, там и примеры должны быть насколько помню, но попердолиться придется.
Аноним 30/11/15 Пнд 08:22:39 #222 №592319 
http://ideone.com/E7eol5

чеж capacitor4 не заполняется значениями?

то бишь:
printf("Capacitor4.voltage: %f", array[3].voltage);

возвращает 0.000

почему?


т.е. сначала добавляешь пустой struct capacitor4 в array

а потом назначаешь значения для capacitor4's members (voltage, cost etc)
Аноним 30/11/15 Пнд 08:31:30 #223 №592320 
>>592319
а не обращайте внимания, думал что capacitor4 и capacitor4 внутри array одно и то же, оказывается - нет.
как будто array имеет собственный capacitor4.
Аноним 30/11/15 Пнд 11:05:34 #224 №592347 
>>592320
>как будто array имеет собственный capacitor4
Так и есть, при инициализации создаётся копия всех черырёх элементов. Если тебе нужны ссылки, надо писать так:
struct Capacitor ∗array[4] = {&capacitor1, &capacitor2, &capacitor3, &capacitor4};
Аноним 30/11/15 Пнд 12:02:12 #225 №592369 
>>592280
под винду за последние 15 лет проделали огромную работу
поэтому сейчас можно
писать драйвера старым способом
есть новая инфраструктура
+ есть отдельная инфраструктура для драйверов, работающих в пользовательском режиме
с другой стороны, сама же майкрософт сделала все это ненужным, так как сама за эти же двадцать лет написала собственные драйверы почти подо все
Аноним 01/12/15 Втр 22:41:53 #226 №593512 
Двач, помоги.
Весь вечер безуспешно гуглю в чем дело.
https://ideone.com/lgzut5
Segmentation fault на любых попытках доступа к *ptest
Аноним 01/12/15 Втр 22:55:15 #227 №593524 
>>593512
arr у тебя массив (не указатель), т.е. определение arr просто резервирует на стеке несколько char'ов и инициализирует их. При обращении к arr (без квадратных скобок), оно преобразуется в адрес первого char'а, и этот адрес как бы не хранится ни в какой переменной, и поэтому &arr это уже какой-то undefined behavior. Отсюда и сегфолты в общем.
Аноним 01/12/15 Втр 23:16:40 #228 №593554 
>>593524
Дополню ещё. Короч &arr это не то чтобы undefined behavior, но просто ненужная хуйня, потому что &arr == arr. И они оба имеют тип указатель на char, и поэтому присваивание к ptest у тебя бы не прошло без каста, как бы намекая на то, что у тебя где-то есть ошибка. А у тебя в результате в ptest вместо указателя на указатель оказывается просто указатель на char. Отсюда вывод - нехуй кастовать если это не один из следующих случаев, в которых кастовать можно и иногда нужно:
1. каст указателя на void в указатель на другой тип
2. каст структуры в тип первого элемента этой структуры.
3. ну может еще что-то, что я не вспомнил, но вряд ли
Аноним 01/12/15 Втр 23:21:29 #229 №593558 
>>593524
Спасибо.
Пока частично понял.

Тогда еще вопрос:
как в таком случае получить адрес arr?
C использованием еще одной переменной выходит так:
char *parr = arr;
А какие варианты еще одной переменной?
Аноним 01/12/15 Втр 23:22:46 #230 №593562 
>>593558
>А какие варианты еще одной переменной?
А какие варианты без еще одной переменной?
Аноним 01/12/15 Втр 23:33:16 #231 №593592 
>>593562
Никаких. У тебя массив, у него есть адрес (его начало). Если тебе нужен тип именно указатель на указатель на char, то создаешь переменную типа указатель на char (как в твоем последнем посте), присваиваешь ей arr или &arr[0] (одно и тоже), а затем берешь адрес уже той переменной. Т.е. адрес можно брать только у переменной (которая физически где-то лежит в памяти) и только один раз, т.е. &&var уже нельзя делать (может оно и скомпилируется, конечно, не проверял, но смысла это делать точно нет никакого).
Аноним 01/12/15 Втр 23:36:33 #232 №593600 
>>593558
Короч, чтобы стало совсем понятно: arr это уже адрес массива (первого элемента), представь, что компилятор тупо подставляет число адрес вместо arr. Ты ведь не стал бы пытаться получить адрес числа (типа &1234)? Также и тут.
Аноним 01/12/15 Втр 23:39:50 #233 №593607 
>>593592
>>593600
Проясняется.

Осталось понять только почему у меня работает первый вариант?

Если я правильно все понял, то взятие адреса у массива (&arr) ,бессмысленная операция.
Аноним 01/12/15 Втр 23:46:52 #234 №593617 
>>593554
> 3.
При вычислениях со смешанными типами (int, double) лучше лишний раз кастануть в нужном месте, чем искать ошибку.
Аноним 01/12/15 Втр 23:48:29 #235 №593618 
>>593607
Ну дык. В первом варианте переменная arr1 у тебя имеет тип указатель на char. Определение arr1 создаёт и инициализирует анонимный массив, а также дополнительно выделяет место под один указатель, в который записывает адрес этого безымянного массива. Т.е. arr1 это переменная, в которую уже записан адрес массива. И так как arr1 это пременная, и она тоже лежит на стеке, то соответственно можно получить её адрес, который и будет являться указателем на указатель на первый элемент массива (то есть на char).
При объявлении arr же, создаётся только сам массив.
Аноним 01/12/15 Втр 23:49:17 #236 №593620 
>>593617
Ты прав. так и думал, что что-то забыл
Аноним 01/12/15 Втр 23:57:19 #237 №593624 
>>593618
Спасибо, всё встало на свои места.
Аноним 01/12/15 Втр 23:57:57 #238 №593625 
>>593624
Всегда пожалуйста.
Аноним 02/12/15 Срд 00:38:53 #239 №593664 
>>593624
Алсо. Если ты не покинул с концами этот тред, то вот ещё немного полезной инфы. Между определением arr1 и arr есть ещё одна существенная разница (если мне не изменяет память).
В случае с arr, массив будет создан на стеке, и с ним (в пределах данной функции) можно делать что угодно.
В случае с arr1 же, локально на стеке будет лежать только указатель (т.к. ты объявил указатель), а сама строка будет находиться в статической памяти, и, скорее всего, в её read-only области. Поэтому, попытавшись изменить символы в строке через указатель arr1, можно соснуть и словить ещё один сегфолт. Такие дела.
Аноним 02/12/15 Срд 01:33:31 #240 №593693 
>>593664
Ты прав. С другой стороны, char arr[] = "" - это лишний memcpy в коде. Он не нужен иногда, если тебе только читать. И есть третий вариант - static char arr[] = "" - поместит массив в секцию данных (т.е., не будет копирования), массив будет доступен для записи, но функция перестанет быть реентерабельной.

>>593554
> что &arr == arr. И они оба имеют тип указатель на char
Нет, &arr - указатель на (тип массива). Численно указатели равны, а типы различны.
Аноним 02/12/15 Срд 02:11:36 #241 №593705 
>>593693
> Численно указатели равны, а типы различны.
Да, тут походу я обосрался, хотя вроде как и знал об этом где-то в глубине памяти обидно сцук, но по факту помнить про такое особенно и не нужно, т.к. если типы не совпадут, то компилер выдаст ошибку. Да и вообще редко когда такой тип может пригодиться, как мне кажется.
Аноним 02/12/15 Срд 03:07:25 #242 №593723 
14490148453580.png
Что-то я в глаза ебусь(
Есть файл, содержимое на скрине.
В нем 4 строчки.
Нужно считать эти 4 строчки.
Однако считывается 8 строчек, а на 4.
Почему?
Аноним 02/12/15 Срд 03:39:23 #243 №593730 
>>593723
Похоже на вендопроблемы. Попробуй открыть файл в режиме rb.
Аноним 02/12/15 Срд 05:30:06 #244 №593774 
14490234068000.png
Анон,
Требуется твой совет.

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

Хочу поставить какой-нибудь простой дистр, чисто для изучения С.

В наличии:
- 2 флешки, примерно по 1Gb каждая.
- немолодая noname пекарня.
- очень мало свободного времени. Его просто нет на поебки с ОС, нужен простой и проверенный инструмент.

Что хотелось бы в идеале:
- гружусь с флешки в простенький дистр (с минимальным гуем, без йобаперделок),
- захожу в приемлемый редактор (даже соснолечка и отстутствие IDE не пугает? GEdit???)
- херачу упражнения, конпелирую и вот это вот все.

Что требуется:
- Литература типа K&R, только желательно не раньше 2010. K&R конечно классика, но уж очень устарел, компиляторы ругаются практически на каждый пример из книги.
- Желательно литература или сайт заточенные для изучения С под линуксом, для относительных новичков.

Начальные условия:
- С программированием неплохо знаком, образование высшее техническое (инженер), курю параллельно SICP.

Помоги Даше найти дистр, литературу, редактор, ну и что еще я забыл, ибо нуб.

Надеюсь на тебя и уповаю.
Аноним 02/12/15 Срд 05:38:07 #245 №593776 
>>593774
Норкоман, с твоим набором требований можно поставить debian-netinst на ту самую флэху, добавить build-essential и сидеть в виме в соснолечке (или вообще с ssh планшета/другой пекарни). Канпюлять тем же gcc или шлангом. У последнего ошибки поинформативнее.
Аноним 02/12/15 Срд 05:39:31 #246 №593777 
>>593774
Вдогон:
Полностью пустой дебиан 7 версии весил 124 метра после установки, 8-systemd-гавно не ставил, но прозреваю что не больше 200. ssh-сервер и канпюлятор прибавят максимум ещё столько же.
Аноним 02/12/15 Срд 05:43:18 #247 №593778 
>>593730
>>593723
Вендопроблемы с /r/n
Только не rb, а rt. rb (aka r by default) как раз и вызовет эту шнягу.
Аноним 02/12/15 Срд 05:51:54 #248 №593783 
>>593776
> шлангом
штоэта?
Аноним 02/12/15 Срд 07:35:17 #249 №593790 
>>593778
Ни rb,ни rt не помогло :c.
Бля, программа-то устная, что за фигня.
Аноним 02/12/15 Срд 09:56:02 #250 №593825 
>>593723
выложи файл 1.txt сюда
Аноним 02/12/15 Срд 09:57:49 #251 №593826 
>>593783
clang
Аноним 02/12/15 Срд 10:04:21 #252 №593829 
>>593825
да, выложи отдельным файлом на какой-нибудь ргхост, а не в теле поста
Аноним 02/12/15 Срд 10:09:30 #253 №593831 
>>593825
Если думаешь, что проблема в винде, накачу ща убунту и посмотрю чо как там.
http://sie-club.ru/1406 файл
http://sie-club.ru/1407 программа
Аноним 02/12/15 Срд 10:15:28 #254 №593835 
>>593831
У тебя там между строк в файле рандом какой-то из 0d и 0a.
Аноним 02/12/15 Срд 10:35:41 #255 №593839 
14490417415870.png
>>593835
0d и 0a это переносы строк.
Аноним 02/12/15 Срд 10:43:00 #256 №593840 
14490421806290.png
>>593723
>>593831
Всё верно, там 8 переводов строк.
Аноним 02/12/15 Срд 10:59:18 #257 №593844 
14490431584010.jpg
>>593840

>>593839
Респект.
Аноним 02/12/15 Срд 12:49:54 #258 №593908 
>>593664
Да, про read only знал, да и гугл выдавал в основном это различие.

Сделал утром на свежую голову, чтобы подтвердить свою ошибку:
char arr[]="intel";
arr++;
Компилятор ожидаемо выдал:
error: lvalue required as increment operand
Думаю усвоил теперь, что массив не указатель.
Аноним 02/12/15 Срд 15:15:35 #259 №594033 
>>593790
Выложи файл, который читаешь (файлом, а не текстом) или покажи хекс-дамп.
Аноним 02/12/15 Срд 17:06:57 #260 №594102 
>>593776
>>593777

Спасибо!

Я наверное неправильно выразился либо нихуя не понял.
Я не хочу устанавливать Линукс на пеку.
Аноним 02/12/15 Срд 17:51:50 #261 №594132 
>>594102
В любом дистрибутиве есть LiveCD/USB образы, выбирай на вкус/цвет дистр и тамже читай инструкцию как на юсбпалку записать
Аноним 02/12/15 Срд 18:03:01 #262 №594139 
>>594132
Ok,
А есть ли дистр, заточенный именно на работу с USB? Live USB постоянно при впключении просит full install.
Аноним 02/12/15 Срд 18:11:38 #263 №594150 
>>594139
Назачем тебе USB? Воткни VirtualBox, поставь любой понравившийся дистр, не придется перезагружаться по 20 раз на дню.
Алсо, что значит вот это?
> пиздец с текстовым и графическим режимами в венде
Аноним 02/12/15 Срд 18:33:54 #264 №594177 
>>594150
>Воткни VirtualBox
Ахтыжблядь, даже не думал в эту сторону, спасибо!

> пиздец с текстовым и графическим режимами в венде
Это когда вместо кириллицы говно, и никак это не лечится.
Это когда conio.h, graphics.h и тому подобное практически невозможно заставить нормально работать, а упражнения делать надо.
Это когда вместо сосредоточения на книге+упражнения пытаешься заставить работать очередной, монструозный и глючный спермо-IDE.

Может быть по отдельности это и преодолими, но как же меня это задрало.
Для обучения нужен простой, предсказуемый, понятный и контролируемый инструмент.
Мне, по-крайней мере.
Аноним 02/12/15 Срд 18:38:31 #265 №594183 
>>594177
>Это когда вместо кириллицы говно, и никак это не лечится.
Это лечится функцией chartooembuf.
>Это когда conio.h, graphics.h и тому подобное практически невозможно заставить нормально работать, а упражнения делать надо.
mingw возьми.
>Это когда вместо сосредоточения на книге+упражнения пытаешься заставить работать очередной, монструозный и глючный спермо-IDE.
И emacs.
Аноним 02/12/15 Срд 18:58:44 #266 №594194 
>>594183
Не хочу разводить срачик, но emacs действительно не для нубов как я.
И он никак не подходит под категорию "простой и понятный".
Консольная графика с mingw работает примерно в 50% случаев, и связано это с Win7, смотри тред про С++.
То же самое про chartooembuf.
Аноним 02/12/15 Срд 19:07:04 #267 №594207 
>>594194
Возьми любой другой редактор. Для твоих задач не то что линукс не нужен, ideone достаточно будет.
Аноним 02/12/15 Срд 19:08:58 #268 №594212 
>>594177
Ты там бля в свой диплом посмотри, там точно "инженер" написано? Чем тебя MinGW/Cygwin не устраивает?
Аноним 02/12/15 Срд 19:19:08 #269 №594224 
Держи, поставишь на виртуалку, то, что дохтор прописал

http://www.linuxfromscratch.org/livecd/
Аноним 02/12/15 Срд 19:22:19 #270 №594228 
>>594224
>Советовать LFS.
>Не посоветовать глазные капли "Визин".
Аноним 02/12/15 Срд 19:23:20 #271 №594231 
>>594228
ну это же LivCD
Аноним 02/12/15 Срд 19:26:33 #272 №594234 
>>594231
Так там же устаревшее все. Да и на виртуалку его просто так не поставишь. Есть же всякие Finnix или TinyCore.
Аноним 02/12/15 Срд 19:29:47 #273 №594237 
>>594234
Ну тогда хуй знает, я в этом дистрозоопарке нихуя уже не понимаю
Аноним 02/12/15 Срд 19:36:22 #274 №594245 
>>594237
Тут от критериев все зависит. Если главное условие - это небольшой размер, то TinyCore это самый подходящий дистр. Там даже GUI есть. Но если надо, чтобы не было проблем с либами и зависимостями (мало ли, какую либу или тулкит захочется освоить), то есть смысл подобрать что-то посерьезнее.
Аноним 02/12/15 Срд 19:37:28 #275 №594248 
>>594237
Если ты учишь Си для себя, а не для ВУЗа, то забудь про conio.h и graphics.h, это устаревшее говно никому уже не нужно, если ты не любитель писать под некроОС. Не факт, что оно заработает под Linux. Найди современные аналоги, они не только проще, но и надежней.
Аноним 02/12/15 Срд 19:44:25 #276 №594255 
>>594248
я это не он =) Но двачую, консольную графику нахуй.
Аноним 02/12/15 Срд 20:11:11 #277 №594291 
>>594248
>>594255
Учу для себя, просто начал учиться по K&R - а это крайне устаревшее.
Нашел это: C How to Programm, Deitel
Все, что я искал - Линукс с объяснениями, и не нужна консольная графика.
Я считаю следует добавить в шапку. И убрать K&R.
Аноним 02/12/15 Срд 20:28:32 #278 №594317 
>>594291
>И убрать K&R.
Давай ты лучше хуй из своего рта уберёшь.
Аноним 02/12/15 Срд 20:38:00 #279 №594328 
>>594317
Не, давай лучше ему вдвоем насуем хуев.
Аноним 02/12/15 Срд 20:42:43 #280 №594331 
>>594328
>>594317

>#include <stdio.h>
> main()

Если это не седой хуй во рту, то что есть хуй во рту?
Аноним 02/12/15 Срд 20:49:28 #281 №594339 
>>594331
Лол. Это что, из первого издания?
Аноним 02/12/15 Срд 20:50:53 #282 №594340 
>>594177
>>594291
> пытаешься заставить работать очередной, монструозный и глючный спермо-IDE
Посмотри, например, Pelles C: IDE, компилятор с почти полной поддержкой C11 (включая стандартную библиотеку, этим сейчас мало кто похвастаться может), source-level отладчик, профилер какой-никакой. Весит все это счастье 10 МБ, ставится по Next-Next-Next, работает из коробки на Windows 7 и выше.
Алсо, можно взять связку Sublime Text 3 + MinGW - проще некуда, пользуюсь, брат жив.

> conio.h, graphics.h
Закапываешь это нестандартное дерьмо, а потом идешь и пиздишь того, кто тебе про это рассказал.

> Это когда вместо кириллицы говно, и никак это не лечится.
Лечится четырьмя путями:
1) Кодировка исходника в CP866 (зашквар, зато один клик и отсутствие каких-либо проблем).
2) Кодировка консоли (одна команда: chcp 1251 или программно через локали, или SetConsoleOutputCP).
3) Обертка над CharToOem, которую тебе уже подсказали (некоторая ебля).
4) Юникодный ввод-вывод (средствами сишечки или средствами Windows API, похуй - потребуются свои обертки над принтф, но в любой серьезной программе ты этим закончишь).
Для обучения достаточно 1 или 2. В Линуксе тебя ждет еще более увлекательный мир UTF-8, желаю успехов.

> убрать K&R
Почитай прошлый тред, там был срачик про K&R. Вердикт: читай и не выебывайся, потом что-нибудь поновее прочитаешь, типа >>591362 Ты изданием книги не ошибся?
Аноним 02/12/15 Срд 21:02:00 #283 №594355 
>>594340
>Закапываешь это нестандартное дерьмо, а потом идешь и пиздишь того, кто тебе про это рассказал.
>>594339

Второе издание K&R, ANSI C, по ссылке из шапки. Там же getch(), из той же оперы.
Я не понял, я единственный, кто читает эту книгу? Все остальные только ее советуют?

Спасиб, няш ! >>594340
Аноним 02/12/15 Срд 21:41:50 #284 №594383 
>>594355
> я единственный, кто читает эту книгу
лол, да
Аноним 02/12/15 Срд 21:44:37 #285 №594385 
а мне нравятся серии "для чайников" или "за 21 день", там даже тупорылый пиндос разберется
Аноним 02/12/15 Срд 21:46:40 #286 №594388 
14490820009420.jpg
>>594331
>#include <stdio.h>
> main()

>Если это не седой хуй во рту, то что есть хуй во рту?
И в чём же тут проблема?

>>594355
>Я не понял, я единственный, кто читает эту книгу? Все остальные только ее советуют?
Нет, не слушай этого дебила >>594383
Аноним 02/12/15 Срд 21:49:08 #287 №594390 
>>594355
Кстати, "return 0;" в конце main таки можно не писать, т.к. в соответствии со стандартом, если выполнение программы доходит до закрывающей скобки функции main, то операционной системе возвращается код успешного завершения. А вот int, и только int, писать надо.
Аноним 02/12/15 Срд 21:49:59 #288 №594391 
>>594390
>А вот int, и только int, писать надо.
нет, int тип по дефолту
Аноним 02/12/15 Срд 21:54:19 #289 №594393 
>>594388
> И в чём же тут проблема?
-Wall -Werror

>>594391
> int тип по дефолту
Был по дефолту много лет назад. С тех пор прошло... 26 лет?
Аноним 02/12/15 Срд 21:58:56 #290 №594399 
>>594393
>-Wall -Werror
Тебя заставляют с этими опциями компилировать?

>Был по дефолту много лет назад. С тех пор прошло... 26 лет?
И сейчас есть, не важно сколько лет прошло:

[CODE]
% cc -Wall hello.c
hello.c:3: warning: return type defaults to 'int'
hello.c: In function 'main':
hello.c:5: warning: control reaches end of non-void function
[/CODE]
Аноним 02/12/15 Срд 21:59:45 #291 №594401 
>>594393
Ну как-бы о том и речь.
С безмерным уважением к Отцам, книга морально устарела, прежде всего потому, что их детище не стоит на месте, а развивается.
Аноним 02/12/15 Срд 22:01:29 #292 №594402 
14490828890490.png
14490828890501.png
>>594391
>>594399
У тебя свой стандарт? Кто сказал, что в других средах и у других компиляторов поведение будет таким же, как у тебя?
Аноним 02/12/15 Срд 22:04:51 #293 №594403 
>>594399
>Словил два варнинга.
>Это норма, посоны. Так и должно быть.
Аноним 02/12/15 Срд 22:06:08 #294 №594405 
>>594399
> Тебя заставляют с этими опциями компилировать?
Очевидно, что да (плюс -Wno-date-time из-за поклонников сиреневенького когтееда). И другим того же советую, чтобы потом не было мучительно больно.

>>594402
> or equivalent

Но расчитывать на implicit int в 2015 - это полный пиздец.
Аноним 02/12/15 Срд 22:12:02 #295 №594408 
>>594405
Там речь не про implicit int. Там написано про те случаи, когда тип ф-ции main совместим с int. Если тип функции не задан вообще, то это unspecified behaviour.
Аноним 02/12/15 Срд 22:17:35 #296 №594415 
14490838555120.jpg
>>594402
>У тебя свой стандарт?
у меня GCC
>Кто сказал, что в других средах и у других компиляторов поведение будет таким же, как у тебя?
Покажи мне компилятор, который с командой из пикрелейтеда не скомпилирует исходник, который соответствует стандарту ANSI C. Самое время его разработчикам сообщить о баге.

>>594403
Если посмотришь сюда >>594388, то увидишь, что ничего не словил, следуя прямым указаниям из книги.

>>594405
>Очевидно, что да.
Кому очевидно? В книге про -Wall -Werror ни слова, там команда "cc hello.c", которая работает. Т.е. если следовать прямым инструкциям из книги, проблем не будет.

>>594401
>Книга устарела.
Ты просто в неё не можешь. Пожалуй, тебе действительно стоит начать с какого-нибудь пособия для чайников.
Аноним 02/12/15 Срд 22:36:21 #297 №594427 
>>594415
>Ты просто в неё не можешь
А вот тут-то я и прихуел.
Я значительную часть прошел, плюс SICP херачу, и, вдруг в нее не могу?
Я, вообще-то, заебался на винде глюки ловить, к книге у меня претензий только одна - она старая. Просто есть уже поновее, где естьпро линукс.
Аноним 02/12/15 Срд 22:44:00 #298 №594431 
>>594427
ну раз ты не можешь скомпилировать hello world, о чём может идти речь
Аноним 02/12/15 Срд 22:45:21 #299 №594433 
>>594415
> у меня GCC
О том и речь, что у тебя GCC. А стандарт уже давно говорит, что нужен хотя бы один type specifier.
Аноним 02/12/15 Срд 22:47:10 #300 №594437 
>>594431
Уууух как у меня припекло!
Добра тебе.
Аноним 02/12/15 Срд 22:47:14 #301 №594438 
>>594415
>соответствует стандарту ANSI C
Самое смешное, что тот исходник не соответствует стандарту ANSI C (если мы говорим о C89).
Вот стандарт: http://web.archive.org/web/20030222051144/http://home.earthlink.net/~bobbitts/c89.txt
Покажи, где там написано, что int - подразумеваймый тип? Мне вот кажется, что это просто такая широко распространенная фича у компиляторов.

Кроме того, там нигде не сказано, что в конце main можно не писать return, в отличие от C99. Зато там написано это:

"Program termination"

A return from the initial call to the main function is equivalent
to calling the exit function with the value returned by the main
function as its argument. If the main function executes a return that
specifies no value, the termination status returned to the host
environment is undefined.


Но сама книжка хорошая, да. И в случае данной простой, учебной программы раскхождения со стандартом несущественные и врядли повлияют на работоспособность. Но мы же не о работоспособности того или иного кода говорим, а о его соответствии стандарту. C - стандартизированный язык. И если книжка расходится со стандартом, то прав стандарт. И я считаю, что новичкам полезно знать о таких особенностях, как обязательность типа int у функции main. Потому что одно дело написать main без int, и совсем другое написать main с void.
Аноним 02/12/15 Срд 22:50:45 #302 №594443 
>>594433
Какой стандарт, лалка? Их дохуя было в истории C. В соответствии с C89 всё корректно. Я не говорю, что нужно писать с оглядкой на C89. Стандарты меняются, это нормально. Книга от этого хуже не становится.
Аноним 02/12/15 Срд 22:51:58 #303 №594447 
>>594443
>В соответствии с C89 всё корректно.
Пруфы будут?
Аноним 02/12/15 Срд 22:55:44 #304 №594451 
>>594447
>>594438
Смотри 3.5.2: Type Specifiers.
> int , signed , signed int , or no type specifiers

Но это все равно не повод использовать это на практике в современном, пусть даже и учебном коде.
Аноним 02/12/15 Срд 22:58:02 #305 №594453 
>>594451
Окей, а что с отсутствием return?
Аноним 02/12/15 Срд 22:59:47 #306 №594454 
>>594453
Хуй знает, читай C89, я в нем не спец, предпочитаю что-нибудь посвежее.
Аноним 02/12/15 Срд 23:01:08 #307 №594457 
>>594454
Я тоже. Но судя по цитате из >>594438, там будет таки unspecified behaviour.
Аноним 02/12/15 Срд 23:03:10 #308 №594463 
>>594457
А ты перечитай цитату. C behavior все будет ок, а вот какой код возврата получит ОС, зависит от фазы луны (в принципе, ничего страшного - если автор не озаботился что-то вернуть, то и похуй, что вернулось).
Аноним 02/12/15 Срд 23:07:08 #309 №594469 
>>594463
Я это и имел в виду: если неизвестно, какой код получит система, то это же подпадает под определение UB?

Undefined behavior --- behavior, upon use of a nonportable or
erroneous program construct, of erroneous data, or of
indeterminately-valued objects, for which the Standard imposes no
requirements.

Впрочем, не суть.
Аноним 02/12/15 Срд 23:10:12 #310 №594472 
14490870123000.jpg
>>594453
Либо ты прав, либо разработчики GCC.
sageАноним 02/12/15 Срд 23:16:54 #311 №594475 
>>594469
UB - более эээ... всеобъемлющее понятие. При наличии UB поведение компилятора, программы или окружения могут быть абсолютно любыми, а тут проблема только с кодом возврата.

>>594472
Это показывает только различие в уровне предупреждений. С -Wall будет предупреждение.

И вообще, какой смысл второй тред подряд продолжать K&R срач? Кто-то как выяснилось считает нормальным собирать с минимальными предупреждениями, для кого-то не проблема исправить некоторые особенности кода в книге, а кто-то найдет что-нибудь более свежее.
Аноним 02/12/15 Срд 23:18:22 #312 №594478 
>>594472
Меня интересует, что говорит стандарт. Если в стандарте С89 написано, что return можно не писать, то я готов признать свою неправоту.
Аноним 02/12/15 Срд 23:24:43 #313 №594489 
>>594475
>Это показывает только различие в уровне предупреждений.
Это показывает, что не было никаких предупреждений о return для обоих стандартов, включая ANSI C. Значит, отсутствие return стандартам удовлетворяет.
Аноним 02/12/15 Срд 23:26:11 #314 №594491 
>>594478
Т.е. ты скорее признаешь, что не правы разработчики GCC?
Аноним 02/12/15 Срд 23:27:33 #315 №594495 
>>594491
Если речь идет о соответствии стандарту, то да. Другой вопрос, существуют ли вообще 100%-совместимые со стандартом компиляторы?
Аноним 02/12/15 Срд 23:37:13 #316 №594505 
>>594495
3.6.6.4 The return statement
...
If a return statement without an expression is executed, and the
value of the function call is used by the caller, the behavior is
undefined. Reaching the } that terminates a function is equivalent to
executing a return statement without an expression.
Аноним 02/12/15 Срд 23:38:17 #317 №594508 
>>594478
Да, и ещё стандарт говорит, что ты хуй.
Аноним 02/12/15 Срд 23:42:42 #318 №594513 
>>594505
>Reaching the } that terminates a function is equivalent to executing a return statement without an expression.

If the main function executes a return that
specifies no value, the termination status returned to the host environment is undefined.

То есть, получаем неопределенный код возврата. Да, не очень критично. И в GCC, наверняка, есть на этот случай свое решение. Но как-то это все мутно. Проще написать int перед main и получить полностью совместимый с C99 код.
Аноним 02/12/15 Срд 23:46:50 #319 №594517 
>>594513
Вообще советуют main() объявлять как void и выходить с помощью exit(), чтобы можно было прогрепать все точки выхода из программы.
Аноним 02/12/15 Срд 23:52:26 #320 №594522 
14490895468070.jpg
>>594415
>Т.е. если следовать прямым инструкциям из книги, проблем не будет.
лол. а писать программы на сишке тоже потом строго по книге будешь? см. пик.
>Покажи мне компилятор, который с командой из пикрелейтеда не скомпилирует исходник, который соответствует стандарту ANSI C.
а еще в древнем стандарте ansi c можно объявлять функции вот так. http://ideone.com/xucDTh и что теперь? покажи хоть одного нормального человека, который так делает.

пиздос, набралось петухов, которые думают программирование это слово в слово из книги скопипастить, а потом получаются коммиты уровня https://lkml.org/lkml/2015/11/19/454
Аноним 03/12/15 Чтв 00:10:01 #321 №594539 
>>594522
>слово в слово из книги скопипастить
А как ты рекомендуешь учиться по книге петух? A?

>коммиты уровня https://lkml.org/lkml/2015/11/19/454
Опенсорц пишут только профи, проприетарщину - только быдлокодеры, это же очевидно.

Аноним 03/12/15 Чтв 00:10:30 #322 №594540 
>>594522
Дискуссия началась с того, что было заявлено, что книга устарела и её надо убрать. Я лишь показал, что она пригодна к использованию, не зависимо от того, что код из примеров удовлетворяет только ANSI. А те, кто не может скомпилировать hello world, унтерменши, которые поставили себе ИДЕ, в которой не понимают, чё как происходит, и запускают программу по F5, а потом кричат, что у них не работает ничего и книга плохая.

Также я не утверждал, что нужно замкнуться исключительно на одной этой книге. Очевидно, что необходимо черпать информацию из различных источников. Если придерживаться этого правила, то никаких проблем с K&R вообще не возникнет, каким бы компилятором в какой бы то ни было среде ты не компилировал.
Аноним 03/12/15 Чтв 00:12:43 #323 №594541 
>>594522
>https://lkml.org/lkml/2015/11/19/454
Я вообще не понял, что автор патча хотел сделать.
Аноним 03/12/15 Чтв 00:46:37 #324 №594560 
>>594539
>А как ты рекомендуешь учиться по книге петух? A?
никак. книги по программированию это удел говноедов.
>>594540
>Дискуссия началась с того, что было заявлено, что книга устарела и её надо убрать.
правильно заявлено. сам же пишешь:
>код из примеров удовлетворяет только ANSI
добро пожаловать в 90-е. про с11 слышал?
>А те, кто не может скомпилировать hello world, унтерменши, которые поставили себе ИДЕ, в которой не понимают, чё как происходит, и запускают программу по F5, а потом кричат, что у них не работает ничего и книга плохая.
или разумные люди, которые знают, что компиляция с -Wall -Wextra -Werror позволяет отловить много ошибок. а советуют убрать эти опции (вместо того чтобы либо исправить код) только мудаки с картинки выше. ворнинги в компилятор не от хорошей жизни добавили.

впрочем, тут возникает логичный вопрос: если код надо исправлять, то нахуй такая книга вообще нужна? ответ: не нужна.
>>594541
очевидно же, целью было хоть какой-нибудь коммит в ядро отправить. линтер сказал там где data != NULL написать "!data", значит надо написать "!data". "!data" != NULL.
Аноним 03/12/15 Чтв 00:50:43 #325 №594562 
>>594517
С void ты язык перепутал. В exit() смысл есть.

>>594560
> нахуй такая книга вообще нужна? ответ: не нужна.
Для понимания, что код не всегда бывает красивым и правильным, для развития навыка выяснения хотя бы в /pr/, хули оно ругается на код из книги, для получения мысленной ачивки "я поправил код ВЕЛИКИХ, и теперь компилятор не ругается".
Аноним 03/12/15 Чтв 00:52:11 #326 №594564 
>>594562
>для получения мысленной ачивки "я поправил код ВЕЛИКИХ, и теперь компилятор не ругается".
лол. "!data" != NULL, теперь линтер не ругается.
Аноним 03/12/15 Чтв 00:54:13 #327 №594565 
>>594564
Лол, да хоть бы и так - будет выяснять, "а чего оно сегфолтится, я же проверил на NULL", тоже полезно.
Аноним 03/12/15 Чтв 01:04:04 #328 №594568 
>>594562
>С void ты язык перепутал.
Не совсем понял про "перепутал", но да, по логике вещей main() должен возвращать код возврата даже с помощью exit(), так что нужен int, каюсь.
Аноним 03/12/15 Чтв 01:06:14 #329 №594570 
>>594560
>линтер сказал
щито?
Аноним 03/12/15 Чтв 01:08:31 #330 №594571 
>>594560
>книги по программированию это удел говноедов.
Вот сейчас обидно было.
Аноним 03/12/15 Чтв 01:12:26 #331 №594572 
программирование это удел говноедов
так правильней
Аноним 03/12/15 Чтв 01:14:49 #332 №594573 
>>594572
Вот сейчас обидно было.
Аноним 03/12/15 Чтв 05:07:03 #333 №594605 
14491084236580.png
>>594560
>книги по программированию это удел говноедов.
Лалка, а как еще учиться?
Аноним 03/12/15 Чтв 05:56:41 #334 №594612 
Подскажите среду под С на Шин, чтобы было мало кнопок всяких, ибо я заебался ебаться в глаза в VS
Аноним 03/12/15 Чтв 06:10:04 #335 №594616 
>>594612
mingw32.
Аноним 03/12/15 Чтв 07:14:37 #336 №594631 
>>594605
IDE в руки, гугл в анус и вперёд
Аноним 03/12/15 Чтв 11:06:30 #337 №594673 
>>594631
IDE это удел говноедов
Аноним 03/12/15 Чтв 12:00:02 #338 №594698 
>>594612
Code::Blocks, PellesC.
Аноним 03/12/15 Чтв 15:23:17 #339 №594796 
>>594673
двачую, VIM рулет
Аноним 03/12/15 Чтв 16:58:47 #340 №594888 
>>594673
>>594631
А вот по ссылке из шапки http://c.learncodethehardway.org/book/
чувак не рекомендует пользоваться IDE вообще, говорит - отупляет. Что он имеет ввиду конкретно? Что надо понимать весь процесс генерации от исходников до исполняемого кода?

Аноним 03/12/15 Чтв 17:05:18 #341 №594889 
>>594291
> C How to Programm, Deitel
>int *yPtr;
>yPtr;
>Ptr

ЧТО ЭТО ЗА ПИЗДЕЦ
Аноним 03/12/15 Чтв 17:54:39 #342 №594923 
>>594888
Стоит хотя бы мейкфайлы научиться писать. Или build.sh. К тому же сишечка не кресты, для навигации по коду хватает тэгов, которые есть в любом редакторе.
Аноним 03/12/15 Чтв 17:54:44 #343 №594924 
Пицаны, куда гуглить чтоб нагуглить, скачать и скомпилить либы? Например для http запросов.
Аноним 03/12/15 Чтв 18:12:23 #344 №594945 
>>594924
гугли сокеты и ахуевай
Аноним 03/12/15 Чтв 19:01:09 #345 №595006 
>>594945
Зачем ему сокеты, ему какое-нибудь libcurl/libwww надо.
Аноним 03/12/15 Чтв 20:55:59 #346 №595115 
>>594889
Ты что, это стильно модно молодёжно, не то что устаревший скучный K&R.
Аноним 03/12/15 Чтв 21:01:08 #347 №595123 
>>594889
а чо не так? Где пиздецома? Обычный верблюдостиль
Аноним 03/12/15 Чтв 21:02:45 #348 №595127 
>>595115
Кэмелкейс норм, а вот за ptr я бы по рукам давал.
Аноним 03/12/15 Чтв 21:08:25 #349 №595132 
>>595127
Отчего? То что ptr постфикс а не префикс?
Аноним 03/12/15 Чтв 21:11:16 #350 №595134 
14491662769630.png
>>595127
Кэмелкейс не норм, труЪ сишка полностью мелкобуквенная, и это так и задумано.
Аноним 03/12/15 Чтв 21:12:58 #351 №595136 
>>595134
труЪ сишка настолько труЪ, что ей похуй на стиль
Аноним 03/12/15 Чтв 21:17:14 #352 №595140 
>>595134
Петушки, а вы знаете, что в этом алгоритме проиходит деление многочленов в поле Галуа?
Аноним 03/12/15 Чтв 21:20:00 #353 №595141 
>>595140
Слышь, Галуа, петушка в зеркале увидишь.
Аноним 03/12/15 Чтв 21:28:35 #354 №595146 
>>595132
Покажи, в каких случаях суффикс (или префикс, похуй) ptr имеет смысл?

>>595134
сишка полностью мелкобуквенная
> _Complex
> _Bool

Сишка такая, какая принята в твоем проекте. Если ты следуешь стилю, все ок. Если ты лезешь со своим snake case в проект с camel case, ты мудак.
Аноним 03/12/15 Чтв 21:29:30 #355 №595147 
Посоны, я перехватил прерывание. Что мне с ним дальше делать?)))
Аноним 03/12/15 Чтв 21:30:47 #356 №595148 
>>595147
Проапгредиться с DOS до Linux/Windows.
Аноним 03/12/15 Чтв 21:33:49 #357 №595153 
>>595127
Так для удобства же, чтобы знать что это определенный указатель.
Какие продлемы?
Аноним 03/12/15 Чтв 21:38:21 #358 №595159 
>>595153
Так я и так знаю, что переменная - указатель. Может мне еще foo_const_int_ptr_const_dynamic_buffer_of_2048_bytes писать? Абсолютно ненужная информация, которую приходится повторять каждый раз при использовании переменной. Нахуй?
Аноним 03/12/15 Чтв 21:52:46 #359 №595166 
>>595146
>Покажи, в каких случаях суффикс (или префикс, похуй) ptr имеет смысл?
Ну а в каких случаях мелкомягкие пидоры форсили Венегрскую Нотацию, у них все винапи этим говном абляпано? Такая же поебота, дело личных предпочтений.
Аноним 03/12/15 Чтв 22:00:04 #360 №595169 
>>595159
Тебе вот легко говорить, а я нуб зеленый как гусинное дерьмо.
Как ты знаешь что эта переменная - указатель? Особенно в чужом коде?
Аноним 03/12/15 Чтв 22:02:12 #361 №595171 
>>595166
А кто сказал, что в Microsoft были правы? В общем-то, дело предпочтений, но в век IDE о переменной можно узнать все одним хоткеем.

>>595169
> Как ты знаешь что эта переменная - указатель? Особенно в чужом коде?
Она либо локальная (или параметр функции), и я просто посмотрю. Или она из немногочисленных глобальных переменных. В худшем случае есть тултип с информацией о типе или goto definition.
Аноним 03/12/15 Чтв 22:13:15 #362 №595181 
14491699951190.png
>>595171
>просто посмотрю
>тултип
>goto definition
Аноним 03/12/15 Чтв 22:14:15 #363 №595183 
>>595181
Жаль тебя.
Аноним 03/12/15 Чтв 22:19:12 #364 №595189 
>>595171
Ты программируешь на Си? В какой области? Если не секрет.
Аноним 03/12/15 Чтв 22:28:18 #365 №595195 
>>595189
Да. На работе мультимедия, для души байтоебля.
Аноним 03/12/15 Чтв 23:25:32 #366 №595242 
>>595171
> в век IDE о переменной можно узнать все одним хоткее
распечатал на 100500 листов свою говнопрогу и приуныл
Аноним 04/12/15 Птн 22:38:49 #367 №595981 
>>594291
А чем тебе ссылка из шапка не угодила?
Там же как-раз про линекс:
http://c.learncodethehardway.org/book/
Аноним 04/12/15 Птн 22:46:37 #368 №595994 
По венгерской нотации Джоэль все расписал http://local.joelonsoftware.com/wiki/%D0%9A%D0%B0%D0%BA_%D0%B7%D0%B0%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_%D0%B2%D1%8B%D0%B3%D0%BB%D1%8F%D0%B4%D0%B5%D1%82%D1%8C_%D0%BD%D0%B5%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE
Аноним 04/12/15 Птн 23:46:03 #369 №596058 
>>595994
Описываемая проблема высосана из пальца и решается html-шаблонами, а не венгерской нотацией.
Аноним 04/12/15 Птн 23:48:40 #370 №596061 
>>595994
абасал переводчика ибо набор слов какойто
Аноним 04/12/15 Птн 23:49:54 #371 №596062 
>>596061
2 чаю, хуёво переведено. С этого охуел
>ваши глаза научатся это видеть, точно так же как рабочие пекарни научились смотреть на гигантскую фабрику хлеба
Аноним 05/12/15 Суб 00:00:46 #372 №596066 
>>595994
Статья ни о чём, даже переводчик опровергает автора в своих комментариях. Ключевой вопрос, даже если нужно делать префиксы к переменным с обозначением, что за вид данных они хранят, почему их обязательно нужно обозначать как refAlloYoba, а не ref_allo_yoba или даже так с постфиксом allo_yoba_ref. Что за необходимость юзать верхний регистр.
Аноним 05/12/15 Суб 00:03:34 #373 №596071 
>>596058
Проблема решается разделением типов "строка" и "HTML".
Аноним 05/12/15 Суб 00:10:45 #374 №596074 
>>596071
В вебе используют обычно языки с нестрогой динамической неявной типизацией, так что ты сразу соснёшь со своим предложением.
Аноним 05/12/15 Суб 00:38:18 #375 №596097 
>>596074
У нас тут Си-тред, если ты не заметил, и у нас подобная "защитная" типизация превосходно решается указателем на incomplete type вместо char.
Аноним 05/12/15 Суб 00:58:57 #376 №596109 
>>596062
ПРОИГРАЛ СУКА
Аноним 05/12/15 Суб 01:10:15 #377 №596120 
>>596097
претензии не ко мне, а к петушку, что вбросил статью про венгерскую нотацию с примерами из веб-программирования
Аноним 05/12/15 Суб 13:15:48 #378 №596383 
>>596066
это позволит увеличить плотность кода, сделать еще более короткие имена
Аноним 05/12/15 Суб 13:39:04 #379 №596391 
Тупые школьники и не осилили короткую статью на русском языке. Речь в статье о том, что apps hungarian в принципе использовать имело смысл, а system hungarian - смысла использовать не было никогда. Речь только об этом. А не о том, что в языках с развитой системой типов для apps hungarian есть альтернативы.
По пунктам.
>>596058 Тупой школьник не осилил статью.
>>596066 Тупой школьник тоже не осилил статью. Самый тупой.
>>596097 Школьник номер три типа самый умный, но не в курсе, что венгерская нотация появилась до его рождения в ситуации, когда в С можно было сделать так: http://ideone.com/fS3mjz
Аноним 05/12/15 Суб 14:26:50 #380 №596420 
>>596391
Ну а этот школьник не осилил C. Я сейчас сломаю тебе шаблон, но седьмая строчка твоего кода ВНЕЗАПНО не сработает без явного приведения типов. Это было сделано специально против динамических долбоебов, которые обожают присваивать неприсваиваемые сущности, а потом кукарекают что-то про ОСОБОЕ ИМЕНОВАНИЕ и РУЧНУЮ РЕВИЗИЮ КОДА.
Аноним 05/12/15 Суб 14:54:35 #381 №596433 
>>596420
Вообще-то она уже сработала азаза. Код скомпилировался.
Аноним 05/12/15 Суб 15:19:30 #382 №596441 
>>596420
так он там два указателя присваивает
Аноним 05/12/15 Суб 15:32:02 #383 №596449 
>>596420
и чо и чо? Поясни связь
Аноним 05/12/15 Суб 15:46:10 #384 №596470 
>>596420
Не "не сработает", а выдаст предупреждение без явного приведения типов.
Аноним 05/12/15 Суб 15:55:18 #385 №596476 
>>596433
Компилятор не определяет стандарт, лол.
>ANSI C 89, 3.3.4
> Conversions that involve pointers (other than as permitted by the constraints of $3.3.16.1) shall be specified by means of an explicit cast
> 3.3.16.1
>both operands are pointers to qualified or unqualified versions of compatible types, and the type pointed to by the left has all the qualifiers of the type pointed to by the right; OR
>one operand is a pointer to an object or incomplete type and the other is a pointer to a qualified or unqualified version of void, and the type pointed to by the left has all the qualifiers of the type pointed to by the right
> 3.1.2.6
>Two types have compatible type if their types are the same
Итак, если справа не указатель на тот же тип или void, то нужно явное приведение. Читайте стандарт, ребята.
Аноним 05/12/15 Суб 15:56:44 #386 №596477 
>>596470
Не выдаст предупреждение, а не скомпилируется. Посмотри на том же ideone, что сделает второй компилятор C.
Аноним 05/12/15 Суб 15:56:51 #387 №596478 
>>596383
С забором вместо имен ? Да ну его на хуй. Мне не нужна избыточная плотность луков.

А вообще венгерская ротация для приложений мне даже понравилась. Учту в релизе BuguRTOS-1.0.0.

школьник-кун
Аноним 05/12/15 Суб 16:00:04 #388 №596480 
>>596478
Старая, не сраная автозамена, ненавижу , блядь, ведро!
Аноним 05/12/15 Суб 16:10:52 #389 №596492 
>>596477
Не "Не выдаст предупреждение, а не скомпилируется" а "скомпилируется, но выдаст предупреждение".
warning C4133: '=' : incompatible types - from 'unsafe_yoba *' to 'safe_yoba *'
Если присваиваются указатели, то будет предупреждение, но присваивание произойдёт. А вот с C++ будет ошибка, т.к. там ужесточили подобные присваивания.
Аноним 05/12/15 Суб 16:17:32 #390 №596495 
14493214522410.png
>>596476
C89? А теперь внимательно смотри на год копирайта.
Аноним 05/12/15 Суб 16:24:44 #391 №596501 
>>596478
Возьми лучше язык, который может в строгую типизацию.
Аноним 05/12/15 Суб 16:53:14 #392 №596513 
>>596495
Ну, до стандартизации было вообще некорректно говорить о "языке C". Был компилятор скорее всего, написанный самими мелкомягкими, были какие-то внутренние соглашения, а у других компаний со своими компиляторами детали отличались. Мелкомягкие не смогли грамотно продумать у себя присваивание указателей и многие другие вещи, это в конечном счете вылилось в дичайший костыль с нотацией, который реально использовали только они и неопытные ньюфаги, начитавшиеся мелкомягких доков.
>>596492
Посмотри выше ссылку на стандарт. Уже в 89 это было, а в дальнейшем правила приведения только ужесточались. Какой-то у тебя хуевый компилятор, видимо, попробуй gcc.
Аноним 05/12/15 Суб 17:02:15 #393 №596517 
>>596513
До стандартизации ANSI был язык, описанный его автором в своей книжке, авторы этой книжки плачут кровавыми слезами на оппике, когда видят фантазии школьников и уровень критики статьи Джоэля.
Аноним 05/12/15 Суб 17:07:27 #394 №596527 
>>596517
И ты снова обосрался, там написано в точности то же, что в стандарте 89 года. Открываем K&R, приложение A.6.6, четвертый абзац:
>Для указателей допускаются и другие преобразования, но в связи с ними возникает проблема зависимости результата от реализации. Эти преобразования должны быть специфицированы явным оператором преобразования типа или оператором приведения
Аноним 05/12/15 Суб 17:15:37 #395 №596531 
Nyet.
В крестах есть перегрузка функций, и, как следствие, пиздец с аби., плюс не под все есть компилятор.

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

И да, большая часть "киллер-фич", если не все, лол, раста реализуемая на крестах, правда в рантайме, а не во время корреляции. Да и про #ногц афтары растопараши Кизляр.
Аноним 05/12/15 Суб 17:16:02 #396 №596534 
>>596513
>Какой-то у тебя хуевый компилятор, видимо, попробуй gcc.
Попробовал clang для Windows.
warning: incompatible pointer types assigning to
'struct safe_yoba *' from 'struct unsafe_yoba *'
[-Wincompatible-pointer-types]
s1 = s2;
Аноним 05/12/15 Суб 17:33:05 #397 №596547 
>>596534
Погуглил сейчас. Действительно, почему-то в дефолтном конфиге отнесли это к предупреждениям, а не ошибкам. Учитывая стандарт, странно, но, видимо, из-за того, что в сишном стандарте вообще нет разграничения на unspecified behavior и ill-formed-program, каждый компилятор дрочит, как он хочет, лол.
Аноним 05/12/15 Суб 17:45:12 #398 №596560 
>>596527
Ссылку дай
Аноним 05/12/15 Суб 18:01:24 #399 №596575 
>>596547
>каждый компилятор дрочит, как он хочет
Вообще, C++ даже void* без кастинга не преобразует, выдаст ошибку. А в C malloc, free и прочие стандартные функции, принимающие или возвращающие void*. Это не баг, это фича.
Аноним 05/12/15 Суб 18:01:44 #400 №596576 
>>596560
На полке у себя посмотри, это классика, блядь.
Аноним 05/12/15 Суб 18:02:22 #401 №596579 
>>596575
Про void в стандарте сишном было отдельно сказано, что можно.
Аноним 05/12/15 Суб 18:53:24 #402 №596615 
>>596576
В меня на полке только второе издание.
Аноним 05/12/15 Суб 18:53:51 #403 №596618 
>>596534
Ну вот еще один аргумент в пользу шланга вместо гцц.
Алсо Pelles C (и, видимо, lcc тоже) делает правильнее: foo.c(7): error #2168: Operands of '=' have incompatible types '(incomplete) struct safe_yoba *' and '(incomplete) struct unsafe_yoba *'. Ибо нехуй.

И вообще, похуй, предупреждение или ошибка, лишь бы показало, что с кодом что-то не так.
Аноним 05/12/15 Суб 20:01:31 #404 №596658 
>>596618
>что с кодом что-то не так
А то чо?
Аноним 05/12/15 Суб 20:51:46 #405 №596689 
>>596658
Прокрути выше, мы тут обсуждаем венгерскую нотацию в качестве одной из мер defensive programming.
Аноним 05/12/15 Суб 21:26:26 #406 №596712 
Вас почитать, ебануться можно, гуру на гуре мегагурой погоняет, где все ваши еба-продукты? А то я кроме Nginx и не припомню ченить стоящее.
Аноним 05/12/15 Суб 23:05:25 #407 №596761 
Платиновый вопрос. В чем писать на C и каким образом компилировать код, чтоб все заработало. По шагам напишите.
VS неочень.
Аноним 05/12/15 Суб 23:28:50 #408 №596769 
>>596761
Абсолютно похуй в чем писать. Выбираешь любуя понравившуяся IDE или редактор: студия, Code::Blocks, Pelles C, CLion, Eclipse CDT, Sublime Text, NP++ и т. д. Любой понравившийся компилятор: MinGW gcc проще всего, clang под Windows заводится через пару манипуляций (требуется MinGW вдобавок к инсталлеру с сайта), у студии и Pelles C компиляторы встроены (т.е., все работает без дополнительных настроек). Всякие интелы, борланды и tinycc не рассматриваем, ибо ненужны, древние или бажные. Это под винду. Под линуксы добавляется еще добрый десяток редакторов, а из компиляторов остаются gcc и clang, причем в clang няшный --analyze и более понятные варнинги.
Выбираешь, пишешь, конпелируешь. В IDE готовой кнопочкой, а с редакторами консолькой или плагином.
Аноним 05/12/15 Суб 23:45:41 #409 №596771 
>>596769
>интелы
>ибо ненужны, древние или бажные
Блять. Интеловские компилеры ебут всех на вычислениях. поддержка C11 сосёт хуй: а) даже в гцц ещё не завезли до конца б) нинужно, все как писали так и пишут на 99-й
Аноним 06/12/15 Вск 00:06:49 #410 №596783 
> Интеловские компилеры ебут всех на вычислениях
Спрашивающий - новичок. Интелы ему не нужны, потому что ему не нужна скорость, борланды - потому что древние, наколеночные компиляторы типа tinycc, потому что бажные. Так понятнее?

> поддержка C11
Стандартные static_assert и анонимные структуры которые раньше делали через костыли и расширения - годнота. А на C99 пишут, потому что с поддержкой не все гладко.

> даже в гцц
У гццшников всегда так - как написать очередную оптимизацию, использующую знание об UB и сломать ею что-нибудь в линуксе, так они первые ко-ко-ко, стандарт позволяет, а как допилить поддержку языка по этому же самому стандарту, так им влом.
Аноним 06/12/15 Вск 01:26:34 #411 №596825 
>>596771
>2015
>вычислять на CPU
Аноним 06/12/15 Вск 01:45:49 #412 №596830 
>>596825
> 2015
> верить в магические устройства, подходящие для всех задач
Аноним 06/12/15 Вск 14:16:05 #413 №597082 
>>596527
>И ты снова обосрался, там написано в точности то же, что в стандарте 89 года. Открываем K&R, приложение A.6.6, четвертый абзац:
Даун ссылается на второе издание. Привет, даун.
Аноним 07/12/15 Пнд 18:57:31 #414 №598309 
Суп.
Есть строка, представляющая собой 3 дробных числа с 3мя цифрами после запятой и от -1 до 1 в качестве целой части - нормализованный вектор
строка в духе "0.5910.114-0.012"
Как спарсить посредством sscanf или подобной функцией, если эта строка передается через сеть и может быть намеренно искажена.
Сейчас есть решение через atof функцию с ограничением на 5 или 6 символов в зависимости от наличия минуса.
Спасибо
Аноним 07/12/15 Пнд 19:27:00 #415 №598345 
>>598309
sscanf - костыль. Правильный способ - как раз немного ручной подготовки и atof.
Аноним 08/12/15 Втр 09:23:03 #416 №598777 
>>596513
у бля как тут дремуче
ROBOTC Аноним 08/12/15 Втр 21:39:24 #417 №599458 
Есть одна пропиетарная IDE для погромирования роботов для школоты. Использует С, поэтому спрашиваю тут.

Оно умеет писать данные(телеметрию робота, значения переменных) в "Debug Stream" и в окошко "Sensors/Variables"

Как мне блять в прямом эфире получить эти данные в другой программе?
Например, чтобы рисовать графики. Иначе сложно отлаживать всю эту хуйню.
Аноним 08/12/15 Втр 21:39:48 #418 №599461 
14495999887090.png
>>599458
Аноним 08/12/15 Втр 22:40:14 #419 №599515 
>>599461
Нам-то откуда знать, как твоя IDE работает? Ты бы рассказал, как оно к железу подключается, хотя бы. Тебе надо собирать данные параллельно с IDE или вместо нее?
Можно, например, программно грабить из окна IDE (проверь, http://www.nirsoft.net/utils/sysexp.html будет работать с окном Sensors?), но это костыль.
Аноним 08/12/15 Втр 22:44:31 #420 №599521 
Реквестирую отзывы читавших это >>599509
Аноним 08/12/15 Втр 22:51:16 #421 №599528 
>>599458
Мамкину убывцев терминаторов нужно выводить стандартными средствами С, а не writeDebugStreamLine или как там у легоебов принято
Аноним 09/12/15 Срд 00:57:55 #422 №599629 
>>599458
ну скорее всего телеметрию она сбрасывает еще и в логи, помимо отображения в ide
алсо ты лох
Аноним 09/12/15 Срд 01:53:55 #423 №599657 
>>599521
Читал тока про С++, афтар малаца.
Аноним 09/12/15 Срд 03:23:05 #424 №599683 
>>599515
так а мне откуда знать? охуеть вообще.
Оно, думаю, эмулирует сериал порт через юсб. Но как разобраться что оно там шлет то нахуй? Думал, из ИДЕ быстрее будет забрать.
Собственно, если не будет разумного решения, то проще на робота навесить Ардуино, чем ебаться разбираться с форматом общения робота с ИДЕ.
Про костыль посмотрю и сообщу, спасибо.
>>599528
Он это я и есть. Алсо, проверяй Лего за щекой. только кортекс
>>599629
>ну скорее всего телеметрию она сбрасывает еще и в логи
если это так, что я и правда лох. Но мы то знаем.
Аноним 09/12/15 Срд 03:46:58 #425 №599684 
>>599657
Двачую. Скачал, поскроллил - годно.

599521-кун

Аноним 09/12/15 Срд 05:11:05 #426 №599705 
>>599683
проверь за щекой http://www.robotc.net/wikiarchive/NXT_Functions_and_Variables, программист гандонов контексов
Аноним 09/12/15 Срд 05:14:12 #427 №599707 
особенно http://www.robotc.net/wikiarchive/NXT_Functions_File_Access
а то ненайдешь
Аноним 09/12/15 Срд 06:50:20 #428 №599722 
>>599707
спасибо, братишь!
когда перестанешь бредить лего и нхт, а найдешь под кортекс - дай знать, а?

Аноним 09/12/15 Срд 07:13:05 #429 №599724 
>>599722
а у ебучего контекс даже этого нет? Ну ебись с компортом тогда, по этому подобию
http://www.robotc.net/wikiarchive/VEX2_Functions_Serial_Link
лол
Аноним 09/12/15 Срд 07:49:28 #430 №599731 
>>599724
чего, даже этого? НХТ пишет в файл на роботе инфа процентов 80, это не то.
А то что ты предлаешь - вообще управление uart, никакого отношения к связи с компьютером.

Давай так, ты перестанешь умничать про роботов, раз не видел их никогда, а сосредоточишь свою экспертизу на рассказах как мне получить данные из ИДЕ.
Например посоветуешь программу которая могда бы слушать сериал порт в то время как его использует иде. Раньше в похожих ситуациях с ардуино этого сделать не получалось, почемуто только одна програма могда работать с портом.
Аноним 09/12/15 Срд 12:36:18 #431 №599862 
Cап, на связь выходит школьник-кун. Хочу написать шахматы. Использовать буду windows api для графена и си как язык.
Думаю представить доску как статический массив 8х8. Не понимаю как наложить ограничение на ход фигур, есть только идеи, но ничего конкретного.
Пока сижу без полноценного интернета, как только обзаведусь буду ебать вам мозги моими бесконечными вопросами. Заранее прошу прощение.
Аноним 09/12/15 Срд 16:25:14 #432 №600007 
>>599731
ой все, я спокоен за человечество если рободелы не знают разницу между uart и rs232
Аноним 09/12/15 Срд 16:26:20 #433 №600009 
>>599862
лапшой из условных операторов
Аноним 09/12/15 Срд 16:52:53 #434 №600019 
>>599862
Нахуя тебе шахматы?
BuguRTOS-1.0.0 выпустил уже?
Аноним 09/12/15 Срд 17:59:40 #435 №600056 
>>600007
Опять пытаешься пальцем в небо ткнуть, лол?
ОК, не беда, ты старался. Что интересно, наш с тобою "диалог" натолкнул меня на простое решение, жалко что не програмное.
бывай
Аноним 09/12/15 Срд 20:58:19 #436 №600227 
>>600056
> пальцем в небо ткнуть
в шоколадный глаз тебе ткнул, невежда, несущий хуйню про uart
Аноним 09/12/15 Срд 21:08:09 #437 №600242 
>>600227
давай отвлечемся от склок, подумаем шире.
Что позволяет тебе кукарекать, если в предыдущих 4х ответах вподряд ты обосрался с пруфами?
Имею ввиду, что про уарт ты можешь быть прав пока я, правда, вообще не пойму что ты несешь, вопрос где ты берешь моральные силы.
>в шоколадный глаз тебе ткнул
спс, вот с тебя и польза
Аноним 09/12/15 Срд 21:30:07 #438 №600261 
маняманеврирование киберпетухов
Аноним 09/12/15 Срд 21:34:03 #439 №600269 
> если в предыдущих 4х ответах вподряд ты обосрался с пруфами
> пока я, правда, вообще не пойму что ты несеш
лол
Аноним 10/12/15 Чтв 11:13:31 #440 №600615 
Как в Си обрабатывать исключения? Читал про longjmp, но ничего не понял, можно пример?
Аноним 10/12/15 Чтв 14:16:34 #441 №600690 
>>600615
Если тебе платформозависимо и ОС Windows, то можно __try, __finally, __except.
Аноним 10/12/15 Чтв 22:40:19 #442 №600878 
>>600615
Исключения, которые от процессора - только зависящим от платформы способом (сигналы в никсах, SEH/VEH и их вариации в винде). А симулировать плюсовые исключения можно через через сигналы или через longjmp, да.

jmp_buf buf;
if (setjmp(buf)) {
fprintf(stderr, "SOSNOOLEY\n");
exit(EXIT_FAILURE);
} else {
передаешь buf кому-нибудь, кто в нужное время скажет longjmp(buf, не 0), после чего выполнение продолжится с fprintf выше.
}
Аноним 12/12/15 Суб 03:16:33 #443 №601407 
14498793933280.png
#include <stdio.h>

int checkELF(char fileName)
{
char
buffer[3];
FILE file = fopen(fileName, "rb");
if (file == NULL)
{
printf("chekELF: не могу открыть файл");
return -1;
}
fread(buffer, 1, 4, file);
fclose(file);

printf ("%X \n",
buffer);
if (buffer == 0x7f454c46)
return 1;
else
return 0;
}

int main()
{
char
fileTest = "gzip";

int elf = checkELF (fileTest);

if ( elf == 0 )
printf("Файл не является исполняемым");
else if ( elf == 1 )
printf("Файл является исполняемым");

return 1;
}

Почему при чтении из файла переменная получается побайтово задом наперед?

Вместо gzip можно вставить любой линуксовый бинарник который начинается с ELF.
Аноним 12/12/15 Суб 03:48:01 #444 №601410 
>>601407
Потому что у тебя как и у большинства машинка с little endian, т.е., многобайтовые инты хранятся в памяти, начиная с младшего байта. Либо меняй порядок байтов (__builtin_bswap32 в гцц), либо не выделывайся и сверяй сигнатурки через memcmp.
GCC ASM WOOF 13/12/15 Вск 00:33:16 #445 №602029 
14499559962860.png
Можно-ли использовать компилятор Си, как компилятор ассемблера, вставкой asm? Как-то кажется, что там прикрепятся лишние библиотеки
Аноним 13/12/15 Вск 00:38:20 #446 №602032 
>>601410
>машинка с little endian, т.е., многобайтовые инты хранятся в памяти, начиная с младшего байта
Если старшему байту соответствует старший адрес, то с чего начинается число? Я не совсем понял, как отсчитывается начало числа и его конец.
Аноним 13/12/15 Вск 00:43:22 #447 №602038 
14499566020580.png
>>602032
Я точно не знаю, но есть вроде команд процессору, которые указывают, какой длины число и где оно сидит, соответственно перемещается и либо копируется, либо берётся кусок
Аноним 13/12/15 Вск 00:50:05 #448 №602043 
14499570054780.png
>>602032
Да и вообще, легче на низком уровне Предметы: логика, информатика и схемотехника считывать в двоичном или 16-ричном 8 битном числе всё наоборот, сформулировать легко не смогу, можешь посмотреть, как работает Стек
Аноним 13/12/15 Вск 01:33:53 #449 №602067 
>>602032
Когда процессор читает число, он знает, сколько ему нужно байт, это кодируется компилятором в самой инструкции. Само число в little-endian является суммой из (ptr[byte_index] << (byte_index ∗ 8)).
Аноним 13/12/15 Вск 01:37:54 #450 №602072 
>>602029
Тебе в любом случае нужны "лишние" библиотеки, чтобы получить и распарсить, например, командную строку для main. Можно указать свою точку входа , если почему-то хочется компактности.
Аноним 13/12/15 Вск 05:25:47 #451 №602131 
>>602029
Во-первых, это делает не компилятор, а линковщик.
Во-вторых, не хочешь использовать стандартную библиотеку - есть ключ линковщика -nostdlib, или типа того, пиши свой стартап и наслаждайся.
Аноним 13/12/15 Вск 08:54:50 #452 №602151 
Чому у меня первый ряд не заполняется 1?
Он 0 заполняется, а потом первый ряд не заполняется
int i, j;
int a[8][8];
for (i = 0; i < 8; i++)
{
printf("\n\t");
for (j = 0; j < 8; j++)
{
a[j] = 0;
printf("%2d ", a[j]);
}
printf("\n");
}
for (i = 0; i < 8; i++)
{
a[0] = 1;
}
Аноним 13/12/15 Вск 09:07:54 #453 №602153 
>>602151
А все нашел ошибку. Я сюда еще код с ошибкой скопировал
Аноним 13/12/15 Вск 11:15:44 #454 №602196 
Чому он мне условие игнорирует?
if ((a[t2][t1] == 0 || ((t1==0 || t2==0) && (t1+t2)<=8)) && (t1<9 || t2<9))
{
printf("Тут нет шашки\n");
printf("Выберите шашку (введите число в в формате (x y), без скобок\n");
scanf_s("%d", &t1);
scanf_s("%d", &t2);
if ((a[t2][t1] == 0 || ((t1 == 0 || t2 == 0) && (t1 + t2) <= 8)) && (t1<9 || t2<9))
{
printf("Больше вам играть нельзя, вы слишком много ошибались\n");
break;
}
}
Когда ввожу и t1 и t2 больше 9, он все равно присваивает, а об ошибке не пишет
Аноним 13/12/15 Вск 12:00:39 #455 №602208 
>>602196
сука, научитесь уже пользоваться ideone или тегами code
Аноним 13/12/15 Вск 12:39:51 #456 №602219 
>>602208
Вот пастебин, прости меня.
http://pastebin.com/Br4zNnVB
Аноним 13/12/15 Вск 12:52:50 #457 №602225 
>>602196
>t1<9 || t2<9
>t1<9 && t2<9
Аноним 13/12/15 Вск 13:04:40 #458 №602230 
>>602225
Cпасибо, заодно знак поменять надо
Аноним 13/12/15 Вск 14:34:44 #459 №602310 
Если я вкину вам .exe своих шашек вы скажите что надо доделать?
Аноним 13/12/15 Вск 14:48:01 #460 №602335 
Как в си и возможно ли присваивать элементу массива буквенное значение?
Например как элементу a[1][1] присвоить слово text.
Аноним 13/12/15 Вск 20:28:02 #461 №602682 
>>602335
Сделать массив указателей на char?
Аноним 13/12/15 Вск 20:30:33 #462 №602685 
Дан одномерный массив А неупорядоченных целых чисел. Необходимо переписать в массив В все различающиеся элементы из массива А. Буду благодарен за помощь.

Вот мой код, но программа выводит массив неизменно:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int ifexist(int a, int n, int b)
{
int i, z=0;
for (i = 0; i < n; i++)
if (a == b)
return 1;
else return 0;
}
int main(void)
{
int
A, B;
int i, j = 0, N, k=0;
printf("N=");
scanf("%d", &N);
A = (int
)calloc(N, sizeof(int));
B = (int*)calloc(N, sizeof(int));
printf("Array A: ");
for (i = 0; i < N; i++)
scanf("%d", &A);
for (i = 0, j = 0; i < N; i++)
if (ifexist(B, k, A) == 0)
{
B[j] = A;
j++;
k = j;
}
printf("Array B: ");
for (i = 0; i < k; i++)
printf("%d ", B);
free(A);
free(B);
system("pause");
return(0);
}
Аноним 13/12/15 Вск 20:36:58 #463 №602698 
14500282187600.jpg
Ребята, вкатился в программирование на прошлой недели. Можете накидать хорошо написанного исходного кода реальной программы? Мне нужно изучать язык, а как я понял изучая чужой код один из лучших вариантов.
Аноним 13/12/15 Вск 20:52:33 #464 №602708 
>>602698
Изучай, лол: https://github.com/torvalds/linux
Аноним 13/12/15 Вск 20:57:37 #465 №602713 
>>602708
Оу, ты решил дать мне соурс Linux'a.. Забавно. Но все равно спасибо
Аноним 14/12/15 Пнд 01:37:08 #466 №602914 
Поручили написать калькулятор с учетом приоритетов с помощью бинарного дерева. В алгоритмах ноль, в структурках еще не совсем разобрался. Можете подсказать, как в нем разобраться? тупо списывать код не хочу, намерен сделать сам, но откуда плыть - не знаю
Аноним 14/12/15 Пнд 02:01:26 #467 №602922 
>>602914
Гугли обратную польскую нотацию.
Аноним 14/12/15 Пнд 05:06:58 #468 №602962 
>>602914
Как уже сказали выше, копай в сторону RPN (обратная польская нотация) и алгоритма сортировочной станции.
https://ru.wikipedia.org/wiki/Обратная_польская_запись
https://ru.wikipedia.org/wiki/Алгоритм_сортировочной_станции

Аноним 14/12/15 Пнд 11:16:44 #469 №603006 
>>602962
>>602922
А это точно через польскую решается?
В задании сказано, что написана строка с выражением, его нужно с помощью бинарных деревьев посчитать.
Аноним 14/12/15 Пнд 18:31:06 #470 №603324 
>>585652
Пиздец. Так уёбищно написать — надо постараться, показать всем, какой ты крутой какер. suckless, блядь. Тьфу, блядь.
Аноним 14/12/15 Пнд 21:38:54 #471 №603537 
Сап, посоны.

>char shellcode[]=
“\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58

С помощью чего генерируется такой шеллкод и что это за байты? Почему у них такое обозначение, а не 0x90 и т.п. ? Я изучал программы в олле и видел, как кодируются инструкции хексами. Здесь просто выписаны эти хекс-коды по байтам в том порядке, в каком они расположены в отладчике?
Аноним 14/12/15 Пнд 22:11:48 #472 №603571 
>>603537
> Здесь просто выписаны эти хекс-коды по байтам в том порядке
Да. \x - это способ записи тех же самых хексов внутри строкового литерала (можно было сделать и uint8_t shellcode[] = { 0x31, 0xc0, 0x31, 0xdb ... }, ну ты понел). Пишется на ассемблере, компилируется, проверяется на отсутствие \0 вообще-то, есть автоматические генераторы давно.
Аноним 14/12/15 Пнд 22:13:01 #473 №603574 
>>603537
>С помощью чего генерируется такой шеллкод
Самое простое - ставишь nasm. Пишешь на асме процедурку, удовлетворяющую сишному соглашению о вызовах. Компилишь. Потом скармливаешь объектный файл утилите ndisasm и переписываешь коды. Потом в сином коде делашь указатель на функцию с адресом шеллкода.

>Почему у них такое обозначение
Потому, что байты предствлены в виде одной строки, а \x - это escape-sequence для 16-ричного кода.
Аноним 14/12/15 Пнд 22:13:34 #474 №603575 
>>603574
>в сином коде
сишном
fix
Аноним 14/12/15 Пнд 22:23:57 #475 №603585 
>>603574
>Самое простое - ставишь nasm
А если я пишу на masm32?
Аноним 14/12/15 Пнд 22:25:23 #476 №603586 
>>603571
Алсо, раньше встречал шеллкоды, где после символа x стоит не 2 символа, а 4. В чем разница?

И /r программы для автоматической генерации хексов.
Аноним 14/12/15 Пнд 22:27:55 #477 №603590 
>>603585
Если он может в простые бинарники, то сойдет.
Аноним 14/12/15 Пнд 22:30:23 #478 №603592 
>>603585
>>603590
А если не может, можно просто сделать:
db 'START'
твой код
db 'END'
и хекс-редактором выдрать из объектника код между этими двумя маркерами, не задумываясь, кто там во что может.

>>603586
> после символа x стоит не 2 символа, а 4
Это либо обычный текст: "\xfeee" - это 0xfe, 'e', 'e', либо там не \x был, а \u.
Аноним 14/12/15 Пнд 22:31:54 #479 №603597 
>>603586
> И /r программы для автоматической генерации хексов.
Погугли какой-нибудь payload generator, shellcode collection - вот это все.
Аноним 14/12/15 Пнд 22:32:03 #480 №603600 
>>603592
>db 'END'
Есть var equ $
Аноним 14/12/15 Пнд 22:32:47 #481 №603602 
>>603600
>выдрать из объектника
А, все, понял.
Аноним 14/12/15 Пнд 22:33:28 #482 №603603 
>>603592
>либо там не \x был, а \u.
Да, там был \u. Что это значит?
Аноним 14/12/15 Пнд 22:39:39 #483 №603610 
>>603603
\u -юникодный символ, после u могут идти 4 hex-цифры, то есть, можно указать 16-битный code point ("\u1234" превратится в 0x34, 0x12 на little-endian машине). Есть еще \U и 8 цифр, чтобы указывать 32-битный code point. Но я не знаю, зачем кто-то стал бы хранить шеллкод в юникодной строке.
Аноним 15/12/15 Втр 00:03:41 #484 №603738 
сап. Прошу вашей помощи, аноны. Начал разбираться с shared memory и семафорами и получил задание написать морской бой, где сервер и клиент коммуницируют через ShM. Проблема в том, что не могу нормально синхронизировать. То есть одного игрока с сервером я могу синхронизировать, но как это сделать сразу с двумя. Трудность у меня вызывает то, что battleships-client он один, а игроков двое. Может подкините мыслишку какую-нибудь? Я пока не буду код кидать свой, вдруг я еще что-нибудь надумаю...
Аноним 15/12/15 Втр 00:23:11 #485 №603771 
>>603738
>Начал разбираться с shared memory и семафорами
И до сих пор не дошел до классических алгоритмов?

>https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9F%D0%B5%D1%82%D0%B5%D1%80%D1%81%D0%BE%D0%BD%D0%B0
Аноним 15/12/15 Втр 01:30:13 #486 №603891 
>>603610
нехуя не превратится, ucs4 != utf8
Аноним 15/12/15 Втр 01:33:11 #487 №603894 
>>603738
>и получил задание написать морской бой
хуясе ты там где такие задания получаешь?
Аноним 15/12/15 Втр 01:45:19 #488 №603899 
>>603771
спасибо.
Прочитал сейчас, он вроде как с busy waiting, мне не подходит.
>>603894
загнивающая европа
Аноним 15/12/15 Втр 01:46:42 #489 №603901 
>>603891
Без L"" зависит от компилятора. C L"" будет именно 0x32, 0x12.
Аноним 15/12/15 Втр 03:15:51 #490 №603920 
>>603901
это не имеет никакого отношения к сабжу
Аноним 15/12/15 Втр 03:16:56 #491 №603921 
>>603899
>загнивающая европа
налабай игрулю "подстрели нигера"
Аноним 15/12/15 Втр 03:46:14 #492 №603931 
>>603921
Лол. Ему даже новую игру делать не придется. Дописать "Морской бой" и в нем перед началом каждой партии выводить сообщение, что игрок руководит действиями НАТОвского флота, а его противник - корабли с африканскими нелегалами.
Аноним 15/12/15 Втр 04:13:28 #493 №603937 
>>603931
Выражение "захватил семафор" заиграет новыми красками
>>603738
геропейский еблан, захватывай семафор в клиенте и удерживай, затем отпускай после обработки
Аноним 15/12/15 Втр 04:15:24 #494 №603938 
>>603738
ты точно не нигра?
Аноним 15/12/15 Втр 11:40:22 #495 №604047 
>>603937
Спасибо, но я тебя не обзывал.
Аноним 15/12/15 Втр 13:49:50 #496 №604134 
>>604047
пиздуй нахуй гейропейская шлюха
Аноним 15/12/15 Втр 13:52:32 #497 №604137 
>>604134
не твоя, вот и бесишься
Аноним 15/12/15 Втр 15:35:29 #498 №604235 
Cделал хуйню шашки на си https://github.com/shkolnik3333/132/blob/master/shashki
Обоссыте меня.
Заодно у меня есть задания, посоветуйте материала по работе с файлами, сам я понимаю как сделать это логически, но как написать без понятия.
Аноним 15/12/15 Втр 17:45:57 #499 №604353 
14501907572010.jpg
>>604235
>goto
Аноним 15/12/15 Втр 18:02:55 #500 №604372 
>>604235
>2015
>писать всю программу в 1файле...
>не отделять платформеннозависимый код от переносимого...

Ну обоссали в общем. Зачем тебе такой ебанутый ник?
Аноним 15/12/15 Втр 18:04:20 #501 №604373 
>>604372
> платформеннозависимый код от переносимого
Что это?
> Зачем тебе такой ебанутый ник?
Ху кеарс?
>>604353
Типо зашквар?
Как надо правильно?
Аноним 15/12/15 Втр 18:14:20 #502 №604386 
>>604373
>Как надо правильно?
без goto
мимо
Аноним 15/12/15 Втр 18:15:18 #503 №604388 
>>604386
Конкретней
Аноним 15/12/15 Втр 18:20:09 #504 №604393 
>>604388
хз как. я глянул твой код - это вообще пиздец какой-то.
начиная от
>int tmp, tmp1, i, j, ww = 0, bb = 0, t1, t2, m1, m2, f = 1, mm1, mm2, wf=0, bf=0, z=0;
и заканчивая гирляндой из goto

нахуя ньюфагу си, а.
Аноним 15/12/15 Втр 18:25:17 #505 №604400 
>>604393
> это вообще пиздец какой-то.
Я так вижу, я творец рак-ньюфаг
> нахуя ньюфагу си, а.
Не понел (
Аноним 15/12/15 Втр 18:28:29 #506 №604404 
>>604400
берешь питон, учебник, на двач приходишь через полгода-год. получаешь сисярп и учебник и еще на годик в отшельники. лет-то сколь?
Аноним 15/12/15 Втр 18:29:24 #507 №604406 
>>604404
Не хочу питон.
16.
Аноним 15/12/15 Втр 18:33:13 #508 №604414 
>>604406
вся жизнь впереди. вузик не проеби и все будет.
а с этим ты мне меня напомнил, когда я в 16 лет захотел овладеть программированием и купил самоучитель по ассемблеру, бгг.
Аноним 15/12/15 Втр 18:34:12 #509 №604416 
14501936521370.jpg
>>604235
И ещё.
1. Чтобы занулить массив, достаточно memset(a, 0, sizeof(a)); без двойного цикла.
2. char a[9][9]; хуже чем int a[9][9], а если числа не могут быть отрицательными, то unsigned. Хотя что то, что другое из разряда байтоёбства и экономии тактов.
3. i % 2 - это ты определяешь чётное или нечётное число у тебя? i & 1.
4. Не лучше ли вместо 8 циклов инициализации сделать один статический массив и скопировать его на место 'a'?
static const char init_a[9][9] =
{
    {0, 1, 2, 3, 4, 5, 6, 7, 8},
    {0, 1, 0, 1, 0, 1, 0, 1, 0},
    .....
};
memcpy(a, init_a, sizeof(a));

5. Разноси на функции. Не понадобится goto, проще будет разобраться самому. У тебя уже есть потенциальные места для отдельных функций - метки для goto.
6. scanf_s стоит проверять на возвращаемое значение и проверять t1, t2 перед их использованием, иначе можно вылететь за пределы массива.
7. Не объявляй все переменные в одной куче.
int tmp, tmp1, i, j, ww.....
ww, bb, t1, t2 и некоторые другие у тебя используются только в цикле, там их и объявляй. Старайся объявлять переменные как можно ближе к месту использования.
8. vibor, hod и прочее. Только английский, только хардкор.
9. Строка 156 и ниже. Как понимаю, одно только условие истино? Используй else if, чтобы не делать бесполезные проверки.
10. Строка 156 и 160 - одинаковое условие, во втором случае наверное m2 > t2.
Логику не смотрел, может там что есть ещё. А так - всё норм для начинающего.

Стив Макконнелл "Совершенный код". Читай.
Аноним 15/12/15 Втр 18:43:34 #510 №604434 
>>604414
Я в шараге, 2 курс.
>>604416
> 1. Чтобы занулить массив, достаточно memset(a, 0, sizeof(a)); без двойного цикла.
Принял
> 2. char a[9][9]; хуже чем int a[9][9], а если числа не могут быть отрицательными, то unsigned. Хотя что то, что другое из разряда байтоёбства и экономии тактов.
Изначально было инт, но когда хотел буквы вместо цифр переделывал в чар, убрать назад забыл.
> 4. Не лучше ли вместо 8 циклов инициализации сделать один статический массив и скопировать его на место 'a'?
Принял
> 5. Разноси на функции. Не понадобится goto, проще будет разобраться самому. У тебя уже есть потенциальные места для отдельных функций - метки для goto.
Хотел сделать функциями, только начал, как сразу закончил, не хватило навыка, вроде написал, а что возвращать? А может вообще не нужно возвращать, а нужен воид, А тут я уже не понимаю мне же нужно что-то принимать, а воид ничего не дает и прочие бредни сумашедшего.
> 6. scanf_s стоит проверять на возвращаемое значение и проверять t1, t2 перед их использованием, иначе можно вылететь за пределы массива.
Проверяется же
> if ((a[t2][t1] == 0 || ((t1 == 0 || t2 == 0) && (t1 + t2) <= 8)) || (t1>9 || t2>9))
Или я тебя не правильно понял?
> 7. Не объявляй все переменные в одной куче.
Принял
> 8. vibor, hod и прочее. Только английский, только хардкор.
Какая разница? Ну если правильней будет choose, move, end, то хорошо.
> 9. Строка 156 и ниже. Как понимаю, одно только условие истино? Используй else if, чтобы не делать бесполезные проверки.
Вроде если я сделаю if else, то тогда может ошибка быть, например
if ((m1 > t1) && (m2 < t2))
a[m2 + 1][m1 - 1] = 0;
else
А тут в елсе у меня подразумевается 3 возможных варианта.
Или я ошибаюсь?
> 10. Строка 156 и 160 - одинаковое условие, во втором случае наверное m2 > t2.
И правда, не заметил. Спасибо?
> Стив Макконнелл "Совершенный код". Читай.
Скачаю, почитаю, только один вопрос, тяжело для осознания?
Аноним 15/12/15 Втр 19:09:10 #511 №604464 
14501957501180.jpg
>>604434
>а что возвращать
Может и ничего не надо, передаёшь массив в функцию и изменяешь там, как надо. Надо по контексту смотреть.
>Проверяется же
Если ты изначально задашь t1 и t2 больше 9 или меньше 0, то у тебя будет вылет за пределы массива. Надо что-то типа:
if (scanf_s("%d", &t1) != 1 || scanf_s("%d", &t2) != 1 || t1 < 0 || t1 > 9 || t2 < 0 || t2 > 9)
{
    //error
}
else
{
    // нормальное выполнение
}
Или задавать t1 и t2 беззнаковыми, тогда проверка t1 < 0 будет не нужна.
>Вроде если я сделаю if else, то тогда может ошибка быть
Там два взаимоисключающих условия, как мне показалось. Строка 156 и 158, например. Только одно условие может выполниться, тогда лучше записать
if ((m1 > t1) && (m2 < t2))
{
    a[m2 + 1][m1 - 1] = 0;
}
else if ((m1 < t1) && (m2 < t2))
{
    a[m2 + 1][m1 + 1] = 0;
}
Или даже объединить, когда m1 > t1 и m1 < t1
if (m1 > t1)
{
    if (m2 < t2)
    {
        a[m2 + 1][m1 - 1] = 0;
    }
    else if (m2 > t2)
    {
        a[m2 + 1][m1 + 1] = 0;
    }
}
else if (m1 < t1)
{
    ....
}
А ещё лучше вынести if (m2 < t2) и else if (m2 > t2) в отдельную функцию. Надо разбираться, что ты там делаешь, так бегло не поймёшь, как лучше.
>тяжело для осознания
Это не учебник по ЯП, там написано, как нужно писать код.
Аноним 15/12/15 Втр 20:05:10 #512 №604518 
>>604373
>#include "stdafx.h"
>system("color 97");
>setlocale(LC_ALL, "rus");
>system("pause>void");
Это платформенозависимое говно. Его надо отделять от всего остального.

Ну и до кучи, тебе бы разбить код на функции,
отделить логику работы игры от интерфейса пользователя, ну и венгерская нотация таки не помешает. Если какой-то кусок кода повторяется несколько раз, то его точно надо сделать функцией.
Аноним 16/12/15 Срд 14:25:47 #513 №605036 
>>604235
>Обоссыте меня
ни слова больше, обоссал
Аноним 17/12/15 Чтв 17:37:45 #514 №605985 
>>604388
Смотри конечные автоматы(fsm, fst и прочее).

>>604393
> нахуя ньюфагу си
Чтобы пользоваться крестовыми заголовками и писать в VC++.
Аноним 17/12/15 Чтв 18:10:02 #515 №606024 
где его сейчас используют?
Аноним 17/12/15 Чтв 21:20:34 #516 №606296 
Требуется написать функцию, определяющую наличие повторяющихся строк в массиве и возвращающую их номера. Буду благодарен за помощь.
Аноним 17/12/15 Чтв 21:21:05 #517 №606297 
>>606296
в ДВУМЕРНОМ массиве, забыл уточнить
Аноним 19/12/15 Суб 16:13:05 #518 №607463 
Хочу прочитать текстовый файл, в качестве примера сам исходник, в память. Создаю динамический двухмерный массив и начинаю читать, но программа сегфолтится после первой прочитанной строки, я так понял на realloc. Помогите понять где ошибка.
http://ideone.com/1hmIIZ
Численные методы поцоны. Метод половинного деления(дихотомии) Звездныевоиныевривер 19/12/15 Суб 21:09:45 #519 №607703 
14505485852440.png
Задаешь типа arcsin(числорад) и выдает тебе ответик чему равен арксинус, снизу функшин, все работает збс, НО, из-за того что используется сравнение по абсолютной ошибке
while (abs(b - a) > 0.0001) происходит FAIL!!!! при arcsin(1e-4 ) например, ПРОШУ ГОСПОДДВАЧА хелпаните


float pd(float n) {
float a = -PI / 2;
float b = PI / 2;
float s = 0;
while (abs(b - a) > 0.0001)
{
s = (a + b) / 2;
if ((sin(a) - n)*(sin(s) - n) > 0)
a = s;
else
b = s;
}
return s;
}


Аноним 19/12/15 Суб 21:10:57 #520 №607706 
>>607703
float pd(float n) {
float a = -PI / 2;
float b = PI / 2;
float s = 0;
while (abs(b - a) > 0.0001)
{
s = (a + b) / 2;
if ((sin(a) - n)*(sin(s) - n) > 0)
a = s;
else
b = s;
}
return s;
}


лол
Аноним 19/12/15 Суб 22:48:11 #521 №607761 
Анон, помоги.
Требуется передать 2D массив в функцию вместе со всей информацией, которая в нем хранится. Как это сделать? в гугле одна хуйня сириусли
Аноним 19/12/15 Суб 22:58:32 #522 №607765 
>>607761
Да массив чаров, статический.
Аноним 20/12/15 Вск 01:11:22 #523 №607831 
>>607761
Бамп вопросу.
Аноним 20/12/15 Вск 01:41:37 #524 №607853 
>>607831
Передай указатель на него, используй как одномерный ptr[y * cols + x]. Или можешь в структурку запихать и передавать указатель на структурку.
Аноним 20/12/15 Вск 02:50:03 #525 №607880 
14505690037500.png
>>579550 (OP)
Аноны, помогите пожалуйста, вчерашнему школьнику отладить функцию удаления нулевого столбца из массива:
int del_zero(inta, int n, int m)
{
int j,i,jj=0,k=0;
for (j = 0; j < m; j++)
{
for (i = 0; i < n; i++)
if ((
(a+im+j) == 0))
{
k++;
for (jj=j;jj<m-1;jj++)
for(i=0;i<n;i++)
(
(a+im+jj))=((a+i*m+(jj+1)));

}
}
return k;
}
Выводит пикрелейтед (почему-то выводит последний элемент предшествующей строки первым элементом новой)
Аноним 20/12/15 Вск 08:31:22 #526 №607935 
14505894829240.png
>>607880
Макаба режет код - ничего не разобрать.

http://pastebin.com/71Sq1LzB
Аноним 20/12/15 Вск 08:55:53 #527 №607937 
14505909536640.png
>>607463
Проще же можно: выделить кусок память под весь файл и прочитать его за раз. Дальше парсишь его содержимое и не забываешь, что строка на `\0` не кончается.
http://pastebin.com/gtSzqGb4
Аноним 20/12/15 Вск 12:29:55 #528 №608015 
перекат пилите, за 500 давно перевалило
Аноним 20/12/15 Вск 17:54:06 #529 №608216 
>>607937
Я уже написал велосипед так, в том исходнике не хватало malloc на строки , ну и ошибок с индексами много.
Строки кончаются на '\n', конец файла на 25, не знаю как это выглядит с точки зрения про программирования, но чувствую что программа не будет работать с другими кодировками. Ладно, теперь у меня в памяти двумерный массив символов [строка][символ]. Как написать функцию очистки ?
void FreeRamFromScript (char script_in_ram)
{
unsigned int count_strings = CountStringsInRam (script_in_ram);
unsigned int i;
for (i=0; i++; i<count_strings);
{
free(script_in_ram);
}
free(script_in_ram);
}
Такая функция не работает, видимо потому что она , как я думаю, делает копию из переданного массива. Как правильно в нее передать массив?
Аноним 20/12/15 Вск 17:58:56 #530 №608222 
>>608216
>конец файла на 25
На десятичное 255
Аноним 20/12/15 Вск 22:27:16 #531 №608425 
>>607935
Сорри, не правильно сформулировал задачу нужно, чтобы функция удаляла в матрице столбцы, в которых есть 0.
Вот мой код: http://pastebin.com/FnYB1kk0
Он удаляет столбец с нулём, но еще и копирует последний столбец.
Аноним 21/12/15 Пнд 15:53:58 #532 №608833 
Анон, я скриптокодер. Хочу в С, для повышения скилла и, может, по работе пригодится: плагины для своих язычков писать. Скажите, сильно ли сложно вот это всё байтоёбство, указатели и проч.? У меня есть шанс?
Аноним 21/12/15 Пнд 21:23:55 #533 №609166 
>>608833
нет
Аноним 21/12/15 Пнд 22:46:01 #534 №609217 
>>608833
Если соберешься учить, отталкивайся от того, что сишечка - это кроссплатформенный ассемблер с синтаксическим сахаром. Тогда будет несложно.
ПЕРЕКОТ Аноним 22/12/15 Втр 01:55:54 #535 №609377 
Ну раз опять никто не запилил ПЕРЕКАТ, придется мне сделать это:

>>609376 (OP)
>>609376 (OP)
comments powered by Disqus

Отзывы и предложения