Программирование


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

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
329 29 124

C Programming Language #45 /clang/ Аноним # OP 03/05/19 Птн 13:26:21 13933951
C Programming L[...].png (78Кб, 792x1023)
792x1023
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

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

Что читать:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- №42: https://arhivach.ng/thread/438066/
- №43: https://arhivach.ng/thread/441686/
- №44: https://arhivach.ng/thread/444396/ >>1383604 (OP)
Аноним 03/05/19 Птн 13:46:34 13934012
Вкатился, снова.
Аноним 03/05/19 Птн 14:16:59 13934123
этот си ваще реально полностью выучить
Аноним 03/05/19 Птн 14:17:15 13934134
>>1393385
В случае с файлом на диске буферизация нужна, чтоб диск не дергался за каждым putchar. Вывод копится в оперативке и большими кусками сливается на диск. А вот когда это консоль, то молчать, пока не накопится 4 килобайта текста, неприемлемо, т.к. на твои глаза инфа должна поступать сразу для нормальной интерактивной работы. Можно было бы немедленно выводить каждую букву, но это, хоть и не диск, тоже тормозит работу, поскольку системный вызов для вывода данных куда-либо за пределы оперативки процесса (в твой терминал, который есть другой процесс) - более сложная процедура, чем просто отложить в буфер. Компромиссное решение - выводить каждую строчку, то есть делать fflush по каждом \n. Но иногда программа хочет вывести строчку, не "нажимая ENTER" в конце, например, чтоб оставить мигающий курсор за двоеточием, и ты красиво впечатал свое имя. Логично, что "Type your name: _" должно отобразиться сразу, и для такого распространенного случая предусмотрен дополнительный вызов fflush при входе в scanf.

>>1393388
хз, что кроме K&R посоветовать... Вкатывался после Паскаля на уровне мегамейнов (дополнительные процедуры не использовал почти).
Аноним 03/05/19 Птн 14:19:56 13934145
>>1393412
все правила языка и функции маленькой стандартной библиотеки - нехуй делать. Кодить на уровне разработчика операционных систем, создавая макросами абстракции помудренее C++ - искусство, которому можно посвятить десятилетия.
Аноним 03/05/19 Птн 14:26:08 13934196
>>1393385
>достаточно ли пока понимания этих функций по принципу черного ящика
с головой
Аноним 03/05/19 Птн 14:57:49 13934357
>>1393412
Было бы учить чего, вполне реально. Вот насчет С++ можно подумать.
Аноним 03/05/19 Птн 19:20:16 13935098
>>1393395 (OP)
Пытаюсь отправить имя файла по сокету.

>char *filename = malloc(header.nSize+1);
>recv(sock, filename, sizeof(filename), 0);
>printf("Filename:%s", filename);

Отправляю: hello.exe\x00
Выводит: hello.exPо
Аноним 03/05/19 Птн 19:23:58 13935139
Немного идиотских вопросов. Есть две переменные:
char ★string;
char ★★tokens;

Обем память выделяется динамически.

tokens[0] указывает на начало string. Если я делаю free(tokens), то не освободится ли случаем память, занятая под string? Возникло подозрение, что именно так и происходит, поскольку на освобождении string после освобождения tokens программа падает.
Аноним 03/05/19 Птн 19:41:49 139352010
>>1393513
> то не освободится ли случаем память, занятая под string
Нет, освобождается только то, и только столько, сколько было выделено соответствующим malloc(). Т.е., если ты сделал string = malloc(strlen("dupa") + 1), то free() освободит только те пять байтов, которые выделены, и только тогда, когда аргумент указывает на начало блока (т.е., free(string + 1) нельзя).

Другое дело, если бы у тебя было tokens = malloc(num_tokens ★ sizeof(★tokens) + string_table_length); и string = (char ★) &tokens[num_tokens] (т.е., после массива токенов начинается таблица строк). Тут ты выделил память под обе сущности одним блоком, одним же free() и должен освобождать, а free(string) будет багом.
Аноним 03/05/19 Птн 19:49:45 139352411
>>1393509
> sizeof(filename)
sizeof(char *) это константа, в 64-битной системе оно равно 8. Ты получаешь 8 валидных байтов и мусор. Как думаешь, может быть, здесь есть какая-то связь?
Аноним 03/05/19 Птн 21:20:26 139355512
>>1393520
Хм, спасибо. Ладно, пусть пока память подтекает, не критично.
Аноним 04/05/19 Суб 10:31:43 139372313
ebalo.png (524Кб, 431x677)
431x677
>>1393524
sizeof исправил, указал просто 9.
вывел: hello.exe

Причем если я не использую malloc,
>char filename[header.nSize];
все выводится нормально.

Попробовал в malloc тоже передать просто 9, результат тот же самый - выводит мусор.
Аноним 04/05/19 Суб 14:31:57 139381514
>>1393723
Охуеть, правда? Размер массива равен размеру массива, а размер указателя - размеру указателя!
Аноним 04/05/19 Суб 17:50:07 139390215
393E3DC9-9DFB-4[...].jpeg (69Кб, 600x450)
600x450
>>1393815
Ладно я разобрался, вот еще вопрос.
После загрузки я должен выполнить файл (CreateProcess()) передав ему 1 аргумент: GetModuleFileName()

Как я узнал из документации, передать аргументы можно так

>CreateProcess(filename, args)

По документации, тип 1-й переменной должен быть LPCSTR, то есть, как я понимаю, обычный char (тип буфера с именем файла) проканает.
Тип 2-й переменной - LPSTR.
Как раз этот тип возвращает GetModuleFileName согласно документации.

То есть по моим расчётам проканает запустить процесс с типом имени char и аргументом типа LPSTR ?
Аноним 04/05/19 Суб 18:04:05 139391116
>>1393902
> CreateProcess(filename, args)
Кто тебе такую хуйню сказал? Там в три раза больше аргументов. И там два способа. Ты можешь сделать либо:
CreateProcess("foo.exe", NULL, остальные аргументы);
либо:
CreateProcess(NULL, "foo.exe arg1 arg2 итд", остальные аргументы);

> LPCSTR
> LPSTR
На самом деле там LPCTSTR и LPTSTR соответственно. Если у тебя не выставлен дефайн UNICODE, то первое const char ∗, второе просто char ∗, но передавать char ∗ (а также всякие массивы char) можно в оба. Если выставлен UNICODE, то это const WCHAR ∗ и WCHAR ∗ соответственно, а для преобразования из char ∗ понадобится временный буфер и MultiByteToWideChar().

> этот тип возвращает GetModuleFileName согласно документации
Он DWORD возвращает, а вот массив из char/WCHAR, который ты ему передаешь, а он заполняет, ты можешь передать и в CreateProcess тоже, да.
Аноним 04/05/19 Суб 18:25:44 139392517
>>1393911
>Кто тебе такую хуйню сказал
docs.microsoft.com

Аргументов больше, я знаю, я сократил, зачем мне в примере писать все NULL/0/FALSE ?

>CreateProcess(NULL, "foo.exe arg1")
То есть мне надо будет конкатенацию filename и буфера GetModuleFileName делать ?

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

В общем надо имя файла из char конвертировать в wchar ?
Аноним 04/05/19 Суб 19:37:10 139397918
Безымянный.png (52Кб, 697x541)
697x541
А дальше что?
Аноним 04/05/19 Суб 19:37:41 139398019
>>1393925
Ты вообще учил С? Вон в шапке полно книг, за неделю все прочитаешь и глупые вопросы сами собой отпадут.
Аноним 04/05/19 Суб 19:58:56 139399820
Приветствую экспертов.
Есть ли простое правило/формула по представлению/разиминование указателей? Для начала частный случай многомерных массивов.

Спасибо.
Аноним 04/05/19 Суб 20:34:39 139402321
>>1393998
>многомерных массивов
Допустим, есть массив a[m][n]. Чтоб нормально использовать указатель за пределами контекста, а не писать a[m*i+j], в функции, например, которая этот массив принимает, надо объявить локальный указатель на последовательность массивов соответствующих размерностей (указать все, кроме старшей, компилятор должен знать ширину шага, а насколько далеко заходить - твоя забота):
void f(int ∗a, int n, int m)
{
int (∗a_)[m] = a;
// вуаля, арифметика индексации автоматизирована, можно обращаться к элементу ij, как a_[j], передавать куда-то указатель на начало i-строки массива, как a, и т.д.
}
Аноним 04/05/19 Суб 20:37:21 139402522
>>1393998
>>1394023
бля, борда [ i ] схавала, ща пофиксю
>многомерных массивов
Допустим, есть массив a[m][n]. Чтоб нормально использовать указатель за пределами контекста, а не писать a[m*i+j], в функции, например, которая этот массив принимает, надо объявить локальный указатель на последовательность массивов соответствующих размерностей (указать все, кроме старшей, компилятор должен знать ширину шага, а насколько далеко заходить - твоя забота):
void f(int ∗a, int n, int m)
{
int (∗a_)[m] = a;
// вуаля, арифметика индексации автоматизирована, можно обращаться к элементу i j, как a_[ i ][ j ], передавать куда-то указатель на начало i-й строки массива, как a[ i ], и т.д.
}
Аноним 04/05/19 Суб 20:38:36 139402623
Аноним 04/05/19 Суб 21:58:37 139408924
Анон из предыдущего треда, у которого программа сожрала съела 1.8 гигабайт памяти и ей перестала выделяться память. Переписал все используемые объекты на динамическую память, и о чудо - на тех же данных занято всего 12.5 мегабайт! Осталось найти причину SIGTRAP при попытке освободить временный буфер, и тогда и утечка памяти уйдет.
Аноним 04/05/19 Суб 22:27:05 139411525
>>1394089
Не помню точно, о чем шла речь в прошлом треде, но у меня как-то тоже текла память, и я просто дописал вызов malloc_trim(0) после всей содомии с тысячекратными malloc()/free(), и гигабайтов мусора как не бывало. Процесс культурно продолжил жить, уложившись обратно в свои пару мегабайт.
Аноним 04/05/19 Суб 22:53:59 139414226
Безымянный.png (81Кб, 692x366)
692x366
Почему запрашивает 2 значения? Когда должно только Х запрашивать?
Аноним 04/05/19 Суб 23:01:37 139414727
Аноним 04/05/19 Суб 23:35:27 139420328
>>1394147
Он не запрашивает, а просто переводит курсор на новую строку и не воспринимает то что я там ввожу??
Аноним 05/05/19 Вск 02:24:02 139431029
>>1393925
> То есть мне надо будет конкатенацию filename и буфера GetModuleFileName делать ?
А зачем тебе вообще GetModuleFilename()? Ты себя запускать собрался? Если нужны аргументы командной строки - да, конкатенация, и про кавычки вокруг пути с пробелами не забудь. Если аргументов не передаешь, то просто положи имя исполняемого файла в первый параметр, а командную строку система сама дорисует.

> В общем надо имя файла из char конвертировать в wchar ?
Если нужен русский, а локаль в системе не русская - да, надо конвертировать. Вообще, в 2019 давно надо полностью юникодные программы писать.
Аноним 05/05/19 Вск 18:23:44 139456630
>>1394310
Не себя, а передать путь до себя в кач-ве аргумента.

>давно надо

Я бы рад, но вот не очень понимаю даже самые простые вещи.
Где бы почитать о win32api и юникоде.
Аноним 05/05/19 Вск 19:41:21 139460831
А как делают прогрессбар в консольке что он в одной строке отображается?
Аноним 05/05/19 Вск 19:44:45 139461032
Аноним 06/05/19 Пнд 00:41:07 139468533
>>1394566
1) MSDN
2) google: oldnewthing unicode _unicode и дальше там же.

>>1394608
> прогрессбар в консольке
for (size_t i = 1; i <= 11; i++) { printf("%.*s\r", i, "xxxxxxxxxx\n"); sleep(1); } // Ну должно работать, поправишь если что.
Аноним 06/05/19 Пнд 00:47:50 139468834
>>1394608
Я дергал WinAPI, поскольку писал под Шиндовс. Нахуй это прогрессбар не нужен был, но все же
Аноним 06/05/19 Пнд 02:45:45 139470235
С вопросами про configure и кросстулчейны это к вам?
Аноним 06/05/19 Пнд 08:41:43 139472736
Програмач, смотрел исходники дума на гитхабе.
И там программки скомпилены в .с и .h, я правильно понимаю что .h это хедер и это сделано чтобы удобнее было работать с большим проектом?
Аноним 06/05/19 Пнд 08:51:57 139473137
Какой короткий код с ошибкой можно на футболку нанести чтобы у каждого программиста бомбило бы с этой ошибки?
Аноним 06/05/19 Пнд 10:17:33 139475038
>>1394685
Это конечно безусловно полезно и интересно, только вот мне надо всего 1 функцию использовать, как я предполагаю MultiByteToWideChar.
И вот ради нее убиться в чтение и понимание глубинных особенностей работы С с winapi ниахота
Аноним 06/05/19 Пнд 10:18:28 139475139
Аноним 06/05/19 Пнд 10:38:21 139475740
Аноним 06/05/19 Пнд 10:50:39 139475941
>>1394731
Может просто Hello world.
Аноним 06/05/19 Пнд 11:58:57 139478042
Аноним 06/05/19 Пнд 16:17:31 139481943
Ананасы, а какие основные навыки сейчас требуют у эмбеддед синьеров-помидоров с 4к+ зарплатой?
Аноним 06/05/19 Пнд 16:53:46 139482144
15481484398060.jpg (34Кб, 612x383)
612x383
Значит так блять !

Пример 1: https://ideone.com/XpUR9T

Отрабатывает идеально, никаких [warning], аргументы передает правильно, файл запускает.

Пример 2: https://ideone.com/2leU66

Все тоже самое за исключением того, что имя я получаю через сокет, отправляю сервером на питоне, кодирую в UTF-16 перед отправкой, что соответствует типу wchar_t.

Error code:2

Что означает файл не найден.

К слову, выводить полученное имя он тоже не выводит, однако вот если имя передать в функцию CreateFileW, файл создает с правильным именем.
06/05/19 Пнд 18:59:25 139484145
>>1394731
> код с ошибкой можно на футболку
void main(void), но можешь вот у анона взять:

>>1394821
> Пример 1
> wcsncat
Инстант фэйл. У тебя в буфере мусор, к чему оно там сделает cat, зависит от погоды на Марсе. Алсо, кавычки нужны вокруг имени программы: CreateProcess(NULL, "C:\\Program Files\\1.exe arg1", ...) будет пытаться запустить C:\Program.

> Пример 2
> recv(sock, name, 14, 0);
Инстант фэйл. name указывает в небеса.

Короче, вон там в шапке есть Прата, есть K&R. Прочитай любую, чтобы хотя бы слегка понимать язык, на котором пишешь. Заебал уже.
Аноним 06/05/19 Пнд 19:47:21 139485446
>>1394731
#define swap(a,b) {typeof(a) c = a; a = b; b = c;}
...
swap(c,d);
Аноним 06/05/19 Пнд 21:36:27 139489247
Аноним 06/05/19 Пнд 21:39:04 139489348
ewgeg
Аноним 06/05/19 Пнд 21:56:12 139490049
>>1394892

char *helloworld = "Hello, World!";
fwrite(helloworld, sizeof(helloworld), 1, stdout);

$ ./laba1
Hello, W$

/∗ C sucks! ∗/
Аноним 06/05/19 Пнд 22:01:45 139490450
Бля, какое же С обосанное говнище. 250 строк кода, чтобы написать обоссанные Крестики-нолики с возмжностьюю загрузки и сохранения, 250! Что-нибудь вообще серьезное на этом говне мамонта можно писать или только дрочиться со таким говном, тратить хуеву тучу строк кода, чтобы тебе в итоге по губам поводили?
Аноним 06/05/19 Пнд 23:05:16 139492251
)
06/05/19 Пнд 23:40:38 139493452
>>1394904
Пиши в одну строчку, кто ж тебе мешает?
Аноним 07/05/19 Втр 00:07:19 139494553
>>1394934
Душный еблан, ты? Ты понял, что я имел ввиду
Аноним 07/05/19 Втр 00:38:30 139495854
>>1394904
ты просто писать не умеешь
Аноним 07/05/19 Втр 01:12:28 139497455
>>1394958
Я имел ввиду то, что в современных реалиях С - никчемное говно, требующее дохуя, а дающее нихуя.
Аноним 07/05/19 Втр 01:28:54 139497556
>>1394974
C не подлежит оценке.
07/05/19 Втр 01:35:13 139497857
>>1394945
Понял. И ты тоже понял. Используй либы, будет как на других языках, вплоть до: int main(void) { return tic_tac_toe_from_library(); }. Си в этом плане ничем не отличается от какого-нибудь жаваскрипта, ты можешь писать сам, а можешь скатиться до npm install isOdd ой, у нас же нет npm... к счастью.
Аноним 07/05/19 Втр 03:47:24 139499258
>>1394904
Нихуя питонодети ахуели, 250 строк кода и уже мозг закипает. У меня на хеллоуворлды по 2-5к строк уходит. Короче уебывай из треда.
Аноним 07/05/19 Втр 03:51:36 139499459
>>1394904
250 это немного особенно если там алгоритм нормальный который не выиграть. я на джс (на жиквери лол) писал в 350+ строк не считая штмл и ксс
Аноним 07/05/19 Втр 05:50:04 139500360
14812052507530.jpg (82Кб, 684x660)
684x660
>>1394994
> крестики-нолики
> не выиграть
Аноним 07/05/19 Втр 05:59:49 139500561
>>1395003
в смысле у которого не выиграть, ничья или ты проигрываешь
Аноним 07/05/19 Втр 07:33:21 139501362
>>1394904
Кармак смог написать свой чудесный идтек1, а ты обычный вкатчик-неосилятор. Возвращайся на завод с которого ты вылез.
Аноним 07/05/19 Втр 08:47:32 139502763
>>1395013
Ну ты сравнил, конечно. Кармака (у которого до идтека за спиной тонны опыта) и обычного Васяна.
Мимо
Аноним 07/05/19 Втр 09:45:39 139504064
>>1395027
Именно. Обычным васянам в программировании делать нечего, их там никогда не было, пока не появился быдлоскриптинг, куда они и набежали, по ошибке названный тоже "программированием". Но си это не быдлоскрипт, поэтому отсеивает таких залетушек на ура.
Аноним 07/05/19 Втр 09:49:04 139504265
Аноним 07/05/19 Втр 10:25:16 139505466
>>1395040
Когда компьютеры были большие, а программы маленькие...
Аноним 07/05/19 Втр 13:13:18 139514767
>>1395040
Все задачи в К&P порешал?
Аноним 07/05/19 Втр 13:14:25 139514968
Аноним 07/05/19 Втр 13:26:25 139515769
>>1395149
Ты нереально крут, завидую тебе. Ты их по главам делал, много времени ушло?
Аноним 07/05/19 Втр 13:31:51 139516270
>>1395157
>по главам
В основном.
>времени
Много, почти месяц.
Аноним 07/05/19 Втр 13:33:37 139516671
>>1395157
Только тупое быдло вместо того, чтобы делать самому слушает чужие саксесс-стори. Да, именно от слова "сак", ты.
Аноним 07/05/19 Втр 13:37:19 139517072
>>1395166
Да я только начал, можешь посоветовать для совсем нюфагов К&P нормально или с чего то попроще можно начать?
Аноним 07/05/19 Втр 13:46:53 139518373
>>1395170
Ты что дурак конечно нет! Нужно начинать с ассемблера, электроники и устройства компьютера. Пока не понимаешь как работает 086, даже не притрагивайся к си, ну а потом эээ ну короче на кодварс найдешь все отьебись понял
Аноним 07/05/19 Втр 14:17:11 139521274
>>1395183
Вот этот дебил всё правильно сказал. Начинать нужно с ассемблера, но не современного под винду, а старого под какой-нибудь спектрум или просто виртуальный процессор, я кажется читал подобную книжку. Тогда и железо и код были просты и понятны, а не засраны хуетой как сейчас, поэтому понять принцип работы компьютера легко и удобно. И это понимание необходимо, без него сразу нахуй в питон с жаюлскриптом можешь следовать
Аноним 07/05/19 Втр 14:21:01 139521475
>>1395212
>и железо и код были просты и понятны
Вообще-то чистый х86 реального режима очень простой - достаточно не лезть в ссе и прочее.
Сегменты можно просто игнорировать.
Аноним 07/05/19 Втр 14:40:49 139522676
>>1394904
Нахуя тебе в крестиках ноликах сохранение?
Аноним 07/05/19 Втр 15:01:12 139524877
>>1395212
Это была просто жирнота, дебилоид. На самом деле для си нихуя из этого не надо, т.к. это такая же высокоуровневая абстрактная параша, как и любой современный язык для домохозяек. И не надо отправлять людей куда-то, когда ты сам не понимаешь чем отличается скрипт от компилируемой сишки.
Аноним 07/05/19 Втр 15:04:08 139525178
>>1395248
Ты разговариваешь с жиром, олигофрен.
Аноним 07/05/19 Втр 15:10:16 139525779
Даёшь in-order процессоры в массы!
Аноним 07/05/19 Втр 15:12:39 139526180
>>1395183
Гукин Д.
C для чайников
C этого кто нибудь начинал?
Аноним 07/05/19 Втр 15:54:54 139527781
>>1395261
Вот ещё такую
Дейтел П.Дж., Дейтел Х.М.
Как программировать на С
вроде в начале общие сведения о компьютерах идут.
Аноним 07/05/19 Втр 15:57:53 139527982
Аноним 07/05/19 Втр 16:18:41 139528883
>>1395279
Не слишком сложно, для начинающих пойдет?
Аноним 07/05/19 Втр 17:21:48 139530584
Аноним 07/05/19 Втр 18:42:38 139533385
15462669335990.jpg (52Кб, 383x331)
383x331
Сап.

Объясните пожалуйста что это за собачья хуйня ?

На C/winsock написана простейшая конструкция называемая клиентом, которая ожидает получения wchar_t массива.

>wchar_t chlen[14];
>recv(sock, (char*)chlen, 14, 0);

На питоне написан сервер который отправляет по сокету массив символов закодированных кодировкой UTF-16, что соответствует wchar_tПруфы: https://docs.microsoft.com/ru-ru/cpp/cpp/char-wchar-t-char16-t-char32-t?view=vs-2019

>s.send(string.encode("UTF-16")

Стандартной функцией prnitf с форматной строкой %ws принятый массив не выводится.
Однако если попытаться создать файл с массивом в качестве имени - файл создается без каких-либо проблем, вообще без проблем, даже если точно такой же файл уже есть, он создает два файла с одинаковыми именами.

При пристальном наблюдении, становится видно что разницу между UTF-16 и UTF-8 в питоне составляет так называемый символ BOM с кодом 65279.

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

В общем, кто может внести хоть какие-то здравые мысли по этой хуете - прошу помочь.
Аноним 07/05/19 Втр 19:07:30 139534686
Аноним 07/05/19 Втр 19:15:40 139535287
>>1395333
>BOM
Это для птдоров древний высер микромофта, нормальные люди его не используют, естемтвенго и принтв о нем не знает, чекай первые 2 байта и выводи с стретьего если твой питухоновский сервер зашкварен.
Аноним 07/05/19 Втр 19:16:22 139535388
>>1395346
Нет, скажем так проблема вывода далеко не самая главная, что делать с ебучим BOM ?
Мне два одинаковых файла как бы не очень нужны, это конечно прикольно, можно клона какого-нибудь cmd.exe создать, но как вообще можно создать какое-то надежное сообщение между по сокетам между путоном и Си если приключаются вот такие истории ?
И нагуглить нихуя толком по wchar_t в питоне не могу, идея закодировать сама пришла в голову, но судя по работоспособности - идея была плохая.
Аноним 07/05/19 Втр 19:22:27 139535689
155474424113561[...].jpg (68Кб, 700x489)
700x489
>>1395353
>можно создать какое-то надежное сообщение между по сокетам между путоном и Си
Потому, что питухон для пидоров и смузихлебов, по дефолту кодировка должна быть указана в протоколе, некоторые текстовые редакторы бом вставляют, смузихлебы даже могут об этом не знать.
Аноним 07/05/19 Втр 19:36:51 139536090
>>1395356
>для пидоров и смузихлебов
Месяц назад я бы поспорил.
В протоколе должна быть указана кодировка.
Как енто ?
Вот типа в питоне я делаю .encode(“UTF-16”) это есть указание кодировки, а в Си как ?
А функции виндовс которые заканчиваются на W (для них все и делается) в какой кодировке данные ждут ?
UTF-8/16 ? cp-1251 ? Тысячи их блять.
От чего такая анальная боль
Может ну его нахуй этот питон, смысла нет пытаться выдавить из него что-то годное ?
Аноним 07/05/19 Втр 19:44:32 139536291
>>1395360
>UTF-16
Все юзают утф8
>смысла нет пытаться выдавить из него что-то годное
Почему, пусть сервер шлет все в одной кодировке.
Аноним 07/05/19 Втр 19:51:11 139536592
>>1395362
То есть если с зашкварного питона я пошлю UTF-8 строку, мне ее на Си помещать так-же в wchar_t ?
А если мне нужно будет конкатенацию сделать с другой строкой типа wchar_t L" ", это возможно будет сделать ?
Функции виндовс кончающиеся на W поймут UTF-8 ?
Аноним 07/05/19 Втр 19:55:38 139536693
Аноним 07/05/19 Втр 20:01:03 139536794
>>1395365
>будет конкатенацию
Пох, это просто байты, можешь их хоть memcp копировать, проблемы только при выводе на консоль ну и подсчет количества символов.
Аноним 07/05/19 Втр 20:02:55 139536895
>>1395366
Пробовал делать сетмоде типа для того чтобы вывести UTF-16 текст.
Не помогло, наверное потому что выводил не wprintf.
То есть если я сделаю сетмод для utf-8, программа и функции winapi запонимают эту кодировку ?
И строки конкатить можно будет ?
Аноним 07/05/19 Втр 20:13:07 139537196
>>1395368
>чтобы вывести UTF-16 текст
Ну во первых под виндой ты соснешь, потому что там вывод не юникодовский, нужно сменить кодовою страницу
cmd.exe /k chcp 65001
Это вот по утф8, под утф16 гугли.
>конкатить
Они все ожидают строку заканчивающуюся 0, так что похуй, даже strcat сработает
Аноним 07/05/19 Втр 20:17:32 139537397
>>1395027
Речь была о том что нехай пинать на инструмент если руки из жопы. Кармак конечно имел опыт, это не вкатывальщик с завода, при этом кармак и писал на си он так что его код и сейчас выглядит шикарно. А васян вечно будет жаловаться что сложно, непонятно, неочевидно и тд потому что васян создан для завода, ну или жс или питона в лучшем случае. Надо понимать что кресты и си для илиты, для ноулайферов, для тех странных задротов которые непонятно говорят, не ебут тяночек и не мечтают о ящике крепкого пиваса.
Аноним 07/05/19 Втр 20:20:03 139537598
>>1395373
>не мечтают о ящике крепкого пиваса
Вот сейчас обидно было
07/05/19 Втр 20:42:19 139538699
>>1395214
> Вообще-то чистый х86 реального режима очень простой
И нахуй никому не нужный. Весь современный софт, включая всякий эмбеддед пишется под плоскую модель памяти, так что ебаться в сегменты нет абсолютно никакого смысла.

>>1395353
Во-первых, можно было не думая сделать 'тест'.encode('UTF-16')[2:] , а во-вторых, utf-16le.

>>1395365
> Функции виндовс кончающиеся на W поймут UTF-8 ?
Я тебе еще в прошлом треде рассказывал, что ты можешь сделать MultiByteToWideChar(CP_UTF8, ...).

>>1395371
> chcp 65001
Нормально работает начиная с десяточки. В старших версиях работает с оговорками, иногда проглатывает текст, иногда WriteConsole просто возвращает ошибку. Лучше так не делать.
Аноним 07/05/19 Втр 20:43:51 1395387100
>>1395386
>Нормально работает начиная с десяточки.
Почему у меня не работает? А?
07/05/19 Втр 20:47:40 1395391101
>>1395387
Что у тебя не работает? Оно меняет кодировку вводимого и выводимого текста, аналогично SetConsoleCP()/SetConsoleOutputCP(), больше ни на что не влияет. Но консоль винды работает (работала) с UTF-8 плохо, поэтому были проблемы. Решалось нестандартной консолью типа ConEmu.
Аноним 07/05/19 Втр 20:48:27 1395392102
>>1395371
Насчет конката, я немного не так выразился.
Что совместить получится это понятно.
Приведу пример чтоб ты понял.

Стоит сетмод на UTF-8.
Eсть у меня некая строка
>wchar_r s[2] = L"aA";
Есть полученная из питона сокетом UTF-8 строка.

Мне нужно их совместить и передать допустим в CreateFileW.

Какие могут возникнуть проблемы ?
Аноним 07/05/19 Втр 20:53:25 1395394103
>>1395392
>Какие могут возникнуть проблемы ?
1. Прийти половина символа или не полная строка без 0 и ты соснешь.
2. Ты всегда знаешь сколько байтов получил, ничего кроме memcpy нинужно
>>1395391
> SetConsoleCP()/SetConsoleOutputCP()
Ну может и поможет, не юзал такое
07/05/19 Втр 20:54:22 1395397104
>>1395392
Как же ты заебал.
#define countof(x) (sizeof(x) / sizeof((x)[0]))
char buffer[1024]
char received_string[сколько-то];
recv(... received_string ... );
const char *arg1 = "yoba";
snprintf(buffer, countof(buffer), "\"%s\" %s", received_string, arg1);

WCHAR wide_buffer[1024];
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, buffer, -1, wide_buffer, countof(wide_buffer));
wide_buffer передаешь в CreateFileW. Не забываешь обработать ошибки snprintf (например, когда оно в буфер не влезло) и MultiByteToWideChar (много причин: не влезло, кривой UTF-8 и т. д.).

Какие нахуй сетмоды, вы ебанулись?
07/05/19 Втр 20:56:06 1395398105
>>1395397
> передаешь в CreateFileW
Ну с тем принтфом в CreateProcess, но суть не меняется и для strcpy/strcat.
Аноним 07/05/19 Втр 21:17:30 1395412106
>>1395226
Чтобы загрузить последнюю игру -_-
Аноним 07/05/19 Втр 23:01:22 1395443107
>>1395373
Как стать технарём-ноулайфером? Хочу вкатиться...
Аноним 07/05/19 Втр 23:23:47 1395448108
>>1395443
Вот ты шутишь, а я хотел бы. Да тупой слишком, даже Си толком не осилил.
Аноним 07/05/19 Втр 23:29:04 1395452109
>>1395448
Что ж поделать, у каждого своё предназначение в жизни. Кому-то приходится создавать автопилот для теслы, а кто-то должен вычищать блевотину бомжа с асфальта по утрам или шлёпать сайты на модном фреймворке.
Аноним 07/05/19 Втр 23:32:23 1395453110
>>1395452
> шлёпать сайты на модном фреймворке.
Так это сложнее. Я пытался освоить верстку или там пых, но у меня мозг переклинило на Си. Да и то, на нем ничего сложнее zakaz_laba_12_4_kurs.c не выходит.
Аноним 08/05/19 Срд 05:48:06 1395537111
>>1395453
Не в сложности дело. Современное программирование это аналог секретаря-машинистки, делание текстовых документов, а си это программирование компьютера - техника. Между технарем и секретаршей/бухгалтером как бы большая разница, хотя они оба могут делать сложные вещи.
Аноним 08/05/19 Срд 21:51:09 1395894112
>>1395537
>Современное программирование это аналог секретаря-машинистки, делание текстовых документов, а си это программирование компьютера - техника. Между технарем и секретаршей/бухгалтером как бы большая разница, хотя они оба могут делать сложные вещи.
Полную ерунду говоришь. Питон, пхп сранивать с бухгалтерией, а си с техникой это нонсенс. В си нет ничего такого, что нельзя написать на любом Тьюринг полном языке. Ну есть работа с памяться на низком уровне, но это не нужно для реализации алгоритмов.

Современное программирование ничем не отличается от несовременного. Нужно писать код, который решает задачи.
Аноним 09/05/19 Чтв 01:34:22 1396111113
>>1395894
>есть работа с памяться на низком уровне, но это не нужно для реализации алгоритмов.
Шта?
09/05/19 Чтв 02:36:45 1396185114
>>1395894
>работа с памятью на низком уровне
Чё это ваще значит?
>работа с памятью в си))))
Орнул.

Мне кажется что эту мантру повторяют из треда в тред только чудики вкатывальщики, вы откуда это берете? Компиляторы сижки на x86 даже к куче полного доступа не дают. Просто указатели на объекты складывают в лист. Вот это да, низкоуровнево пиздец. Си это сука не низкоуровневый язык, долбоеб. Это такая же каша из абстракций как питончик, который ты ненавидишь лишь потому что в соседнем треде так сказали. Все съеби.
Аноним 09/05/19 Чтв 03:23:57 1396207115
>>1396185
Почему я не могу работать кешем напрямую в Си?
Аноним 09/05/19 Чтв 03:54:28 1396213116
>>1396207
У тебя ошибка в ДНК
Аноним 09/05/19 Чтв 04:00:37 1396216117
>>1396213
Что ты несешь, юродивый?
Аноним 09/05/19 Чтв 08:52:22 1396242118
>>1396185
>на объекты складывают в лист
Какие нахуй объекты, какой лист? Наркоман
Аноним 09/05/19 Чтв 12:32:00 1396315119
Аноним 10/05/19 Птн 11:32:06 1396762120
Функция хэширования, используемая в lookup и install, суммирует коды символов в строке и
в качестве результата выдаст остаток от деления полученной суммы на размер массива
указателей. Это не самая лучшая функция хэширования, но достаточно лаконичная и
эффективная.
#define HASHSIZE 101
static struct nlist (зв)hashtab[HASHSIZE]; / таблица указателей /
/ hash: получает хэш-код для строки s /
unsigned hash(char (зв)s)
{
unsigned hashval;
for (hashval = 0; (зв)s != '\0'; s++)
hashval =(зв)s + 31 (зв) hashval;
return hashval % HASHSIZE;
}
Что то не могу понять как это работает. Почему умножаем на 31, почему делим на hashsize?
Аноним 10/05/19 Птн 13:17:59 1396814121
>>1396762
Не делим, а берем остаток. Чтобы результат был в диапазоне от 0 до HASHSIZE-1.
31 особого смысла нести не должно. Функция хэширования по своей природе должна выдавать рандомный ответ, поэтому там часто используют странные магические цифры для дополнительной рандомности
10/05/19 Птн 15:17:49 1396958122
>>1396762
> Что то не могу понять как это работает
Внутри цикла ты "сдвигаешь" умножением текущие биты хэша влево так, чтобы "добавить" биты очередного байта, но не слишком далеко, чтобы не потерять слишком много текущего состояния из-за переполнения. После цикла с помощью % ты приводишь результат к диапазону хэш таблицы.

>>1396814
> Почему умножаем на 31, почему делим на hashsize?
> 31 особого смысла нести не должно
HASHSIZE - простое число, чтобы как можно больше битов hashval влияли на вычисляемый индекс (например, если размер таблицы 128, мы бы фактически просто выбросили старшие биты hashval). 31 - простое (или хотя бы взаимно простое с 2sizeof(int) ∗ 8) число, чтобы при переполнении после вычисления 31 ∗ hashval, которое компьютер вычисляет как (31 ∗ hashval) % 2sizeof(int) ∗ 8 отброшенные биты влияли на результат. Поэтому хэш-функция со сдвигом (hashval = (hashval << x) ^ ∗s) хуже.
Аноним 10/05/19 Птн 17:46:26 1397083123
>>1396958
Спасибо за развёрнутый ответ, но все же не понятно, при взятии остатка ведь может получиться, что у двух разных слов хэш будет одинаков, разве нет?
10/05/19 Птн 18:03:22 1397102124
>>1397083
> у двух разных слов хэш будет одинаков
Конечно. Будет коллизия. Ведь количество возможных слов бесконечно, а количество элементов конечно, и поэтому у тебя там не массив указателей на строки, а массив связанных списков, элементы котрых указывают на строки. Слова с совпадающим хэшем попадают в один и тот же связанный список. Например, у тебя хэш-таблица на 5 элементов, а засунул ты в нее 10 слов, очевидно, что у некоторых слов хэш совпадет, и при их поиске ты будешь гулять по связанному списку, теряя в скорости. И это еще в лучшем случае. С плохой хэш-функцией может случиться так, что все 10 слов попадут в один и тот же элемент таблицы. Именно для уменьшения вероятности такой хуйни в твоей хэш функции используются простые числа. И поэтому самих хэш функций существует дохуя, с разным качеством, пытающихся как можно равномернее распределить хэши в разных ситуациях.

Но если тебе заранее известны все возможные элементы (например, у тебя список вкомпилированных встроенных функций, которые нужно вызывать по имени), ты можешь сделать https://en.wikipedia.org/wiki/Perfect_hash

Элементы... Как, блин, по русски buckets сказать?
Аноним 10/05/19 Птн 18:10:48 1397111125
>>1397102
Сколько ты зарабатываешь?
Аноним 10/05/19 Птн 18:28:44 1397127126
Аноним 10/05/19 Птн 18:34:08 1397130127
>>1397111
Тебя про хэши на джуна будут спрашивать.
Аноним 10/05/19 Птн 19:01:44 1397148128
>>1397102
> а массив связанных списков,
Открытая адресация в разы лучше.
Аноним 10/05/19 Птн 19:06:58 1397156129
>>1396762
Самая простая и годная хеш-функция от Dan J. Bernstein

// Dan J. Bernstein string hash
static inline uint64_t hash(const char str) {
uint64_t h = 5381;
while (
str) {
h = (h << 5) + h + *str++;
}
return h;
}
Аноним 10/05/19 Птн 19:40:30 1397162130
10/05/19 Птн 20:27:42 1397187131
>>1397148
> Открытая адресация в разы лучше.
Да, никто не спорит, но цена открытой адресации - перехэширование, т.е., если со списками у тебя все просто понемногу ухудшается с ростом количества элементов, то когда у тебя хэш-таблица с открытой адресацией заполняется, на тебя разом падает вся "сэкономленная" работа. А просто ресайзнуть таблицу и не делать рехэш тоже хуево.
Аноним 10/05/19 Птн 20:42:31 1397191132
>>1397187
Даже с ресайзом и рехэшем быстрее работает, главное не давать таблице заполнятся больше чем на 80%
Аноним 11/05/19 Суб 01:07:49 1397321133
Привет.
Пишу может не совсем по теме, но все-же.
Мне нужно разработать простую и легковесную систему администрирования чисто под Win32.

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

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

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

Пока что из прогрессивных идей, эта первая.
Что скажете ?

Каким функционалом такие системы должны обладать кроме RDP/FTP/SSH ?
Аноним 11/05/19 Суб 01:16:12 1397323134
Поясните про указатели. Мне нужно сделать многомерный массив, но т.к. каждое из измерений будет разной длины, а моя пердуина имеет ограниченную память, то я решил использовать указатели. Только вот если с обычными переменными все ясно, то с массивами нихера разобраться не могу.

Вот я создал два массива
char★ A[]={"One", "Two, "Three"};
char★ B[]={"One", "Two, "Three", "Four", "Five"};

Дальше я создаю еще один массив с указателем на первые два
char★★ AB[]={A, B};

И как мне теперь добраться, например, до значения A[1] через AB[]?
Аноним 11/05/19 Суб 01:25:54 1397326135
Аноним 11/05/19 Суб 01:29:49 1397329136
>>1397326
Блин, так просто. А такого наворотил. Спасибо.
Аноним 11/05/19 Суб 02:03:45 1397339137
Нужно написать идеально сбалансированное дерево поиска, на уровне кода laba_10.c. По отдельности (идеально сбалансированное и поиска) вроде как понятно, но совместить не могу никак. Есть какие-нибудь советы?
Аноним 11/05/19 Суб 02:35:28 1397355138
>>1397326
А такой вопрос. Почему, когда я попытаюсь получить данные из ячейки, которая выходит за пределы массива, то данные берутся из соседней ячейки?

Например, если я попытаюсь получить значение AB[0][3], то мне выдаст значение AB[1][1] т.е. "One" из массива B. А еще у меня из-за этой херни половина памяти ардуинки сожралось — пытался определить величину массива, но это уже другой вопрос (а может и тот же).
Аноним 11/05/19 Суб 04:46:25 1397364139
>>1397355
> данные из ячейки, которая выходит за пределы массива
Доктор, мне больно, когда я делаю так. Ну, не делайте так.

Данные-то в памяти где-то должны лежать? Вот тебе компилятор и сложил элементы обоих массивов последовательно, в том порядке, в каком ты их описал. Но никаких гарантий насчет этого нет, а выход за пределы массива так и вообще UB, не делай так.

> пытался определить величину массива
Для массивов массивов с переменным количеством элементов во втором измерении можно NULL последним элементом воткнуть: { "One", "Two", "Three", NULL }, и по нему детектить (это если ты все равно циклом по элементам бегаешь). А если размер нужен для проверки при произвольном досутпе, можешь посчитать sizeof-ом и захардкодить заранее: https://ideone.com/cTvEPz (типы в тайпдефы запихать можно, чтобы не писать эту мешанину звездочек каждый раз).
Аноним 11/05/19 Суб 10:25:25 1397400140
>>1397364
Спасибо, получилось. Я думал, что раз я определил массив, то у него есть начало и конец.

А еще такой вопрос. Еще я думал, что на стадии объявления массива, данные уже записываются в память, но у меня пожирание памяти начинается на стадии использования этих массивов. Может быть такое?

Т.е. на стадии объявления мой мк забит на 14%, а как только я начинаю использовать цикл вывода данных на экран из массива, то динамическая память занимает уже 50%
Аноним 11/05/19 Суб 14:13:15 1397565141
>>1397400
Объявление вообще не соответствует никакому действию в маш.коде, это лишь указание компилятору, на какую часть личного адресного пространства рассчитывает то или иное имя с начала использования. Раздувать сегмент стека компилятор скорее всего станет непосредственно перед использованием, как если бы ты объявил его в этом месте. Но ты имеешь право объявить раньше для красоты.
Аноним 11/05/19 Суб 15:11:12 1397594142
>>1397565
Я понял, спасибо за ответ.
Аноним 12/05/19 Вск 14:49:10 1398322143
А есть какая-нибудь либа-обертка с вызовами POSIX для WinAPI? Самому писать как-то не хочется.
12/05/19 Вск 15:07:27 1398334144
>>1398322
cygwin1.dll. Собирай из-под cygwin, в общем.
Аноним 12/05/19 Вск 15:18:25 1398344145
>>1398334
Да не, не портирую я ничего. Просто POSIX как-то лаконичнее и удобнее, что-ли.
Аноним 12/05/19 Вск 15:47:28 1398370146
>>1398344
А мне винапи удобнее. Есть обертка посикса под винапи?
Аноним 12/05/19 Вск 17:52:29 1398440147
Аноним 13/05/19 Пнд 02:36:56 1398811148
Аноним 13/05/19 Пнд 02:56:06 1398816149
tree.jpg (63Кб, 835x157)
835x157
Ребят, привет, у меня тут возник вопрос. Я написала построение бинарного дерева поиска с помощью обычного дерева, построенного со строки, введенной интерактивно. Но сделать возможность построения обычного дерева с помощью аргументов командной строки -fin и -fout и файлов, я чот хз как. Кто нибудь знает, как это сделать?
https://pastebin.com/FCQ8ELNp
Аноним 13/05/19 Пнд 03:09:44 1398817150
>>1398816
>Я написала
где сиськи на фоне иде
Аноним 13/05/19 Пнд 03:11:54 1398818151
Аноним 13/05/19 Пнд 06:12:13 1398821152
>>1398816
Гугли
>С read data from file

>С parse data from file

>С write data to file
Аноним 13/05/19 Пнд 14:35:48 1399013153
Аноним 13/05/19 Пнд 14:42:28 1399020154
13/05/19 Пнд 14:45:09 1399023155
>>1398816
В целом реализация ахуенная, но абсолютно не читаемо. Выбери себе один стиль в котором будешь писать. Например чтобы смотря на члены выражения можно было понять, сравниваешь ты переменную, функцию или структуру, или член структуры. Аргументы функций тоже желательно выделять как-то. Попробуй какой-нибудь классический ООП стиль из сипп или джавы
СУКА БЛЯТЬ ПОЧЕМУ НЕ РАБОТАЕТ Аноним 13/05/19 Пнд 15:20:05 1399058156
image.png (87Кб, 957x527)
957x527
image.png (197Кб, 731x542)
731x542
image.png (16Кб, 594x293)
594x293
image.png (84Кб, 865x646)
865x646
Почему не компилится залупа на четырех пикрелейтедах? Линкую shared library к простому приложению, объектники собираются нормально, а вот уже во время линковки объектников и библиотеки вываливается залупа unresolved references. Разве они не должны при линковке зарезолвиться? Пробовал по всякому менять порядок параметров в gcc, не помогло. Чё ему не нравится?
Аноним 13/05/19 Пнд 16:17:49 1399080157
>>1399058
Страдай, линуксоблядь. У vs-бояр все компилится.
Аноним 13/05/19 Пнд 16:54:58 1399089158
image.png (209Кб, 1366x768)
1366x768
>>1399080
Да не бейте лучше обоссыте линупс из под виртуалки я нормальный вон видишь даже вижак на панели задач ежже
Аноним 13/05/19 Пнд 17:19:15 1399104159
>>1399058
Библиотеки не находятся, вначале ручками закомпиль, потом маке делай
Аноним 13/05/19 Пнд 17:35:34 1399119160
>>1399104
Так а мейк мне нахуя тогда нужен, если я чё то еще руками буду делать? И почему не находятся? Я же ему русским языком говорю -L{путь к либе для линкования} и -Wl,-rpath={путь к либе} чтобы загрузчик эльфа знал, где ее искать. Тем временем я уже попробовал в /usr/lib и /usr/local/lib пихать printhello.so и делать чмод 755 всё в том же мейкфайле - не помогло.
Аноним 13/05/19 Пнд 17:45:59 1399123161
>>1399119
И само чо интересное, компайлер моросит именно на extern-переменные, а на функцию, которая в том же хэдере - нет. Чому так то блять?
inb4 далбаёб переменные в шейрд библиотеках хранят только быки и пидарасы а рогов я у тебя что то не вижу --- это чисто в образовательных целях.
13/05/19 Пнд 18:10:58 1399141162
>>1399123
Так покажи printhello.c нам? Мы же не телепаты.
Аноним 13/05/19 Пнд 18:16:59 1399146163
image.png (68Кб, 623x424)
623x424
>>1399141
Ничего особенного. К нему вроде у гсс даже и претензий нет.
13/05/19 Пнд 18:18:45 1399147164
>>1399146
Я так и думал. Ты в своем .h объявил nameptr и
ucnameptr, а определить забыл. А так как оно у тебя явно extern, то самостоятельно компилятор тебе ниего не объявит. Создай в printhello.c переменные, и все заработает.
Аноним 13/05/19 Пнд 18:19:55 1399149165
13/05/19 Пнд 18:19:57 1399150166
>>1399146
>>1399147
Я имею в виду: .h оставь как было, в .c переменные без extern.
Аноним 13/05/19 Пнд 18:27:41 1399157167
image.png (234Кб, 1164x511)
1164x511
>>1399150
Вроде и да, а вроде и нет. Функция в адресном пространстве либы, а переменные - в пространстве основного модуля. Так и должно быть? Или раз один инстанс шейрд либы может разными процессами дергаться, переменные либ всегда дублируются в памяти модулей из соображений безопасности?
Аноним 13/05/19 Пнд 19:11:09 1399179168
>>1394819
> Ананасы, а какие основные навыки сейчас требуют у эмбеддед синьеров-помидоров с 4к+ зарплатой?

бамп вопросу. Неужели итт нет относительно успешных сишкоблядей?
13/05/19 Пнд 19:52:16 1399216169
>>1399157
Вкратце: система динамических библиотек в линуксе говно, она состоит из одних лишь костылей (в винде такой хуйни нет и близко, там все работает так, как ты предполагаешь). Скажи Source.c, что он тоже fpic, и настанет счастье.
Аноним 13/05/19 Пнд 20:27:55 1399238170
Аноним 13/05/19 Пнд 20:31:50 1399241171
>>anon122131231324ь
Здаров наСИльники посоветуйте что актуального почитать о CTP/IP (и сокетах) с примерами на сишке
Аноним 13/05/19 Пнд 20:38:54 1399245172
155764490319876[...].jpg (86Кб, 604x584)
604x584
>>1399216
>там все работает так, как ты предполагаешь
Аноним 13/05/19 Пнд 20:46:47 1399251173
Посоветуйте учебник по С11 на русском

спасибо
Аноним 13/05/19 Пнд 21:33:03 1399286174
Аноним 13/05/19 Пнд 22:57:34 1399343175
>>1399216
Давай не вкратце лучше, или где почитать
Аноним 14/05/19 Втр 08:34:58 1399514176
>>1399286
А как перевод, что то в отзывах пишут перевод кривоват и напечатано как на ксероксе.
14/05/19 Втр 13:27:53 1399674177
>>1399514
Там под каждой локализацией так пишут
Аноним 14/05/19 Втр 15:41:39 1399739178
Анон, float/double в си - это всегда IEEE 754 или возможны другие реализации в зависимости от платформы? И приведение float/double к int всегда будет работать одинаково или могут быть проблемы с портабельностью?
Аноним 14/05/19 Втр 15:44:33 1399742179
>>1399739
Последний вопрос не актуален - только что увидел, что в K&R A6.3 детально описано, как должно выполняться преобразование.
Аноним 14/05/19 Втр 20:35:40 1399960180
>>1399739
> это всегда IEEE 754
Нет, к сожалению (#ifndef __STDC_IEC_559__). Но на распространенных платформах всегда.
Аноним 15/05/19 Срд 06:01:20 1400241181
Аноны,
У меня твердое ощущение, что мне нужно прокачать скилл комбинаторики.
В школе понятно этому не учили, да и не учился я особо.
В вузике тоже мельком проходили.
Но везде от алгоритмов до практического программирования чувствую что где-то меня наебывают.
Учусь по KR и Прата.
Порекомендуйте пожалуйста курс, можно платный по этой теме. Английский вполне на уровне.
Спасибо.
Аноним 15/05/19 Срд 10:02:05 1400285182
>>1400241
На степике смотрел?
Аноним 15/05/19 Срд 11:23:16 1400317183
>>1400241
http://web.karabuk.edu.tr/hakankutucu/CME222/MIT[1].Press.Introduction.to.Algorithms.2nd.Edition.eBook-TLFeBOOK.pdf
Тут тебе и анализ алгоритмов с аналитическим доказательством ассимптотной сложности, и дополненения со всем необходимым математическим аппаратом (теория чисел, теория вероятности и т.д.), и много много всего, а главное - с упражнениями и задачами. Пусть объем не пугает, просто все изложено по-максимуму, да и никто не заставляет за раз все "выпивать". 3-е издание можно найти, лично я в Торе брал.
Аноним 15/05/19 Срд 11:28:16 1400322184
Buddha approves.jpg (43Кб, 854x480)
854x480
>>1400317
>в Торе брал
>когда есть кошерный libgen.io, на котором есть все технические книги
Палю годноту
Аноним 15/05/19 Срд 11:41:34 1400329185
>>1400322
Там тоже только второе издание.
Аноним 15/05/19 Срд 11:43:45 1400330186
Screenshot20190[...].png (17Кб, 1953x99)
1953x99
>>1400329
У тебя контактные линзы выпали
Аноним 15/05/19 Срд 12:02:31 1400344187
Надо бы прикрутить-таки интерфейс на WinAPI к одной проге, да как-то боюсь за это браться. Что посоветуете?
Аноним 15/05/19 Срд 12:13:17 1400348188
Почему итт так много виндузятников, которые пытаются что-то ковырять в винапи и прочей виндо-хуйне? Зачем вам это?
На чистом си сейчас пишут всерьез только в embedded юниках и bare metal, и имеет смысл вьезжать только в это. И деньги, судя по вакансиях, есть только тут. Разве я не прав?
Аноним 15/05/19 Срд 12:18:08 1400352189
>>1400348
Ну, лично я, например, смог хоть как-то освоить только Си. Всякие кресты, шарпы, питоны и прочие джавы слишком сложные.
Аноним 15/05/19 Срд 12:21:42 1400354190
Подскажите, что писать-то на вашем си, если душа не лежит к программированию ядра и микроконтроллеров?
Аноним 15/05/19 Срд 13:18:32 1400415191
>>1400354
Все. Вопрос в трудозатратности и целесообразности.
Аноним 15/05/19 Срд 13:19:02 1400416192
Аноним 15/05/19 Срд 14:43:07 1400457193
Надо записать число в файл
srav=SortDataset(s,i);
fwrite(&srav,sizeof(int),2, table);
Но в файле записывается нечто невразумительное
 T в F ‹
3 ]D џ˜ EQ
Почему?
Аноним 15/05/19 Срд 14:55:58 1400472194
>>1400457
Конвертируй в ascii символы то говно, которое ты записываешь в файл, и будет у тебя в нем тогда нечто более вразумительное
То есть
fwrite(&srav,sizeof(int),2, table); >> fprintf(table, "%d", srav) // я правда не понял, зачем ты "2" передаешь в fwrite, но логиту, я думаю, ты поймешь.
Аноним 15/05/19 Срд 15:05:35 1400486195
>>1400472
Работает, спасибо, но все равно, почему мне такое говно выдавало?
Программа отсюда http://www.c-cpp.ru/content/fwrite тоже залупу печатает, хотя у автора видимо все работает.
Аноним 15/05/19 Срд 15:18:48 1400501196
>>1400486
Но ведь она действительно работает. Работает так, как того захотел автор - записывает значение переменной в бинарном виде, то бишь без конвертации в читабельную кодировку. Открой файл в каком-то hex-вьювере, и можешь сам сконвертировать бинарное значение в что-то более понятное для себя.
Аноним 15/05/19 Срд 15:22:49 1400506197
>>1400501
Но почему при записи строк таким способом они вполне себе нормально читаются в блокноте?
Аноним 15/05/19 Срд 15:56:53 1400550198
Аноним 15/05/19 Срд 15:58:40 1400554199
>>1400506
Каким способом нормально читаются? С помощью fprintf? fprtintf() конвертирует значение переменной в ascii коды и пишет эти коды в файл, а fwrite() просто записывает значение переменной в голом виде в файл без какой-либо конвертации.

Блокнот же парсит файл в ascii кодировке.

Если ты все же не понимаешь написаного мною выше, то почитай что такое ascii и зачем вообще эти кодировки символов.
Аноним 15/05/19 Срд 16:02:36 1400564200
>>1400554
> Каким способом нормально читаются?
С помощью fwrite записывая массив строк они прекрасно читаются в блокноте, а вот с инт и флоат такое не прокатывает.
Аноним 15/05/19 Срд 16:31:33 1400595201
Аноним 15/05/19 Срд 16:41:18 1400604202
>>1400564
А блять. Ну потому что строки в Си как раз представлены в ascii кодах.

char *s = "1234"; // здесь объявлена строка размером 5 байт. В памяти ее значение будет выглядеть вот так: {49, 50, 51, 52, 0 }
int num = 1234; // здесь объявлена переменная размером 4 байта (или 8 или какой там у тебя процессор). В памяти она будет выглядеть скорее всего вот так: {123, 4, 0, 0}

Теперь подумай как записанные данные будут выглядеть в блокноте в первом и втором случае.
Аноним 15/05/19 Срд 16:42:47 1400609203
>>1400595
Хули ты злой такой?
Аноним 15/05/19 Срд 16:48:22 1400621204
>>1400609
>злой
Вовсе нет, желаю тебе только добра.
Умри.
Аноним 15/05/19 Срд 16:49:40 1400623205
images.jpeg (6Кб, 224x225)
224x225
Аноним 15/05/19 Срд 16:58:27 1400630206
Сап /pr/

Задали в шараге написать реверс шелл для виндовс.
Погуглил немного и нашел вот этот https://github.com/infoskirmish/Window-Tools/blob/master/Simple%20Reverse%20Shell/shell.c пример.
Скомпилировался нормально, без ошибок, только не работает так как нужно.
Неткат подключается и сразу отключается, будто бы cmd.exe либо не создается вообще, либо ничего не отправляет в stdout.

Процесс вроде бы создает, в GetLastError() ошибок нет.

Почему не работает ?
Скину вот еще https://www.youtube.com/watch?v=4r93_6wZYTk в пример видео, код почти такой же, работает на 10-ке нормально.
Аноним 15/05/19 Срд 17:11:24 1400635207
51lmQ7lOQoL.SX4[...].jpg (39Кб, 419x500)
419x500
>>1400285
Еще нет, вообще как-то прошёл мимо меня этот ресурс. Спасибо, посмотрю.

>>1400317
Собираюсь алгоритмы по пику проходить. До алгоритмов я решил именно комбинаторику прокачать.
Аноним 15/05/19 Срд 17:13:51 1400636208
>>1400630
Ебать интересная у вас шарага. У нас такого не было нихуя у нас не было толком, мда
Аноним 15/05/19 Срд 17:14:47 1400638209
>>1400636
Да самая обычная, факультет ИБ.
Аноним 15/05/19 Срд 17:17:17 1400641210
>>1400638
Ну, я вот тоже с ИБ. Самое такое, что писали - POSIX "изучали". Форки, екзеклы, потоки, семафоры и прочее.
Аноним 15/05/19 Срд 17:24:34 1400647211
>>1400641
понял, ну так есть какие-нибудь соображения ?
Аноним 15/05/19 Срд 17:28:54 1400650212
>>1400647
А ты неткат на прослушку-то ставишь? Это как бы не просто так "реверс".
Аноним 15/05/19 Срд 17:30:25 1400652213
>>1400650
nc -lp 9090
Там (на гитхабе) инструкция есть, все по ней делаю
Аноним 15/05/19 Срд 17:33:35 1400655214
>>1400652
Сам шелл как стартуешь? Он порт и айпишник из аргументов тянет. Файрволл еще может возбудиться и резать трафик.
Аноним 15/05/19 Срд 17:35:17 1400658215
>>1400655
Как понять как стартую ?
Я порт и айпишник захардкодил.
Аноним 15/05/19 Срд 17:42:23 1400666216
изображение.png (84Кб, 1366x768)
1366x768
>>1400658
Криво захардкодил, возможно? Все сразу завелось.
Аноним 15/05/19 Срд 17:50:16 1400672217
>>1400666
Любопытненько.
Я просто скопипастил весь код изменив только адрес и порт и он заработал.
До этого я писал свой код который делает тоже самое, просто он был несколько поменьше и он не работал.
Ты хорошо разбираешься в Си ?
Аноним 15/05/19 Срд 17:54:51 1400676218
>>1400672
Это Тимофей Хирьянов, он препод. Сечёт в программировании на уровне матана.
Аноним 15/05/19 Срд 17:55:24 1400677219
>>1400676
О а можно с ним скорешиться ?
Я бы у него непонятки всякие спрашивал
Аноним 15/05/19 Срд 18:00:15 1400685220
>>1400677
В гугле набери, додик
Аноним 15/05/19 Срд 18:02:07 1400687221
Аноним 15/05/19 Срд 19:25:34 1400739222
lrg.jpg (118Кб, 500x656)
500x656
>>1400635
Лудшая книга по алгоритмам на C

Все подробно разбирается и главное есть нормальные примеры, а в книге с твоего пика примеры очень хуевые.
Аноним 16/05/19 Чтв 14:42:02 1401130223
Какие в С есть методы интерполяции строки кроме snprintf(...)?
Аноним 16/05/19 Чтв 15:12:42 1401152224
>>1393395 (OP)
Написал GUI-программу на WinAPI, прописав в APIENTRY вызов FreeConsole();, однако при запуске программы окно консоли всё равно появляется на микросекунду и сразу же после этого закрывается. Жутко бесит, помогите исправить.
Аноним 16/05/19 Чтв 15:17:06 1401156225
Аноним 16/05/19 Чтв 15:56:51 1401182226
Аноним 16/05/19 Чтв 16:37:56 1401217227
Аноним 16/05/19 Чтв 16:45:56 1401232228
Что такое универсальная среда выполнения ?
В чем отличие кода использующего только функции winapi от кода использующего функции языка Си ?
Аноним 16/05/19 Чтв 16:49:51 1401237229
>>1401182
А если tcc и используется WinMain ?
Тоже окно появляется на секунду.
16/05/19 Чтв 17:14:50 1401247230
>>1401232
> Что такое универсальная среда выполнения
UCRT что ли? Кривое говно.

> В чем отличие кода использующего только функции winapi от кода использующего функции языка Си ?
Функции языка Си (ты ведь имеешь в виду стандартную библиотеку, да?) - обертки для системного апи. Но так как они стандартизированы, то если твоя программа пользуется только ими, то в теории она скомпилируется и заработает на любой системе, где есть стандартная библиотека Си (а так как она стандартная, то если там есть Си, то и библиотека должна быть). С другой стороны Windows API работает только в Windows, ну и в wine худо-бедно.

>>1401237
> А если tcc и используется WinMain ?
Да быть такого не может, он в таком случае, как и любой другой виндовый компилятор, автоматически выставляет -subsystem=windows. Показывай код.
Аноним 16/05/19 Чтв 18:39:17 1401317231
Нужно создать программу, добавляющую элемент в список с сохранением упорядоченности. Что собственно значит это сохранение упорядоченности?
Аноним 16/05/19 Чтв 18:40:50 1401318232
Сап. Что можете рассказать про указатели на указатель? Что покурить и где почитать? Нужно как само применение, так и оправданность использования в той и или иной задаче + сама работа этой штуки в железе.
Аноним 16/05/19 Чтв 19:49:42 1401359233
>>1401317
> Что собственно значит это сохранение упорядоченности?
Значит список отсортирован (упорядочен), и нужно воткнуть элемент в подходящее для него место, а не просто в начало или конец списка.

>>1401318
Когда тебе понадобятся указатели на указатели, ты первым об этом узнаешь argv видел?.

> работа этой штуки в железе
Ничем не отличается от указателя на объект: когда ты ставишь звездочку перед именем указателя (или квадратные скобки с индексом после него), по указанному адресу происходят какие-то манипуляции со значением указанного типа (например, чтение или присваивание). Этим значением может быть, например, int, double, целая структура или другой указатель. Что ты с этим значением будешь делать дальше - целиком и полностью твое дело.
Аноним 16/05/19 Чтв 21:42:53 1401447234
двачая.png (283Кб, 350x350)
350x350
>>1401217
>-mwindows
Спасибо, анон, то что надо.
Аноним 17/05/19 Птн 01:14:01 1401579235
>>1401318
применение - когда тебе надо вернуть из функции указатель, тогда и используешь указатель на указатель
например, ф-я поиска в списке будет возвращать указатель на ноду, которая содержит искомое значение, а для этого нужен указатель на указатель уже
в общем, когда понадобится, ты начнешь быстро это использовать, об этом выше уже написали
Аноним 17/05/19 Птн 01:16:31 1401580236
>>1401317
>
>
не парься: у вирта в "структурах и алроритмах" где обсуждаются односвязные списки, там и эта вставка описана как ее делать
если не хочешь думать, просто посмотри там
Аноним 17/05/19 Птн 01:24:04 1401585237
>>1401130
эк ты загнул
подозреваю что ответ будет таким: в си нет string interpolating, а composite formatting обеспечивается семейством функций printf ..
Аноним 17/05/19 Птн 01:31:56 1401587238
>>1400604
>здесь объявлена строка размером 5 байт
формально у тебя: определен указатель на char, инициализованный указателем на начало строкового литерала

Аноним 17/05/19 Птн 01:34:32 1401588239
>>1400354
>Подскажите, что писать-то на вашем си
laba1, laba2, .. на курсе по алгоритмам и структурам на втором году обучения в вузике

Аноним 17/05/19 Птн 01:36:06 1401589240
>>1400348
> так много виндузятников, которые пытаются что-то ковырять в винапи
вымирающий вид, прямо как белый амурский тигр, кхе-кхе


Аноним 17/05/19 Птн 01:37:19 1401591241
>>1400344
mfc кроме шуток
щас бесплатный он
во всех vs можно ставить его и пользовать



Аноним 17/05/19 Птн 01:39:42 1401592242
>>1400317
>теория чисел, теория вероятности и т.д.
эх, а нам ведь на отдельном курсе в вузике это целые полгода мозгу ебали
щас нихуя не помню уже оттуда


Аноним 17/05/19 Птн 08:52:11 1401680243
>>1401588
А что-нибудь кроме лаб? Я универ уже 6 лет как закончил.
Аноним 17/05/19 Птн 10:22:00 1401704244
15572211859490.jpg (57Кб, 1280x720)
1280x720
Небольшой экскурс в историю.

ОП пишет:
>>1393395 (OP)
>Тред, посвященный прародителю всех С-подобных языков

Слышь, ты, позорище.
C (1972)

B (1969) — Би — интерпретируемый язык программирования, разработанный в AT&T Bell Telephone Laboratories. Является потомком языка BCPL и непосредственным предшественником Си.

BCPL (1966) - стал ответом на сложности своего предшественника, языка CPL, разработанного в начале 1960-х. Ричардс создал BCPL, «удалив из полного языка те функции, которые усложняли компиляцию».

CPL (1963) - Combined Programming Language (CPL) — язык программирования, совместная разработка кембриджского и лондонского университетов. До подключения к проекту лондонцев «С» было первой буквой от «Cambridge», а потом официально расшифровывалось как «Combined». Неофициально же «С» означало «Christopher», поскольку именно Кристофер Стрейчи[en] вдохновлял работы по CPL. Сейчас этот язык не используется, но его наследником стал язык BCPL — один из предшественников языка Си.
На него сильно повлиял ALGOL 60.

ALGOL 60 (1960) <= ALGOL 58 (1958) <= [FORTRAN (1957); Plankalkül (1948)] <= [Speedcoding (1953); Begriffsschrift (1879)] <= (ASM (1949) и Машинный Код)
Аноним 17/05/19 Птн 11:25:15 1401732245
>>1393395 (OP)
На русише чо читать?
Бесполезное говно твой мануал, один инглиш.
Аноним 17/05/19 Птн 11:38:13 1401737246
>>1401704
Чмох, соси хуй. Именно из-за хуевого синтаксиса В, никто его юзать и не стал
>>1401732
Стивен Прата, шестое издание.
Аноним 17/05/19 Птн 11:51:57 1401738247
>>1401737
>Чмох, соси хуй. Именно из-за хуевого синтаксиса В, никто его юзать и не стал

дебил, речь идёт о предках языка, откуда он есмь пошёл, сука, ты совсем тп, пидораска опущенестая?
Аноним 17/05/19 Птн 11:56:28 1401739248
>>1401737
А для чайников не лучше?
Аноним 17/05/19 Птн 12:26:00 1401745249
>>1401739
>для чайников
Лучше нахуй.
Аноним 17/05/19 Птн 13:31:52 1401777250
 .jpg (750Кб, 1464x1986)
1464x1986
>>1401732
K&R есть на русском. И не бойся инглиша, ты же не даун с 4 классами образования, хоть что-то знаешь. Просто бери нужную книгу и начинай читать, в браузере открой вкладку с переводчиком. Увидел непонятное слово - перевёл и пошёл дальше. Через месяц такой практики станешь сверхчеловеком.
Аноним 17/05/19 Птн 14:17:08 1401796251
>>1401585
Ну я просто вообще из С# вырос, там есть сахарок типа string s = $"this is {s1} interpolated string {s2}"; где s1 и s2 - другие строки. Вот искал что то похожее в С.
Аноним 17/05/19 Птн 14:18:38 1401798252
>>1401680
в линуксах и вообще unix-мирке до сих пор большинство user-space кода по итогу на сишке написано
это ничем, в принципе не оправданно, просто дань традиции
gnome, к примеру, у них сотри проектов на сишке, даже не на плюсах
если хочешь просто писать для развлечения и общественной пользы - велком, им постоянно нужны рабы

другое дело, в кернелее (что в виндах, что в юниксах) до сих пор надо писать на си, тут нету выбора особого
Аноним 17/05/19 Птн 14:29:37 1401802253
>>1401777
>с переводчиком
вредный совет. Лучше чисто английский словарь. Такой, что ввел "penis" и выбило "male organ of copulation". Так лучше вкатываться в инглиш.
Аноним 17/05/19 Птн 14:34:36 1401806254
>>1401802
Сепульки - см. сепулькарий.
Аноним 17/05/19 Птн 14:37:48 1401809255
>>1401806
Двачеры - см. дебилы.
Аноним 17/05/19 Птн 14:39:43 1401811256
>>1401802
>penis
Мискузи, но это же латынь!
Аноним 17/05/19 Птн 14:46:15 1401816257
Аноним 17/05/19 Птн 14:52:47 1401818258
>>1401816
Угомонись, дегенерат.
Аноним 17/05/19 Птн 14:57:31 1401821259
>>1401806
Ну да, так и надо осваивать. Не миллион частных случаев, а см. что откуда берется. Индукция сосет, дедукция рулит. K&R же не состоит на 80% из примеров. Это книжка на языке о языке, и к обоим языкам надо относиться с уважением. Серьезно, с переводчиком себе дороже.
Аноним 17/05/19 Птн 15:03:55 1401824260
Аноним 17/05/19 Птн 16:17:07 1401861261
Аноны, посоветуйте нормальный инструментарий под WinXP. IDE не надо. Нужен компилятор, стандартная библиотека, желательно дебагер, и чтоб адекватно линковать с DLL. Косплей MinGW как-то не вдохновляет.
Аноним 17/05/19 Птн 17:18:00 1401884262
>>1401861
Связка clang + lldb вроде как работает под виндой.
Аноним 17/05/19 Птн 17:19:01 1401888263
>>1401861
>Косплей MinGW как-то не вдохновляет.
А зря. Разработка под линуксом, mingw и wine - самое удобное.

А так студия типа 2008 с visualassistx пиратским.
Аноним # OP 17/05/19 Птн 17:42:51 1401906264
>>1401704
> Тред, посвященный прародителю всех С-подобных языков
Я вообще не знаю, что это должно значить. Текст остался от ОП-а самого первого треда.
Аноним 17/05/19 Птн 18:12:20 1401928265
.png (428Кб, 1211x492)
1211x492
>>1401777
>англоблядок
>сверхчеловек
Аноним 17/05/19 Птн 18:19:30 1401931266
>>1401906
Это тот, который выпилился?
Аноним 17/05/19 Птн 19:53:10 1401974267
>>1401798
Ядро винды пишется на плюсах, а не на си.
Аноним 17/05/19 Птн 20:05:36 1401987268
>>1401974
поэтому винда такое говно
Аноним 17/05/19 Птн 20:16:59 1401998269
>>1401974
Посмотри исходники какого-нибудь NIX и убедись в том, что шаблоны, стандартная библиотека плюсов, неявные вызовы в ядре на 100% неприменимы.
Аноним 17/05/19 Птн 20:21:59 1402002270
Аноним 17/05/19 Птн 20:23:37 1402004271
>>1401974
>>1402002
На крестах частично дрова и некоторые подсистемы. Но по больше части на Си.
Аноним 17/05/19 Птн 20:52:09 1402030272
Аноны, пишу драйвер, использую стороннюю либу при инициализации, далее ею не пользуюсь, а весит она знатно, аж целый метр. В обычном приложении подгружаю длл по-надобности, потом выгружаю. А в ядре как эти дела делаются? Неужели придется отдельный драйвер пилить, его дергать и потом выгружать?
Аноним 18/05/19 Суб 00:30:13 1402199273
Подскажите почему код скомпилированный tcc работает на моей машине, но не работает на другой ?
>Невозможно запустить это приложение на вашем ПК
Аноним 18/05/19 Суб 00:53:35 1402222274
Способы sharing-а директорий между двумя mount namespace-ами при использовании setns (не clone и не unshare)? Хаки тоже подойдут.
Аноним 18/05/19 Суб 03:07:15 1402292275
comeon.jpg (476Кб, 2144x1608)
2144x1608
Значит так, бля. Аноны, я тут пробую линковаться с одним китайским SDK, и у меня undefined reference to '_imp__protseduraname@8'. А все дело в том, что в хэдере функции объявлены с __stdcall, и вызов protseduraname(NULL,NULL) превращается в _imp__protseduraname@8 (да, 8 байт на 2 указателя, это под win32), но в самом zalupaSDK.lib, как я выяснил при помощи nm, присутствует символ __imp__protseduraname@8, то есть 2 нижних подчеркивания в начале, а не одно. zalupaSDK.h и zalupaSDK.lib из одной коробки. Там вообще много хуйни непонятной, опечаток всяких, тем не менее, есть не ебу как благополучно собранный бинарь из всей этой ебанины. Собсно, вопрос... Как мне научить свой компилятор в эту обсосную конвенцию, чтоб он присрал везде __imp__ вместо _imp__?
Аноним 18/05/19 Суб 03:10:19 1402293276
Аноним 18/05/19 Суб 03:16:09 1402294277
>>1402293
хм.. неплохая идея. Отпидорить саму либу. Ведь отпидорятся и точки входа, и вызовы, если ее функции юзают друг друга. Шото я не подумал об этом.
Аноним 18/05/19 Суб 03:25:34 1402295278
>>1402292
> Как мне научить свой компилятор
> nm
Возьми компилятор и линкер у майкрософта, и все сразу станет хорошо.
Аноним 18/05/19 Суб 16:55:49 1402512279
https://ideone.com/obbqUR
Сделал программу для чтения строк из файла и записи их в список. Но при выводе после последней строки выводится (null) и программа выдает ошибку. Почему?
Аноним 18/05/19 Суб 18:19:37 1402546280
>>1402512
Ясно, я случайно поставил точку с запятой после ифа. Час искал ошибку, пиздос.
Аноним 18/05/19 Суб 18:43:24 1402558281
Что почитать про инторнеты в си? Нашел unix network programming, годнота?
Аноним 18/05/19 Суб 22:06:28 1402651282
>>1402295
Мне не стало хорошо. Я на линуксе сижу.
Аноним 18/05/19 Суб 22:12:57 1402654283
>>1402651
Мешать код от разных компиляторов - не очень хорошая идея в принципе. А на линуксе у тебя есть вайн, а в вайн ты можешь притащить билдтулзы какие-нибудь от 2005 студии, они весят 150 метров, считая Platform SDK.
Аноним 18/05/19 Суб 22:31:44 1402662284
>>1402654
шото у меня не гугляцца эти билдтулзы
Аноним 18/05/19 Суб 22:36:09 1402666285
>>1402654
Короче, на сайте Майкрософта нашел только от 2019 студии. Просит .NET Framework 4.6. Нахуй мне вся ультрасовременщина. Надеюсь, в один прекрасный день заскучавшему террористу приглянутся дети кого-нибудь покрупнее из этой ебучей корпорейшн.
Аноним 18/05/19 Суб 23:40:30 1402719286
>>1393395 (OP)
Не хочу создавать отдельный тред, спрошу тут. Зачем нужен Си, если есть С++ и другие языки? Зачем эта какуля мамонта? Объективно, что можно на Си, но нельзя на С++? Вот на Си дохера что нельзя.
Аноним 18/05/19 Суб 23:57:09 1402739287
>>1402719
Чисто из рантаймовых соображений:
Си: Минимальный рантайм, малюсенькая стандартная библиотека, почти нет скрытых от глаза операций, реализуется за пару дней на любой железке/проце.
Плюсы: толстый рантайм (отвечает за инициализацию статиков, их thread-safety), большая стандартная библиотека которая ещё и сама оченб часто лезет к маллоку за памятью, много "магических" вещей (типа конструкторов, исключений, RTTI, виртуальные таблицы, захватывающие лямбды и тд и тп - это всё добавляет невидимый код), темплейты насилуют линкер и заставляют всё собираться в 50 (или больше) раз медленнее, сама имплементация реализуется очень долго и муторно.

Про семантику вообще молчу, в C++ она на три порядка сложнее. Вот расскажи, не читая cppreference, что такое deferred dynamic initialization или Koenig lookup. Кстати, ты знал, что есть такая вещь как Function try block? Я только в том году прочитал. Я сам пишу на C++ на работе, и мне нравится. Но я также знаю и людей, которые аргументировано терпеть их не могут.
Аноним 19/05/19 Вск 00:01:54 1402740288
>>1402739
Мне не нравится си плюс плюс, потому что фич много и много их может не стать с новым стандартом.
А нравится мне в нем то, что он генерирует код лучше, чем Си, если использовать те же классы и темплейты.
Аноним 19/05/19 Вск 00:05:14 1402742289
>>1402739
>Я сам пишу на C++ на работе, и мне нравится. Но я также знаю и людей, которые аргументировано терпеть их не могут.
Это не аргумент.
>Си: Минимальный рантайм, малюсенькая стандартная библиотека
Тебя никто не заставляет использовать весь функционал, но он у тебя есть и реализован без костылей. Твое высказывание равносильно " в луже тепло плескаться, а в море холодно"
>>1402740
~
Аноним 19/05/19 Вск 00:06:49 1402743290
>>1402719
Другие языки тормозят.
Аноним 19/05/19 Вск 00:09:26 1402744291
>>1402743
Си аналогично кряхтит на стадии компиляции, а сказки про быстродействие программы остаются лишь сказками.
Аноним 19/05/19 Вск 00:22:51 1402749292
>>1402742
> реализован без костылей
Только человек, никогда не писавший код с шаблонами, может употреблять это выражение рядом с C++.
Аноним 19/05/19 Вск 00:41:32 1402757293
>>1402742
>Тебя никто не заставляет использовать весь функционал
Тот факт, что другой функционал есть и занимает очень значительную долю фронт-энда (а с некоторыми фичами, которые касаются линкера и рантайма, ещё и бэк-энда) компилятора означает, что на подмножеством, которым пользуешься конкретно ты, выделено было не так много времени, как тебе хотелось. Да и C++ такой язык, что ты можешь наступить на грабли случайно, даже не сам этого не увидев. В обычных Сях все грабли лежат на полочке, чтобы ты их сам положил в нужное место и наступил.
Аноним 19/05/19 Вск 00:56:12 1402764294
>>1402719
В Сях нет ООП, в Крестах есть. Следовательно, на Си писать в целом легче лично мне.
Аноним 19/05/19 Вск 01:40:20 1402795295
19/05/19 Вск 02:02:47 1402809296
>>1402795
Это тред для хелловорлдов, никто не знает.
Аноним 19/05/19 Вск 06:26:13 1402829297
>>1402719
>Зачем нужен Си, если есть С++ и другие языки?
Си не нужен, ведь С++ делает то же и намного больше и лучше.
Но Си-тред нужен, для обсуждения процедурного программирования, т.к. С++-тред засран ООП, функциональщиной и прочим ненужным говном.
Аноним 19/05/19 Вск 08:28:04 1402842298
Не могу понять как работает fgets. Вот создал я txt файл, ввел туда 10 строк по 5 символов в каждой, в ст открыл этот файл, написал
fgets(mass, 6, filename), где 6 судя по описанию это количество символов +1.
Так вот, считал первую строку, она вывеласьхотя почему то вместе с 5 буквами был символ перехода на новую строку, отлично, снова запускаю fgets, и она уже нихуя не выдаёт. Почему?
Аноним 19/05/19 Вск 08:29:38 1402843299
Аноним 19/05/19 Вск 08:34:29 1402844300
>>1402843
А зачем код?
Ну вот например
char word[6]
fgets(word, 6,filename);
printf("%s", word) :
fgets(word, 6,filename);
printf("%s", word) :
Аноним 19/05/19 Вск 09:53:10 1402860301
test
Аноним 19/05/19 Вск 10:18:52 1402867302
0C6BFCD9-B9D0-4[...].jpeg (65Кб, 1280x720)
1280x720
Двач наверное мочи хлебнул, потому что куда-то все мои посты подевались из этого треда.
Короче вопрос в чем, объясните мне пожалуйста таинства TCC.
Читал где-то (тут или нет, не помню), что как таковой оптимизации в TCC нет, вернее она есть, но не в том виде в каком она есть в GCC например.
И тем не менее мне непонятна магия размера бинарного файла.
У TCC это 2-4Кб, у GCC 100-200Кб.
Как TCC собирает такой маленький файл ?
Почему в DevCpp(GCC) такой собрать не получается ни с какими опциями для оптимизации ?
Ну и самый важный вопрос, почему мой бинарный файл собранный TCC не запустился на другой машине ?
На это как-то влияет 32/64 битовость системы ?
У меня если что 64 бита.
19/05/19 Вск 10:45:25 1402869303
>>1402844
> А зачем код?
Ну ты ведь хочешь знать, где ты не прав?

> fgets(word, 6,filename);
> filename
И как, работает? Настоящий код неси.

> хотя почему то вместе с 5 буквами был символ перехода на новую строку
Где-то ты пиздишь, потому что если у тебя в файле строки по 5 символов, а в fgets ты передаешь 6, то шестым будет \0, и символ новой строки просто некуда воткнуть. Но в целом суть именно в этом. Ты либо читаешь "строка" + \r первым fgets и \n вторым, либо читаешь "строка" первым и \r\n вторым.

>>1402867
> как таковой оптимизации в TCC нет
Да. Максимум они вроде constant folding они завозили, но инструкции побыстрее или покороче оно не выбирает.

> Как TCC собирает такой маленький файл ?
Это не про компилятор, это больше про линкер. TCC линкуется к старому сишному рантайму MSVCRT.DLL, плюс статически линкуется минимальный стартап и больше ничего. MinGW тоже к MSVCRT линкуется, но в дополнение к этому у него есть патчи для поддержки C99 (сравни printf("%zu\n", sizeof(int)) в TCC и MinGW GCC), есть некоторое количество лишнего говна, которое всегда линкуется, даже если не используется (вот я смотрю, в 8.2 уже какие-то opendir притащили, какие-то glob - зачем?). Поэтому минимальный размер у GCC в районе десятка-двух килобайт. Если у тебя 100К, то ты просто -s забыл, и у тебя кроме кода куча отладочных символов в бинарнике.

> почему мой бинарный файл собранный TCC не запустился на другой машине
Ну нам-то откуда знать? Ты ведь файл так и не принес.
Аноним 19/05/19 Вск 10:47:21 1402870304
>>1402842
>как работает fgets
Как написано в документации. Ты русекодебил, неспособный читать? Тогда справедливо соси хуй.
Аноним 19/05/19 Вск 12:41:02 1402926305
Допустим мне нужно сделать в консоли несколько команд. Ввожу например цифру 5, и надо чтоб программа считала строку, которую я затем введу. Как это сделать?
Аноним 19/05/19 Вск 12:46:41 1402936306
>>1402870
Так-то и на русеке описания хоть жопой жуй.
Аноним 19/05/19 Вск 12:58:10 1402951307
>>1402926
Да можно как угодно. Можно через if, можно через switch/case.
Аноним 19/05/19 Вск 13:01:11 1402954308
>>1402926
> считала строку
gets()
с тебя 100$
Аноним 19/05/19 Вск 13:34:42 1402986309
Аноним 19/05/19 Вск 16:40:49 1403285310
изображение.png (16Кб, 391x269)
391x269
изображение.png (25Кб, 518x250)
518x250
Чому так?
Тут же чередуются команды прочитать букву / вывести букву.
Значит каждая буква должна по два раза подряд повторяться. А получается, что в один int целая строка запоминается.
Аноним 19/05/19 Вск 17:07:26 1403301311
>>1403285
Зависит от настроек терминала. Терминал может отправлять инфу в программу построчно (по умолчанию) или посимвольно. У тебя отправляется построчно. Тоесть ты сначала вводишь строку, потом она сразу вся уходит в программу и начинает отрабатавать твой цикл. В линуксе если тебе надо посимволная обработка то нужно перейти в "noncanonical mode" с помощью вызова tcsetattr, может еще что поравить. Если у тебя операционная система виндоуз то не знаю, возможно ты соснул. Там должно быть что-то свое, _getch какой-то или еще какая хуйня.
Аноним 19/05/19 Вск 17:07:43 1403302312
>>1403285
С чего повторяться то должна? Читает букву из введённого, выводит ее ниже.
Аноним 19/05/19 Вск 17:17:30 1403306313
>>1403302
>С чего повторяться то должна?
Потомучто в программе нет перевода строки.

>Читает букву
Фактически за один шаг цикла читается вся строка
Аноним 19/05/19 Вск 17:20:34 1403307314
>>1403306
> Фактически за один шаг цикла читается вся строка
Каждый шаг цикла читается один символ. Просто символы появляются в stdin сразу целой срокой. Пока ты вводишь строку цикл не работает (stdin пустой). Как только ввел цикл считывает по одному символу и выводит. Можешь добавить какой-то счетчик итераций в цикл.
Аноним 19/05/19 Вск 17:28:51 1403310315
>>1402869
Принес же, ты посмотри, наших с тобой постов нет.
Аноним 19/05/19 Вск 17:29:10 1403311316
Аноним 19/05/19 Вск 18:24:25 1403323317
19/05/19 Вск 20:51:15 1403443318
>>1402986
Что именно не работает? https://ideone.com/ScXKqq

>>1403310
> наших с тобой постов нет
И не только наших.В любом случае, с описанием "ничего не работает" я не могу тебе помочь. Нужен или файл (а ссылку, если она была, я увидеть не успел), или больше инфы.
Аноним 20/05/19 Пнд 02:17:03 1403596319
Аноним 20/05/19 Пнд 17:16:53 1403874320
.png (51Кб, 766x366)
766x366
.png (38Кб, 712x248)
712x248
Как реализовать нормальных хендлинг ошибок? Неохота писать первый пикрил каждый раз, думаю использовать самопальное макро как на втором пике, но вопрос - насколько это читабельно? Что думаете?
Аноним 20/05/19 Пнд 18:00:15 1403897321
>>1403874
Сокращенная запись тебе принципиально не нравится?
Аноним 20/05/19 Пнд 18:08:24 1403900322
Аноним 20/05/19 Пнд 19:20:42 1403922323
>>1403900
return some_check()
? do_something_else(kek)
: (error("FUCK YOU"), NULL);
Аноним 20/05/19 Пнд 19:24:26 1403923324
>>1403922
А есть в этом смысл? Память экономится, или еще что то? Потому что на читаемости подобные конструкции сказываются не лучшим образом.
Аноним 20/05/19 Пнд 20:20:24 1403951325
>>1403923
борда отступы хавает
Аноним 20/05/19 Пнд 20:24:14 1403956326
>>1403922
А если там проверок больше? Но вообще основной поинт был в том что бы не писать это логгирование с else {} каждый раз и вынести их в отдельный макрос.
Аноним 20/05/19 Пнд 21:13:43 1403973327
>>1403956
Зачем делать макрос? Сделай функцию.
Аноним 20/05/19 Пнд 21:17:21 1403976328
>>1403973
Мне нужно возвращать значение из родительской функции в случае неудачи, простая функция так не может.
Аноним 20/05/19 Пнд 22:33:36 1404011329
>>1403976
ну так вызывай вызывай функцию так
return foonktsyja(...);
Аноним 20/05/19 Пнд 22:34:19 1404012330
>>1403976
а вообще, error handling - от лукаваго
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов