М.Двач / Программирование

Двач.hk не отвечает.
Вы видите копию треда, сохраненную 16 июля 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

78 Кб, 792x1023
C Programming Language #45 /clang/ # OP 3 мая, 13:26 1393395 В конец треда | Веб

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

Пожалуйста, пользуйтесь 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)

Ответы393509401152401704401732402719

2 3 мая, 13:46 2 1393401

Вкатился, снова.

3 3 мая, 14:16 3 1393412

этот си ваще реально полностью выучить

Ответы393414393435399238

4 3 мая, 14:17 4 1393413

>>1393385
В случае с файлом на диске буферизация нужна, чтоб диск не дергался за каждым putchar. Вывод копится в оперативке и большими кусками сливается на диск. А вот когда это консоль, то молчать, пока не накопится 4 килобайта текста, неприемлемо, т.к. на твои глаза инфа должна поступать сразу для нормальной интерактивной работы. Можно было бы немедленно выводить каждую букву, но это, хоть и не диск, тоже тормозит работу, поскольку системный вызов для вывода данных куда-либо за пределы оперативки процесса (в твой терминал, который есть другой процесс) - более сложная процедура, чем просто отложить в буфер. Компромиссное решение - выводить каждую строчку, то есть делать fflush по каждом \n. Но иногда программа хочет вывести строчку, не "нажимая ENTER" в конце, например, чтоб оставить мигающий курсор за двоеточием, и ты красиво впечатал свое имя. Логично, что "Type your name: _" должно отобразиться сразу, и для такого распространенного случая предусмотрен дополнительный вызов fflush при входе в scanf.

>>1393388
хз, что кроме K&R посоветовать... Вкатывался после Паскаля на уровне мегамейнов (дополнительные процедуры не использовал почти).

5 3 мая, 14:19 5 1393414

>>1393412
все правила языка и функции маленькой стандартной библиотеки - нехуй делать. Кодить на уровне разработчика операционных систем, создавая макросами абстракции помудренее C++ - искусство, которому можно посвятить десятилетия.

6 3 мая, 14:26 6 1393419

>>1393385
>достаточно ли пока понимания этих функций по принципу черного ящика
с головой

7 3 мая, 14:57 7 1393435

>>1393412
Было бы учить чего, вполне реально. Вот насчет С++ можно подумать.

8 3 мая, 19:20 8 1393509

>>1393395 (OP)
Пытаюсь отправить имя файла по сокету.

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

Отправляю: hello.exe\x00
Выводит: hello.exPо

Ответы393524

9 3 мая, 19:23 9 1393513

Немного идиотских вопросов. Есть две переменные:
char ★string;
char ★★tokens;

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

tokens[0] указывает на начало string. Если я делаю free(tokens), то не освободится ли случаем память, занятая под string? Возникло подозрение, что именно так и происходит, поскольку на освобождении string после освобождения tokens программа падает.

Ответы393520

10 3 мая, 19:41 10 1393520

>>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) будет багом.

Ответы393555

11 3 мая, 19:49 11 1393524

>>1393509
> sizeof(filename)
sizeof(char *) это константа, в 64-битной системе оно равно 8. Ты получаешь 8 валидных байтов и мусор. Как думаешь, может быть, здесь есть какая-то связь?

Ответы393723

12 3 мая, 21:20 12 1393555

>>1393520
Хм, спасибо. Ладно, пусть пока память подтекает, не критично.

524 Кб, 431x677
13 4 мая, 10:31 13 1393723

>>1393524
sizeof исправил, указал просто 9.
вывел: hello.exe

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

Попробовал в malloc тоже передать просто 9, результат тот же самый - выводит мусор.

Ответы393815

14 4 мая, 14:31 14 1393815

>>1393723
Охуеть, правда? Размер массива равен размеру массива, а размер указателя - размеру указателя!

Ответы393902

69 Кб, 600x450
15 4 мая, 17:50 15 1393902

>>1393815
Ладно я разобрался, вот еще вопрос.
После загрузки я должен выполнить файл (CreateProcess()) передав ему 1 аргумент: GetModuleFileName()

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

>CreateProcess(filename, args)

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

То есть по моим расчётам проканает запустить процесс с типом имени char и аргументом типа LPSTR ?

Ответы393911

16 4 мая, 18:04 16 1393911

>>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 тоже, да.

Ответы393925

17 4 мая, 18:25 17 1393925

>>1393911
>Кто тебе такую хуйню сказал
docs.microsoft.com

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

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

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

В общем надо имя файла из char конвертировать в wchar ?

Ответы393980394310

52 Кб, 697x541
18 4 мая, 19:37 18 1393979

А дальше что?

19 4 мая, 19:37 19 1393980

>>1393925
Ты вообще учил С? Вон в шапке полно книг, за неделю все прочитаешь и глупые вопросы сами собой отпадут.

20 4 мая, 19:58 20 1393998

Приветствую экспертов.
Есть ли простое правило/формула по представлению/разиминование указателей? Для начала частный случай многомерных массивов.

Спасибо.

Ответы394023394025394026

21 4 мая, 20:34 21 1394023

>>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, и т.д.
}

Ответы394025

22 4 мая, 20:37 22 1394025

>>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 ], и т.д.
}

Ответы394026

23 4 мая, 20:38 23 1394026

>>1393998
>>1394025
ну йообана! Там a[n][m] должно быть..

24 4 мая, 21:58 24 1394089

Анон из предыдущего треда, у которого программа сожрала съела 1.8 гигабайт памяти и ей перестала выделяться память. Переписал все используемые объекты на динамическую память, и о чудо - на тех же данных занято всего 12.5 мегабайт! Осталось найти причину SIGTRAP при попытке освободить временный буфер, и тогда и утечка памяти уйдет.

Ответы394115

25 4 мая, 22:27 25 1394115

>>1394089
Не помню точно, о чем шла речь в прошлом треде, но у меня как-то тоже текла память, и я просто дописал вызов malloc_trim(0) после всей содомии с тысячекратными malloc()/free(), и гигабайтов мусора как не бывало. Процесс культурно продолжил жить, уложившись обратно в свои пару мегабайт.

81 Кб, 692x366
26 4 мая, 22:53 26 1394142

Почему запрашивает 2 значения? Когда должно только Х запрашивать?

Ответы394147

27 4 мая, 23:01 27 1394147

>>1394142
\n убери.

Ответы394203

28 4 мая, 23:35 28 1394203

>>1394147
Он не запрашивает, а просто переводит курсор на новую строку и не воспринимает то что я там ввожу??

29 5 мая, 02:24 29 1394310

>>1393925
> То есть мне надо будет конкатенацию filename и буфера GetModuleFileName делать ?
А зачем тебе вообще GetModuleFilename()? Ты себя запускать собрался? Если нужны аргументы командной строки - да, конкатенация, и про кавычки вокруг пути с пробелами не забудь. Если аргументов не передаешь, то просто положи имя исполняемого файла в первый параметр, а командную строку система сама дорисует.

> В общем надо имя файла из char конвертировать в wchar ?
Если нужен русский, а локаль в системе не русская - да, надо конвертировать. Вообще, в 2019 давно надо полностью юникодные программы писать.

Ответы394566

30 5 мая, 18:23 30 1394566

>>1394310
Не себя, а передать путь до себя в кач-ве аргумента.

>давно надо

Я бы рад, но вот не очень понимаю даже самые простые вещи.
Где бы почитать о win32api и юникоде.

Ответы394685

31 5 мая, 19:41 31 1394608

А как делают прогрессбар в консольке что он в одной строке отображается?

Ответы394610394685394688

32 5 мая, 19:44 32 1394610

>>1394608
https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_sequences

33 6 мая, 00:41 33 1394685

>>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); } // Ну должно работать, поправишь если что.

Ответы394750

34 6 мая, 00:47 34 1394688

>>1394608
Я дергал WinAPI, поскольку писал под Шиндовс. Нахуй это прогрессбар не нужен был, но все же

35 6 мая, 02:45 35 1394702

С вопросами про configure и кросстулчейны это к вам?

36 6 мая, 08:41 36 1394727

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

37 6 мая, 08:51 37 1394731

Какой короткий код с ошибкой можно на футболку нанести чтобы у каждого программиста бомбило бы с этой ошибки?

Ответы394751394759394780394841394854394892395305

38 6 мая, 10:17 38 1394750

>>1394685
Это конечно безусловно полезно и интересно, только вот мне надо всего 1 функцию использовать, как я предполагаю MultiByteToWideChar.
И вот ради нее убиться в чтение и понимание глубинных особенностей работы С с winapi ниахота

39 6 мая, 10:18 39 1394751

>>1394731
int n = "5";

Ответы394757

40 6 мая, 10:38 40 1394757

>>1394751
Слабовато.

41 6 мая, 10:50 41 1394759

>>1394731
Может просто Hello world.

42 6 мая, 11:58 42 1394780

>>1394731
Тут посмотри.
https://www.govnokod.ru/c

43 6 мая, 16:17 43 1394819

Ананасы, а какие основные навыки сейчас требуют у эмбеддед синьеров-помидоров с 4к+ зарплатой?

Ответы399179

34 Кб, 612x383
44 6 мая, 16:53 44 1394821

Значит так блять !

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

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

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

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

Error code:2

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

К слову, выводить полученное имя он тоже не выводит, однако вот если имя передать в функцию CreateFileW, файл создает с правильным именем.

Ответы394841

sage 45 6 мая, 18:59 45 1394841

>>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. Прочитай любую, чтобы хотя бы слегка понимать язык, на котором пишешь. Заебал уже.

46 6 мая, 19:47 46 1394854

>>1394731
#define swap(a,b) {typeof(a) c = a; a = b; b = c;}
...
swap(c,d);

47 6 мая, 21:36 47 1394892

>>1394731
char *a;
strcpy(a, "Hello World");

Ответы394900

48 6 мая, 21:39 48 1394893

ewgeg

49 6 мая, 21:56 49 1394900

>>1394892

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

$ ./laba1
Hello, W$

/∗ C sucks! ∗/

50 6 мая, 22:01 50 1394904

Бля, какое же С обосанное говнище. 250 строк кода, чтобы написать обоссанные Крестики-нолики с возмжностьюю загрузки и сохранения, 250! Что-нибудь вообще серьезное на этом говне мамонта можно писать или только дрочиться со таким говном, тратить хуеву тучу строк кода, чтобы тебе в итоге по губам поводили?

Ответы394934394958394992394994395013395226

51 6 мая, 23:05 51 1394922

)

sage 52 6 мая, 23:40 52 1394934

>>1394904
Пиши в одну строчку, кто ж тебе мешает?

Ответы394945

53 7 мая, 00:07 53 1394945

>>1394934
Душный еблан, ты? Ты понял, что я имел ввиду

Ответы394978

54 7 мая, 00:38 54 1394958

>>1394904
ты просто писать не умеешь

Ответы394974

55 7 мая, 01:12 55 1394974

>>1394958
Я имел ввиду то, что в современных реалиях С - никчемное говно, требующее дохуя, а дающее нихуя.

Ответы394975

56 7 мая, 01:28 56 1394975

>>1394974
C не подлежит оценке.

sage 57 7 мая, 01:35 57 1394978

>>1394945
Понял. И ты тоже понял. Используй либы, будет как на других языках, вплоть до: int main(void) { return tic_tac_toe_from_library(); }. Си в этом плане ничем не отличается от какого-нибудь жаваскрипта, ты можешь писать сам, а можешь скатиться до npm install isOdd ой, у нас же нет npm... к счастью.

58 7 мая, 03:47 58 1394992

>>1394904
Нихуя питонодети ахуели, 250 строк кода и уже мозг закипает. У меня на хеллоуворлды по 2-5к строк уходит. Короче уебывай из треда.

59 7 мая, 03:51 59 1394994

>>1394904
250 это немного особенно если там алгоритм нормальный который не выиграть. я на джс (на жиквери лол) писал в 350+ строк не считая штмл и ксс

Ответы395003

82 Кб, 684x660
60 7 мая, 05:50 60 1395003

>>1394994
> крестики-нолики
> не выиграть

Ответы395005

61 7 мая, 05:59 61 1395005

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

62 7 мая, 07:33 62 1395013

>>1394904
Кармак смог написать свой чудесный идтек1, а ты обычный вкатчик-неосилятор. Возвращайся на завод с которого ты вылез.

Ответы395027406070

63 7 мая, 08:47 63 1395027

>>1395013
Ну ты сравнил, конечно. Кармака (у которого до идтека за спиной тонны опыта) и обычного Васяна.
Мимо

Ответы395040395373

64 7 мая, 09:45 64 1395040

>>1395027
Именно. Обычным васянам в программировании делать нечего, их там никогда не было, пока не появился быдлоскриптинг, куда они и набежали, по ошибке названный тоже "программированием". Но си это не быдлоскрипт, поэтому отсеивает таких залетушек на ура.

Ответы395042395054395147

65 7 мая, 09:49 65 1395042

>>1395040
Ну ты крутой.

66 7 мая, 10:25 66 1395054

>>1395040
Когда компьютеры были большие, а программы маленькие...

67 7 мая, 13:13 67 1395147

>>1395040
Все задачи в К&P порешал?

Ответы395149

68 7 мая, 13:14 68 1395149

>>1395147
Да.
Еще вопросы?

Ответы395157

69 7 мая, 13:26 69 1395157

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

Ответы395162395166

70 7 мая, 13:31 70 1395162

>>1395157
>по главам
В основном.
>времени
Много, почти месяц.

71 7 мая, 13:33 71 1395166

>>1395157
Только тупое быдло вместо того, чтобы делать самому слушает чужие саксесс-стори. Да, именно от слова "сак", ты.

Ответы395170

72 7 мая, 13:37 72 1395170

>>1395166
Да я только начал, можешь посоветовать для совсем нюфагов К&P нормально или с чего то попроще можно начать?

Ответы395183

73 7 мая, 13:46 73 1395183

>>1395170
Ты что дурак конечно нет! Нужно начинать с ассемблера, электроники и устройства компьютера. Пока не понимаешь как работает 086, даже не притрагивайся к си, ну а потом эээ ну короче на кодварс найдешь все отьебись понял

Ответы395212395261

74 7 мая, 14:17 74 1395212

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

Ответы395214395248

75 7 мая, 14:21 75 1395214

>>1395212
>и железо и код были просты и понятны
Вообще-то чистый х86 реального режима очень простой - достаточно не лезть в ссе и прочее.
Сегменты можно просто игнорировать.

Ответы395386

76 7 мая, 14:40 76 1395226

>>1394904
Нахуя тебе в крестиках ноликах сохранение?

Ответы395412

77 7 мая, 15:01 77 1395248

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

Ответы395251

78 7 мая, 15:04 78 1395251

>>1395248
Ты разговариваешь с жиром, олигофрен.

79 7 мая, 15:10 79 1395257

Даёшь in-order процессоры в массы!

80 7 мая, 15:12 80 1395261

>>1395183
Гукин Д.
C для чайников
C этого кто нибудь начинал?

Ответы395277

81 7 мая, 15:54 81 1395277

>>1395261
Вот ещё такую
Дейтел П.Дж., Дейтел Х.М.
Как программировать на С
вроде в начале общие сведения о компьютерах идут.

Ответы395279

82 7 мая, 15:57 82 1395279

>>1395277
Может лучше js?

Ответы395288

83 7 мая, 16:18 83 1395288

>>1395279
Не слишком сложно, для начинающих пойдет?

84 7 мая, 17:21 84 1395305

>>1394731
if(a = 0) ...

52 Кб, 383x331
85 7 мая, 18:42 85 1395333

Сап.

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

На 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.

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

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

Ответы395346395352

86 7 мая, 19:07 86 1395346

>>1395333
wprintf пробовал?

Ответы395353

87 7 мая, 19:15 87 1395352

>>1395333
>BOM
Это для птдоров древний высер микромофта, нормальные люди его не используют, естемтвенго и принтв о нем не знает, чекай первые 2 байта и выводи с стретьего если твой питухоновский сервер зашкварен.

88 7 мая, 19:16 88 1395353

>>1395346
Нет, скажем так проблема вывода далеко не самая главная, что делать с ебучим BOM ?
Мне два одинаковых файла как бы не очень нужны, это конечно прикольно, можно клона какого-нибудь cmd.exe создать, но как вообще можно создать какое-то надежное сообщение между по сокетам между путоном и Си если приключаются вот такие истории ?
И нагуглить нихуя толком по wchar_t в питоне не могу, идея закодировать сама пришла в голову, но судя по работоспособности - идея была плохая.

Ответы395356395386

68 Кб, 700x489
89 7 мая, 19:22 89 1395356

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

Ответы395360

90 7 мая, 19:36 90 1395360

>>1395356
>для пидоров и смузихлебов
Месяц назад я бы поспорил.
В протоколе должна быть указана кодировка.
Как енто ?
Вот типа в питоне я делаю .encode(“UTF-16”) это есть указание кодировки, а в Си как ?
А функции виндовс которые заканчиваются на W (для них все и делается) в какой кодировке данные ждут ?
UTF-8/16 ? cp-1251 ? Тысячи их блять.
От чего такая анальная боль
Может ну его нахуй этот питон, смысла нет пытаться выдавить из него что-то годное ?

Ответы395362

91 7 мая, 19:44 91 1395362

>>1395360
>UTF-16
Все юзают утф8
>смысла нет пытаться выдавить из него что-то годное
Почему, пусть сервер шлет все в одной кодировке.

Ответы395365

92 7 мая, 19:51 92 1395365

>>1395362
То есть если с зашкварного питона я пошлю UTF-8 строку, мне ее на Си помещать так-же в wchar_t ?
А если мне нужно будет конкатенацию сделать с другой строкой типа wchar_t L" ", это возможно будет сделать ?
Функции виндовс кончающиеся на W поймут UTF-8 ?

Ответы395366395367395386

93 7 мая, 19:55 93 1395366

>>1395365
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setmode?view=vs-2019

Ответы395368

94 7 мая, 20:01 94 1395367

>>1395365
>будет конкатенацию
Пох, это просто байты, можешь их хоть memcp копировать, проблемы только при выводе на консоль ну и подсчет количества символов.

95 7 мая, 20:02 95 1395368

>>1395366
Пробовал делать сетмоде типа для того чтобы вывести UTF-16 текст.
Не помогло, наверное потому что выводил не wprintf.
То есть если я сделаю сетмод для utf-8, программа и функции winapi запонимают эту кодировку ?
И строки конкатить можно будет ?

Ответы395371

96 7 мая, 20:13 96 1395371

>>1395368
>чтобы вывести UTF-16 текст
Ну во первых под виндой ты соснешь, потому что там вывод не юникодовский, нужно сменить кодовою страницу
cmd.exe /k chcp 65001
Это вот по утф8, под утф16 гугли.
>конкатить
Они все ожидают строку заканчивающуюся 0, так что похуй, даже strcat сработает

Ответы395386395392

97 7 мая, 20:17 97 1395373

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

Ответы395375395443

98 7 мая, 20:20 98 1395375

>>1395373
>не мечтают о ящике крепкого пиваса
Вот сейчас обидно было

sage 99 7 мая, 20:42 99 1395386

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

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

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

>>1395371
> chcp 65001
Нормально работает начиная с десяточки. В старших версиях работает с оговорками, иногда проглатывает текст, иногда WriteConsole просто возвращает ошибку. Лучше так не делать.

Ответы395387

100 7 мая, 20:43 100 1395387

>>1395386
>Нормально работает начиная с десяточки.
Почему у меня не работает? А?

Ответы395391

sage 101 7 мая, 20:47 101 1395391

>>1395387
Что у тебя не работает? Оно меняет кодировку вводимого и выводимого текста, аналогично SetConsoleCP()/SetConsoleOutputCP(), больше ни на что не влияет. Но консоль винды работает (работала) с UTF-8 плохо, поэтому были проблемы. Решалось нестандартной консолью типа ConEmu.

Ответы395394

102 7 мая, 20:48 102 1395392

>>1395371
Насчет конката, я немного не так выразился.
Что совместить получится это понятно.
Приведу пример чтоб ты понял.

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

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

Какие могут возникнуть проблемы ?

Ответы395394395397

103 7 мая, 20:53 103 1395394

>>1395392
>Какие могут возникнуть проблемы ?
1. Прийти половина символа или не полная строка без 0 и ты соснешь.
2. Ты всегда знаешь сколько байтов получил, ничего кроме memcpy нинужно
>>1395391
> SetConsoleCP()/SetConsoleOutputCP()
Ну может и поможет, не юзал такое

sage 104 7 мая, 20:54 104 1395397

>>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 и т. д.).

Какие нахуй сетмоды, вы ебанулись?

Ответы395398

sage 105 7 мая, 20:56 105 1395398

>>1395397
> передаешь в CreateFileW
Ну с тем принтфом в CreateProcess, но суть не меняется и для strcpy/strcat.

106 7 мая, 21:17 106 1395412

>>1395226
Чтобы загрузить последнюю игру -_-

107 7 мая, 23:01 107 1395443

>>1395373
Как стать технарём-ноулайфером? Хочу вкатиться...

Ответы395448

108 7 мая, 23:23 108 1395448

>>1395443
Вот ты шутишь, а я хотел бы. Да тупой слишком, даже Си толком не осилил.

Ответы395452

109 7 мая, 23:29 109 1395452

>>1395448
Что ж поделать, у каждого своё предназначение в жизни. Кому-то приходится создавать автопилот для теслы, а кто-то должен вычищать блевотину бомжа с асфальта по утрам или шлёпать сайты на модном фреймворке.

Ответы395453

110 7 мая, 23:32 110 1395453

>>1395452
> шлёпать сайты на модном фреймворке.
Так это сложнее. Я пытался освоить верстку или там пых, но у меня мозг переклинило на Си. Да и то, на нем ничего сложнее zakaz_laba_12_4_kurs.c не выходит.

Ответы395537

111 8 мая, 05:48 111 1395537

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

Ответы395894

112 8 мая, 21:51 112 1395894

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

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

Ответы396111396185

113 9 мая, 01:34 113 1396111

>>1395894
>есть работа с памяться на низком уровне, но это не нужно для реализации алгоритмов.
Шта?

Sage 114 9 мая, 02:36 114 1396185

>>1395894
>работа с памятью на низком уровне
Чё это ваще значит?
>работа с памятью в си))))
Орнул.

Мне кажется что эту мантру повторяют из треда в тред только чудики вкатывальщики, вы откуда это берете? Компиляторы сижки на x86 даже к куче полного доступа не дают. Просто указатели на объекты складывают в лист. Вот это да, низкоуровнево пиздец. Си это сука не низкоуровневый язык, долбоеб. Это такая же каша из абстракций как питончик, который ты ненавидишь лишь потому что в соседнем треде так сказали. Все съеби.

Ответы396207396242

115 9 мая, 03:23 115 1396207

>>1396185
Почему я не могу работать кешем напрямую в Си?

Ответы396213

116 9 мая, 03:54 116 1396213

>>1396207
У тебя ошибка в ДНК

Ответы396216

117 9 мая, 04:00 117 1396216

>>1396213
Что ты несешь, юродивый?

Ответы396315

118 9 мая, 08:52 118 1396242

>>1396185
>на объекты складывают в лист
Какие нахуй объекты, какой лист? Наркоман

Ответы396315

119 9 мая, 12:32 119 1396315

>>1396216
>>1396242
Дебилов полон тред.

120 10 мая, 11:32 120 1396762

Функция хэширования, используемая в 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?

Ответы396814396958397156

121 10 мая, 13:17 121 1396814

>>1396762
Не делим, а берем остаток. Чтобы результат был в диапазоне от 0 до HASHSIZE-1.
31 особого смысла нести не должно. Функция хэширования по своей природе должна выдавать рандомный ответ, поэтому там часто используют странные магические цифры для дополнительной рандомности

Ответы396958

sage 122 10 мая, 15:17 122 1396958

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

>>1396814
> Почему умножаем на 31, почему делим на hashsize?
> 31 особого смысла нести не должно
HASHSIZE - простое число, чтобы как можно больше битов hashval влияли на вычисляемый индекс (например, если размер таблицы 128, мы бы фактически просто выбросили старшие биты hashval). 31 - простое (или хотя бы взаимно простое с 2sizeof(int) ∗ 8) число, чтобы при переполнении после вычисления 31 ∗ hashval, которое компьютер вычисляет как (31 ∗ hashval) % 2sizeof(int) ∗ 8 отброшенные биты влияли на результат. Поэтому хэш-функция со сдвигом (hashval = (hashval << x) ^ ∗s) хуже.

Ответы397083

123 10 мая, 17:46 123 1397083

>>1396958
Спасибо за развёрнутый ответ, но все же не понятно, при взятии остатка ведь может получиться, что у двух разных слов хэш будет одинаков, разве нет?

Ответы397102

sage 124 10 мая, 18:03 124 1397102

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

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

Элементы... Как, блин, по русски buckets сказать?

Ответы397111397127397148397162

125 10 мая, 18:10 125 1397111

>>1397102
Сколько ты зарабатываешь?

Ответы397130

126 10 мая, 18:28 126 1397127

>>1397102
http://web.karabuk.edu.tr/hakankutucu/CME222/MIT[1].Press.Introduction.to.Algorithms.2nd.Edition.eBook-TLFeBOOK.pdf
11.3.3 (со звездочкой) - страница 255 по навигации, 232 по печати. Пусть лежит.

127 10 мая, 18:34 127 1397130

>>1397111
Тебя про хэши на джуна будут спрашивать.

128 10 мая, 19:01 128 1397148

>>1397102
> а массив связанных списков,
Открытая адресация в разы лучше.

Ответы397187

129 10 мая, 19:06 129 1397156

>>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;
}

130 10 мая, 19:40 130 1397162

>>1397102
buckets - вёдра ячейки

sage 131 10 мая, 20:27 131 1397187

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

Ответы397191

132 10 мая, 20:42 132 1397191

>>1397187
Даже с ресайзом и рехэшем быстрее работает, главное не давать таблице заполнятся больше чем на 80%

133 11 мая, 01:07 133 1397321

Привет.
Пишу может не совсем по теме, но все-же.
Мне нужно разработать простую и легковесную систему администрирования чисто под Win32.

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

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

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

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

Каким функционалом такие системы должны обладать кроме RDP/FTP/SSH ?

134 11 мая, 01:16 134 1397323

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

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

И как мне теперь добраться, например, до значения A[1] через AB[]?

Ответы397326

135 11 мая, 01:25 135 1397326

>>1397323
AB[0][1]

Ответы397329397355

136 11 мая, 01:29 136 1397329

>>1397326
Блин, так просто. А такого наворотил. Спасибо.

137 11 мая, 02:03 137 1397339

Нужно написать идеально сбалансированное дерево поиска, на уровне кода laba_10.c. По отдельности (идеально сбалансированное и поиска) вроде как понятно, но совместить не могу никак. Есть какие-нибудь советы?

138 11 мая, 02:35 138 1397355

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

Например, если я попытаюсь получить значение AB[0][3], то мне выдаст значение AB[1][1] т.е. "One" из массива B. А еще у меня из-за этой херни половина памяти ардуинки сожралось — пытался определить величину массива, но это уже другой вопрос (а может и тот же).

Ответы397364

139 11 мая, 04:46 139 1397364

>>1397355
> данные из ячейки, которая выходит за пределы массива
Доктор, мне больно, когда я делаю так. Ну, не делайте так.

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

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

Ответы397400

140 11 мая, 10:25 140 1397400

>>1397364
Спасибо, получилось. Я думал, что раз я определил массив, то у него есть начало и конец.

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

Т.е. на стадии объявления мой мк забит на 14%, а как только я начинаю использовать цикл вывода данных на экран из массива, то динамическая память занимает уже 50%

Ответы397565

141 11 мая, 14:13 141 1397565

>>1397400
Объявление вообще не соответствует никакому действию в маш.коде, это лишь указание компилятору, на какую часть личного адресного пространства рассчитывает то или иное имя с начала использования. Раздувать сегмент стека компилятор скорее всего станет непосредственно перед использованием, как если бы ты объявил его в этом месте. Но ты имеешь право объявить раньше для красоты.

Ответы397594

142 11 мая, 15:11 142 1397594

>>1397565
Я понял, спасибо за ответ.

143 12 мая, 14:49 143 1398322

А есть какая-нибудь либа-обертка с вызовами POSIX для WinAPI? Самому писать как-то не хочется.

Ответы398334

sage 144 12 мая, 15:07 144 1398334

>>1398322
cygwin1.dll. Собирай из-под cygwin, в общем.

Ответы398344

145 12 мая, 15:18 145 1398344

>>1398334
Да не, не портирую я ничего. Просто POSIX как-то лаконичнее и удобнее, что-ли.

Ответы398370

146 12 мая, 15:47 146 1398370

>>1398344
А мне винапи удобнее. Есть обертка посикса под винапи?

Ответы398440

147 12 мая, 17:52 147 1398440

>>1398370
wine

Ответы398811

148 13 мая, 02:36 148 1398811

>>1398440
wsl

63 Кб, 835x157
149 13 мая, 02:56 149 1398816

Ребят, привет, у меня тут возник вопрос. Я написала построение бинарного дерева поиска с помощью обычного дерева, построенного со строки, введенной интерактивно. Но сделать возможность построения обычного дерева с помощью аргументов командной строки -fin и -fout и файлов, я чот хз как. Кто нибудь знает, как это сделать?
https://pastebin.com/FCQ8ELNp

Ответы398817398821399013399020399023

150 13 мая, 03:09 150 1398817

>>1398816
>Я написала
где сиськи на фоне иде

Ответы398818

151 13 мая, 03:11 151 1398818

>>1398817
-_-

152 13 мая, 06:12 152 1398821

>>1398816
Гугли
>С read data from file

>С parse data from file

>С write data to file

153 13 мая, 14:35 153 1399013

>>1398816
getopt

154 13 мая, 14:42 154 1399020

>>1398816
>newuzel
женюсь нахуй

Sage 155 13 мая, 14:45 155 1399023

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

СУКА БЛЯТЬ ПОЧЕМУ НЕ РАБОТАЕТ 156 13 мая, 15:20 156 1399058

87 Кб, 957x527197 Кб, 731x54216 Кб, 594x29384 Кб, 865x646

Почему не компилится залупа на четырех пикрелейтедах? Линкую shared library к простому приложению, объектники собираются нормально, а вот уже во время линковки объектников и библиотеки вываливается залупа unresolved references. Разве они не должны при линковке зарезолвиться? Пробовал по всякому менять порядок параметров в gcc, не помогло. Чё ему не нравится?

Ответы399080399104

157 13 мая, 16:17 157 1399080

>>1399058
Страдай, линуксоблядь. У vs-бояр все компилится.

Ответы399089

209 Кб, 1366x768
158 13 мая, 16:54 158 1399089

>>1399080
Да не бейте лучше обоссыте линупс из под виртуалки я нормальный вон видишь даже вижак на панели задач ежже

159 13 мая, 17:19 159 1399104

>>1399058
Библиотеки не находятся, вначале ручками закомпиль, потом маке делай

Ответы399119

160 13 мая, 17:35 160 1399119

>>1399104
Так а мейк мне нахуя тогда нужен, если я чё то еще руками буду делать? И почему не находятся? Я же ему русским языком говорю -L{путь к либе для линкования} и -Wl,-rpath={путь к либе} чтобы загрузчик эльфа знал, где ее искать. Тем временем я уже попробовал в /usr/lib и /usr/local/lib пихать printhello.so и делать чмод 755 всё в том же мейкфайле - не помогло.

Ответы399123

161 13 мая, 17:45 161 1399123

>>1399119
И само чо интересное, компайлер моросит именно на extern-переменные, а на функцию, которая в том же хэдере - нет. Чому так то блять?
inb4 далбаёб переменные в шейрд библиотеках хранят только быки и пидарасы а рогов я у тебя что то не вижу --- это чисто в образовательных целях.

Ответы399141

sage 162 13 мая, 18:10 162 1399141

>>1399123
Так покажи printhello.c нам? Мы же не телепаты.

Ответы399146

68 Кб, 623x424
163 13 мая, 18:16 163 1399146

>>1399141
Ничего особенного. К нему вроде у гсс даже и претензий нет.

Ответы399147399150

sage 164 13 мая, 18:18 164 1399147

>>1399146
Я так и думал. Ты в своем .h объявил nameptr и
ucnameptr, а определить забыл. А так как оно у тебя явно extern, то самостоятельно компилятор тебе ниего не объявит. Создай в printhello.c переменные, и все заработает.

Ответы399149399150

165 13 мая, 18:19 165 1399149

>>1399147
Да, как раз об этом читаю сейчас статью https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/. Спасибо, сейчас попробую.

sage 166 13 мая, 18:19 166 1399150

>>1399146
>>1399147
Я имею в виду: .h оставь как было, в .c переменные без extern.

Ответы399157

234 Кб, 1164x511
167 13 мая, 18:27 167 1399157

>>1399150
Вроде и да, а вроде и нет. Функция в адресном пространстве либы, а переменные - в пространстве основного модуля. Так и должно быть? Или раз один инстанс шейрд либы может разными процессами дергаться, переменные либ всегда дублируются в памяти модулей из соображений безопасности?

Ответы399216

168 13 мая, 19:11 168 1399179

>>1394819
> Ананасы, а какие основные навыки сейчас требуют у эмбеддед синьеров-помидоров с 4к+ зарплатой?

бамп вопросу. Неужели итт нет относительно успешных сишкоблядей?

sage 169 13 мая, 19:52 169 1399216

>>1399157
Вкратце: система динамических библиотек в линуксе говно, она состоит из одних лишь костылей (в винде такой хуйни нет и близко, там все работает так, как ты предполагаешь). Скажи Source.c, что он тоже fpic, и настанет счастье.

Ответы399245399343405442

170 13 мая, 20:27 170 1399238

>>1393412
изи лол....

171 13 мая, 20:31 171 1399241

>>anon122131231324ь
Здаров наСИльники посоветуйте что актуального почитать о CTP/IP (и сокетах) с примерами на сишке

86 Кб, 604x584
172 13 мая, 20:38 172 1399245

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

173 13 мая, 20:46 173 1399251

Посоветуйте учебник по С11 на русском

спасибо

Ответы399286

174 13 мая, 21:33 174 1399286

>>1399251
> Посоветуйте учебник по С11 на русском
Советуем: https://www.ozon.ru/context/detail/id/147927650/
С вас две тысячи триста пятьдесят семь рублей.

Ответы399514

175 13 мая, 22:57 175 1399343

>>1399216
Давай не вкратце лучше, или где почитать

176 14 мая, 08:34 176 1399514

>>1399286
А как перевод, что то в отзывах пишут перевод кривоват и напечатано как на ксероксе.

Ответы399674

Sage 177 14 мая, 13:27 177 1399674

>>1399514
Там под каждой локализацией так пишут

178 14 мая, 15:41 178 1399739

Анон, float/double в си - это всегда IEEE 754 или возможны другие реализации в зависимости от платформы? И приведение float/double к int всегда будет работать одинаково или могут быть проблемы с портабельностью?

Ответы399742399960

179 14 мая, 15:44 179 1399742

>>1399739
Последний вопрос не актуален - только что увидел, что в K&R A6.3 детально описано, как должно выполняться преобразование.

180 14 мая, 20:35 180 1399960

>>1399739
> это всегда IEEE 754
Нет, к сожалению (#ifndef __STDC_IEC_559__). Но на распространенных платформах всегда.

181 15 мая, 06:01 181 1400241

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

Ответы400285400317405779

182 15 мая, 10:02 182 1400285

>>1400241
На степике смотрел?

Ответы400635

183 15 мая, 11:23 183 1400317

>>1400241
http://web.karabuk.edu.tr/hakankutucu/CME222/MIT[1].Press.Introduction.to.Algorithms.2nd.Edition.eBook-TLFeBOOK.pdf
Тут тебе и анализ алгоритмов с аналитическим доказательством ассимптотной сложности, и дополненения со всем необходимым математическим аппаратом (теория чисел, теория вероятности и т.д.), и много много всего, а главное - с упражнениями и задачами. Пусть объем не пугает, просто все изложено по-максимуму, да и никто не заставляет за раз все "выпивать". 3-е издание можно найти, лично я в Торе брал.

Ответы400322400635401592

43 Кб, 854x480
184 15 мая, 11:28 184 1400322

>>1400317
>в Торе брал
>когда есть кошерный libgen.io, на котором есть все технические книги
Палю годноту

Ответы400329

185 15 мая, 11:41 185 1400329

>>1400322
Там тоже только второе издание.

Ответы400330

17 Кб, 1953x99
186 15 мая, 11:43 186 1400330

>>1400329
У тебя контактные линзы выпали

187 15 мая, 12:02 187 1400344

Надо бы прикрутить-таки интерфейс на WinAPI к одной проге, да как-то боюсь за это браться. Что посоветуете?

Ответы401591

188 15 мая, 12:13 188 1400348

Почему итт так много виндузятников, которые пытаются что-то ковырять в винапи и прочей виндо-хуйне? Зачем вам это?
На чистом си сейчас пишут всерьез только в embedded юниках и bare metal, и имеет смысл вьезжать только в это. И деньги, судя по вакансиях, есть только тут. Разве я не прав?

Ответы400352401589

189 15 мая, 12:18 189 1400352

>>1400348
Ну, лично я, например, смог хоть как-то освоить только Си. Всякие кресты, шарпы, питоны и прочие джавы слишком сложные.

190 15 мая, 12:21 190 1400354

Подскажите, что писать-то на вашем си, если душа не лежит к программированию ядра и микроконтроллеров?

Ответы400415400416401588

191 15 мая, 13:18 191 1400415

>>1400354
Все. Вопрос в трудозатратности и целесообразности.

192 15 мая, 13:19 192 1400416

>>1400354
Всё что угодно.

193 15 мая, 14:43 193 1400457

Надо записать число в файл
srav=SortDataset(s,i);
fwrite(&srav,sizeof(int),2, table);
Но в файле записывается нечто невразумительное
 T в F ‹ \f
3 ]D џ EQ
Почему?

Ответы400472

194 15 мая, 14:55 194 1400472

>>1400457
Конвертируй в ascii символы то говно, которое ты записываешь в файл, и будет у тебя в нем тогда нечто более вразумительное
То есть
fwrite(&srav,sizeof(int),2, table); >> fprintf(table, "%d", srav) // я правда не понял, зачем ты "2" передаешь в fwrite, но логиту, я думаю, ты поймешь.

Ответы400486

195 15 мая, 15:05 195 1400486

>>1400472
Работает, спасибо, но все равно, почему мне такое говно выдавало?
Программа отсюда http://www.c-cpp.ru/content/fwrite тоже залупу печатает, хотя у автора видимо все работает.

Ответы400501

196 15 мая, 15:18 196 1400501

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

Ответы400506

197 15 мая, 15:22 197 1400506

>>1400501
Но почему при записи строк таким способом они вполне себе нормально читаются в блокноте?

Ответы400550400554

198 15 мая, 15:56 198 1400550

>>1400506
Ну так вот.

199 15 мая, 15:58 199 1400554

>>1400506
Каким способом нормально читаются? С помощью fprintf? fprtintf() конвертирует значение переменной в ascii коды и пишет эти коды в файл, а fwrite() просто записывает значение переменной в голом виде в файл без какой-либо конвертации.

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

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

Ответы400564

200 15 мая, 16:02 200 1400564

>>1400554
> Каким способом нормально читаются?
С помощью fwrite записывая массив строк они прекрасно читаются в блокноте, а вот с инт и флоат такое не прокатывает.

Ответы400595400604

201 15 мая, 16:31 201 1400595

>>1400564
Угомонись, дебил.

Ответы400609

202 15 мая, 16:41 202 1400604

>>1400564
А блять. Ну потому что строки в Си как раз представлены в ascii кодах.

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

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

Ответы401587

203 15 мая, 16:42 203 1400609

>>1400595
Хули ты злой такой?

Ответы400621

204 15 мая, 16:48 204 1400621

>>1400609
>злой
Вовсе нет, желаю тебе только добра.
Умри.

Ответы400623

6 Кб, 224x225
205 15 мая, 16:49 205 1400623

>>1400621
Лалка))

206 15 мая, 16:58 206 1400630

Сап /pr/

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

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

Почему не работает ?
Скину вот еще https://www.youtube.com/watch?v=4r93_6wZYTk в пример видео, код почти такой же, работает на 10-ке нормально.

Ответы400636

39 Кб, 419x500
207 15 мая, 17:11 207 1400635

>>1400285
Еще нет, вообще как-то прошёл мимо меня этот ресурс. Спасибо, посмотрю.

>>1400317
Собираюсь алгоритмы по пику проходить. До алгоритмов я решил именно комбинаторику прокачать.

Ответы400739

208 15 мая, 17:13 208 1400636

>>1400630
Ебать интересная у вас шарага. У нас такого не было нихуя у нас не было толком, мда

Ответы400638

209 15 мая, 17:14 209 1400638

>>1400636
Да самая обычная, факультет ИБ.

Ответы400641

210 15 мая, 17:17 210 1400641

>>1400638
Ну, я вот тоже с ИБ. Самое такое, что писали - POSIX "изучали". Форки, екзеклы, потоки, семафоры и прочее.

Ответы400647

211 15 мая, 17:24 211 1400647

>>1400641
понял, ну так есть какие-нибудь соображения ?

Ответы400650

212 15 мая, 17:28 212 1400650

>>1400647
А ты неткат на прослушку-то ставишь? Это как бы не просто так "реверс".

Ответы400652

213 15 мая, 17:30 213 1400652

>>1400650
nc -lp 9090
Там (на гитхабе) инструкция есть, все по ней делаю

Ответы400655

214 15 мая, 17:33 214 1400655

>>1400652
Сам шелл как стартуешь? Он порт и айпишник из аргументов тянет. Файрволл еще может возбудиться и резать трафик.

Ответы400658

215 15 мая, 17:35 215 1400658

>>1400655
Как понять как стартую ?
Я порт и айпишник захардкодил.

Ответы400666

84 Кб, 1366x768
216 15 мая, 17:42 216 1400666

>>1400658
Криво захардкодил, возможно? Все сразу завелось.

Ответы400672

217 15 мая, 17:50 217 1400672

>>1400666
Любопытненько.
Я просто скопипастил весь код изменив только адрес и порт и он заработал.
До этого я писал свой код который делает тоже самое, просто он был несколько поменьше и он не работал.
Ты хорошо разбираешься в Си ?

Ответы400676

218 15 мая, 17:54 218 1400676

>>1400672
Это Тимофей Хирьянов, он препод. Сечёт в программировании на уровне матана.

Ответы400677

219 15 мая, 17:55 219 1400677

>>1400676
О а можно с ним скорешиться ?
Я бы у него непонятки всякие спрашивал

Ответы400685400687

220 15 мая, 18:00 220 1400685

>>1400677
В гугле набери, додик

221 15 мая, 18:02 221 1400687

>>1400677
Можно, я разрешаю

118 Кб, 500x656
222 15 мая, 19:25 222 1400739

>>1400635
Лудшая книга по алгоритмам на C

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

Ответы403323

223 16 мая, 14:42 223 1401130

Какие в С есть методы интерполяции строки кроме snprintf(...)?

Ответы401585

224 16 мая, 15:12 224 1401152

>>1393395 (OP)
Написал GUI-программу на WinAPI, прописав в APIENTRY вызов FreeConsole();, однако при запуске программы окно консоли всё равно появляется на микросекунду и сразу же после этого закрывается. Жутко бесит, помогите исправить.

Ответы401156

225 16 мая, 15:17 225 1401156

>>1401152
Если MSVC, то попробуй https://stackoverflow.com/a/6882500

Ответы401182

226 16 мая, 15:56 226 1401182

>>1401156
А если gcc?

Ответы401217401237

227 16 мая, 16:37 227 1401217

>>1401182
-mwindows

Ответы401447

228 16 мая, 16:45 228 1401232

Что такое универсальная среда выполнения ?
В чем отличие кода использующего только функции winapi от кода использующего функции языка Си ?

Ответы401247

229 16 мая, 16:49 229 1401237

>>1401182
А если tcc и используется WinMain ?
Тоже окно появляется на секунду.

Ответы401247

sage 230 16 мая, 17:14 230 1401247

>>1401232
> Что такое универсальная среда выполнения
UCRT что ли? Кривое говно.

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

>>1401237
> А если tcc и используется WinMain ?
Да быть такого не может, он в таком случае, как и любой другой виндовый компилятор, автоматически выставляет -subsystem=windows. Показывай код.

231 16 мая, 18:39 231 1401317

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

Ответы401359401580

232 16 мая, 18:40 232 1401318

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

Ответы401359401579

233 16 мая, 19:49 233 1401359

>>1401317
> Что собственно значит это сохранение упорядоченности?
Значит список отсортирован (упорядочен), и нужно воткнуть элемент в подходящее для него место, а не просто в начало или конец списка.

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

> работа этой штуки в железе
Ничем не отличается от указателя на объект: когда ты ставишь звездочку перед именем указателя (или квадратные скобки с индексом после него), по указанному адресу происходят какие-то манипуляции со значением указанного типа (например, чтение или присваивание). Этим значением может быть, например, int, double, целая структура или другой указатель. Что ты с этим значением будешь делать дальше - целиком и полностью твое дело.

283 Кб, 350x350
234 16 мая, 21:42 234 1401447

>>1401217
>-mwindows
Спасибо, анон, то что надо.

235 17 мая, 01:14 235 1401579

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

236 17 мая, 01:16 236 1401580

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

Ответы405784

237 17 мая, 01:24 237 1401585

>>1401130
эк ты загнул
подозреваю что ответ будет таким: в си нет string interpolating, а composite formatting обеспечивается семейством функций printf ..

Ответы401796

238 17 мая, 01:31 238 1401587

>>1400604
>здесь объявлена строка размером 5 байт
формально у тебя: определен указатель на char, инициализованный указателем на начало строкового литерала

239 17 мая, 01:34 239 1401588

>>1400354
>Подскажите, что писать-то на вашем си
laba1, laba2, .. на курсе по алгоритмам и структурам на втором году обучения в вузике

Ответы401680

240 17 мая, 01:36 240 1401589

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

241 17 мая, 01:37 241 1401591

>>1400344
mfc кроме шуток
щас бесплатный он
во всех vs можно ставить его и пользовать

242 17 мая, 01:39 242 1401592

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

243 17 мая, 08:52 243 1401680

>>1401588
А что-нибудь кроме лаб? Я универ уже 6 лет как закончил.

Ответы401798

57 Кб, 1280x720
244 17 мая, 10:22 244 1401704

Небольшой экскурс в историю.

ОП пишет:
>>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) и Машинный Код)

Ответы401737401906

245 17 мая, 11:25 245 1401732

>>1393395 (OP)
На русише чо читать?
Бесполезное говно твой мануал, один инглиш.

Ответы401737401777

246 17 мая, 11:38 246 1401737

>>1401704
Чмох, соси хуй. Именно из-за хуевого синтаксиса В, никто его юзать и не стал
>>1401732
Стивен Прата, шестое издание.

Ответы401738401739

247 17 мая, 11:51 247 1401738

>>1401737
>Чмох, соси хуй. Именно из-за хуевого синтаксиса В, никто его юзать и не стал

дебил, речь идёт о предках языка, откуда он есмь пошёл, сука, ты совсем тп, пидораска опущенестая?

248 17 мая, 11:56 248 1401739

>>1401737
А для чайников не лучше?

Ответы401745

249 17 мая, 12:26 249 1401745

>>1401739
>для чайников
Лучше нахуй.

750 Кб, 1464x1986
250 17 мая, 13:31 250 1401777

>>1401732
K&R есть на русском. И не бойся инглиша, ты же не даун с 4 классами образования, хоть что-то знаешь. Просто бери нужную книгу и начинай читать, в браузере открой вкладку с переводчиком. Увидел непонятное слово - перевёл и пошёл дальше. Через месяц такой практики станешь сверхчеловеком.

Ответы401802401928

251 17 мая, 14:17 251 1401796

>>1401585
Ну я просто вообще из С# вырос, там есть сахарок типа string s = $"this is {s1} interpolated string {s2}"; где s1 и s2 - другие строки. Вот искал что то похожее в С.

252 17 мая, 14:18 252 1401798

>>1401680
в линуксах и вообще unix-мирке до сих пор большинство user-space кода по итогу на сишке написано
это ничем, в принципе не оправданно, просто дань традиции
gnome, к примеру, у них сотри проектов на сишке, даже не на плюсах
если хочешь просто писать для развлечения и общественной пользы - велком, им постоянно нужны рабы

другое дело, в кернелее (что в виндах, что в юниксах) до сих пор надо писать на си, тут нету выбора особого

Ответы401974

253 17 мая, 14:29 253 1401802

>>1401777
>с переводчиком
вредный совет. Лучше чисто английский словарь. Такой, что ввел "penis" и выбило "male organ of copulation". Так лучше вкатываться в инглиш.

Ответы401806401811

254 17 мая, 14:34 254 1401806

>>1401802
Сепульки - см. сепулькарий.

Ответы401809401821

255 17 мая, 14:37 255 1401809

>>1401806
Двачеры - см. дебилы.

Ответы401816

256 17 мая, 14:39 256 1401811

>>1401802
>penis
Мискузи, но это же латынь!

257 17 мая, 14:46 257 1401816

>>1401809
Самокритично=)

Ответы401818

258 17 мая, 14:52 258 1401818

>>1401816
Угомонись, дегенерат.

259 17 мая, 14:57 259 1401821

>>1401806
Ну да, так и надо осваивать. Не миллион частных случаев, а см. что откуда берется. Индукция сосет, дедукция рулит. K&R же не состоит на 80% из примеров. Это книжка на языке о языке, и к обоим языкам надо относиться с уважением. Серьезно, с переводчиком себе дороже.

Ответы401824

260 17 мая, 15:03 260 1401824

>>1401821
Мамку ебал.

261 17 мая, 16:17 261 1401861

Аноны, посоветуйте нормальный инструментарий под WinXP. IDE не надо. Нужен компилятор, стандартная библиотека, желательно дебагер, и чтоб адекватно линковать с DLL. Косплей MinGW как-то не вдохновляет.

Ответы401884401888

262 17 мая, 17:18 262 1401884

>>1401861
Связка clang + lldb вроде как работает под виндой.

263 17 мая, 17:19 263 1401888

>>1401861
>Косплей MinGW как-то не вдохновляет.
А зря. Разработка под линуксом, mingw и wine - самое удобное.

А так студия типа 2008 с visualassistx пиратским.

# OP 264 17 мая, 17:42 264 1401906

>>1401704
> Тред, посвященный прародителю всех С-подобных языков
Я вообще не знаю, что это должно значить. Текст остался от ОП-а самого первого треда.

Ответы401931

428 Кб, 1211x492
265 17 мая, 18:12 265 1401928

>>1401777
>англоблядок
>сверхчеловек

266 17 мая, 18:19 266 1401931

>>1401906
Это тот, который выпилился?

267 17 мая, 19:53 267 1401974

>>1401798
Ядро винды пишется на плюсах, а не на си.

Ответы401987401998402002402004405858

268 17 мая, 20:05 268 1401987

>>1401974
поэтому винда такое говно

Ответы402002

269 17 мая, 20:16 269 1401998

>>1401974
Посмотри исходники какого-нибудь NIX и убедись в том, что шаблоны, стандартная библиотека плюсов, неявные вызовы в ядре на 100% неприменимы.

270 17 мая, 20:21 270 1402002

>>1401974
>>1401987
На сам деле на си =)

Ответы402004

271 17 мая, 20:23 271 1402004

>>1401974
>>1402002
На крестах частично дрова и некоторые подсистемы. Но по больше части на Си.

272 17 мая, 20:52 272 1402030

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

273 18 мая, 00:30 273 1402199

Подскажите почему код скомпилированный tcc работает на моей машине, но не работает на другой ?
>Невозможно запустить это приложение на вашем ПК

274 18 мая, 00:53 274 1402222

Способы sharing-а директорий между двумя mount namespace-ами при использовании setns (не clone и не unshare)? Хаки тоже подойдут.

Ответы402795

476 Кб, 2144x1608
275 18 мая, 03:07 275 1402292

Значит так, бля. Аноны, я тут пробую линковаться с одним китайским 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__?

Ответы402293402295404917

276 18 мая, 03:10 276 1402293

>>1402292
sed?

Ответы402294

277 18 мая, 03:16 277 1402294

>>1402293
хм.. неплохая идея. Отпидорить саму либу. Ведь отпидорятся и точки входа, и вызовы, если ее функции юзают друг друга. Шото я не подумал об этом.

278 18 мая, 03:25 278 1402295

>>1402292
> Как мне научить свой компилятор
> nm
Возьми компилятор и линкер у майкрософта, и все сразу станет хорошо.

Ответы402651404917

279 18 мая, 16:55 279 1402512

https://ideone.com/obbqUR
Сделал программу для чтения строк из файла и записи их в список. Но при выводе после последней строки выводится (null) и программа выдает ошибку. Почему?

Ответы402546

280 18 мая, 18:19 280 1402546

>>1402512
Ясно, я случайно поставил точку с запятой после ифа. Час искал ошибку, пиздос.

281 18 мая, 18:43 281 1402558

Что почитать про инторнеты в си? Нашел unix network programming, годнота?

282 18 мая, 22:06 282 1402651

>>1402295
Мне не стало хорошо. Я на линуксе сижу.

Ответы402654

283 18 мая, 22:12 283 1402654

>>1402651
Мешать код от разных компиляторов - не очень хорошая идея в принципе. А на линуксе у тебя есть вайн, а в вайн ты можешь притащить билдтулзы какие-нибудь от 2005 студии, они весят 150 метров, считая Platform SDK.

Ответы402662402666

284 18 мая, 22:31 284 1402662

>>1402654
шото у меня не гугляцца эти билдтулзы

285 18 мая, 22:36 285 1402666

>>1402654
Короче, на сайте Майкрософта нашел только от 2019 студии. Просит .NET Framework 4.6. Нахуй мне вся ультрасовременщина. Надеюсь, в один прекрасный день заскучавшему террористу приглянутся дети кого-нибудь покрупнее из этой ебучей корпорейшн.

286 18 мая, 23:40 286 1402719

>>1393395 (OP)
Не хочу создавать отдельный тред, спрошу тут. Зачем нужен Си, если есть С++ и другие языки? Зачем эта какуля мамонта? Объективно, что можно на Си, но нельзя на С++? Вот на Си дохера что нельзя.

Ответы402739402743402764402829405859

287 18 мая, 23:57 287 1402739

>>1402719
Чисто из рантаймовых соображений:
Си: Минимальный рантайм, малюсенькая стандартная библиотека, почти нет скрытых от глаза операций, реализуется за пару дней на любой железке/проце.
Плюсы: толстый рантайм (отвечает за инициализацию статиков, их thread-safety), большая стандартная библиотека которая ещё и сама оченб часто лезет к маллоку за памятью, много "магических" вещей (типа конструкторов, исключений, RTTI, виртуальные таблицы, захватывающие лямбды и тд и тп - это всё добавляет невидимый код), темплейты насилуют линкер и заставляют всё собираться в 50 (или больше) раз медленнее, сама имплементация реализуется очень долго и муторно.

Про семантику вообще молчу, в C++ она на три порядка сложнее. Вот расскажи, не читая cppreference, что такое deferred dynamic initialization или Koenig lookup. Кстати, ты знал, что есть такая вещь как Function try block? Я только в том году прочитал. Я сам пишу на C++ на работе, и мне нравится. Но я также знаю и людей, которые аргументировано терпеть их не могут.

Ответы402740402742

288 19 мая, 00:01 288 1402740

>>1402739
Мне не нравится си плюс плюс, потому что фич много и много их может не стать с новым стандартом.
А нравится мне в нем то, что он генерирует код лучше, чем Си, если использовать те же классы и темплейты.

Ответы402742

289 19 мая, 00:05 289 1402742

>>1402739
>Я сам пишу на C++ на работе, и мне нравится. Но я также знаю и людей, которые аргументировано терпеть их не могут.
Это не аргумент.
>Си: Минимальный рантайм, малюсенькая стандартная библиотека
Тебя никто не заставляет использовать весь функционал, но он у тебя есть и реализован без костылей. Твое высказывание равносильно " в луже тепло плескаться, а в море холодно"
>>1402740
~

Ответы402749402757405788

290 19 мая, 00:06 290 1402743

>>1402719
Другие языки тормозят.

Ответы402744

291 19 мая, 00:09 291 1402744

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

292 19 мая, 00:22 292 1402749

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

293 19 мая, 00:41 293 1402757

>>1402742
>Тебя никто не заставляет использовать весь функционал
Тот факт, что другой функционал есть и занимает очень значительную долю фронт-энда (а с некоторыми фичами, которые касаются линкера и рантайма, ещё и бэк-энда) компилятора означает, что на подмножеством, которым пользуешься конкретно ты, выделено было не так много времени, как тебе хотелось. Да и C++ такой язык, что ты можешь наступить на грабли случайно, даже не сам этого не увидев. В обычных Сях все грабли лежат на полочке, чтобы ты их сам положил в нужное место и наступил.

294 19 мая, 00:56 294 1402764

>>1402719
В Сях нет ООП, в Крестах есть. Следовательно, на Си писать в целом легче лично мне.

295 19 мая, 01:40 295 1402795

>>1402222
Бамп.

Ответы402809

sage 296 19 мая, 02:02 296 1402809

>>1402795
Это тред для хелловорлдов, никто не знает.

Ответы403596

297 19 мая, 06:26 297 1402829

>>1402719
>Зачем нужен Си, если есть С++ и другие языки?
Си не нужен, ведь С++ делает то же и намного больше и лучше.
Но Си-тред нужен, для обсуждения процедурного программирования, т.к. С++-тред засран ООП, функциональщиной и прочим ненужным говном.

298 19 мая, 08:28 298 1402842

Не могу понять как работает fgets. Вот создал я txt файл, ввел туда 10 строк по 5 символов в каждой, в ст открыл этот файл, написал
fgets(mass, 6, filename), где 6 судя по описанию это количество символов +1.
Так вот, считал первую строку, она вывеласьхотя почему то вместе с 5 буквами был символ перехода на новую строку, отлично, снова запускаю fgets, и она уже нихуя не выдаёт. Почему?

Ответы402843402870

299 19 мая, 08:29 299 1402843

>>1402842
Ну и код где?

Ответы402844

300 19 мая, 08:34 300 1402844

>>1402843
А зачем код?
Ну вот например
char word[6]
fgets(word, 6,filename);
printf("%s", word) :
fgets(word, 6,filename);
printf("%s", word) :

Ответы402869

301 19 мая, 09:53 301 1402860

test

65 Кб, 1280x720
302 19 мая, 10:18 302 1402867

Двач наверное мочи хлебнул, потому что куда-то все мои посты подевались из этого треда.
Короче вопрос в чем, объясните мне пожалуйста таинства TCC.
Читал где-то (тут или нет, не помню), что как таковой оптимизации в TCC нет, вернее она есть, но не в том виде в каком она есть в GCC например.
И тем не менее мне непонятна магия размера бинарного файла.
У TCC это 2-4Кб, у GCC 100-200Кб.
Как TCC собирает такой маленький файл ?
Почему в DevCpp(GCC) такой собрать не получается ни с какими опциями для оптимизации ?
Ну и самый важный вопрос, почему мой бинарный файл собранный TCC не запустился на другой машине ?
На это как-то влияет 32/64 битовость системы ?
У меня если что 64 бита.

Ответы402869

sage 303 19 мая, 10:45 303 1402869

>>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 не запустился на другой машине
Ну нам-то откуда знать? Ты ведь файл так и не принес.

Ответы403310

304 19 мая, 10:47 304 1402870

>>1402842
>как работает fgets
Как написано в документации. Ты русекодебил, неспособный читать? Тогда справедливо соси хуй.

Ответы402936

305 19 мая, 12:41 305 1402926

Допустим мне нужно сделать в консоли несколько команд. Ввожу например цифру 5, и надо чтоб программа считала строку, которую я затем введу. Как это сделать?

Ответы402951402954

306 19 мая, 12:46 306 1402936

>>1402870
Так-то и на русеке описания хоть жопой жуй.

307 19 мая, 12:58 307 1402951

>>1402926
Да можно как угодно. Можно через if, можно через switch/case.

Ответы402986

308 19 мая, 13:01 308 1402954

>>1402926
> считала строку
gets()
с тебя 100$

309 19 мая, 13:34 309 1402986

>>1402951
Почему тогда не работает? https://ideone.com/iAlq4Z

Ответы403443

310 19 мая, 16:40 310 1403285

16 Кб, 391x26925 Кб, 518x250

Чому так?
Тут же чередуются команды прочитать букву / вывести букву.
Значит каждая буква должна по два раза подряд повторяться. А получается, что в один int целая строка запоминается.

Ответы403301403302

311 19 мая, 17:07 311 1403301

>>1403285
Зависит от настроек терминала. Терминал может отправлять инфу в программу построчно (по умолчанию) или посимвольно. У тебя отправляется построчно. Тоесть ты сначала вводишь строку, потом она сразу вся уходит в программу и начинает отрабатавать твой цикл. В линуксе если тебе надо посимволная обработка то нужно перейти в "noncanonical mode" с помощью вызова tcsetattr, может еще что поравить. Если у тебя операционная система виндоуз то не знаю, возможно ты соснул. Там должно быть что-то свое, _getch какой-то или еще какая хуйня.

312 19 мая, 17:07 312 1403302

>>1403285
С чего повторяться то должна? Читает букву из введённого, выводит ее ниже.

Ответы403306

313 19 мая, 17:17 313 1403306

>>1403302
>С чего повторяться то должна?
Потомучто в программе нет перевода строки.

>Читает букву
Фактически за один шаг цикла читается вся строка

Ответы403307

314 19 мая, 17:20 314 1403307

>>1403306
> Фактически за один шаг цикла читается вся строка
Каждый шаг цикла читается один символ. Просто символы появляются в stdin сразу целой срокой. Пока ты вводишь строку цикл не работает (stdin пустой). Как только ввел цикл считывает по одному символу и выводит. Можешь добавить какой-то счетчик итераций в цикл.

Ответы403311

315 19 мая, 17:28 315 1403310

>>1402869
Принес же, ты посмотри, наших с тобой постов нет.

Ответы403443

316 19 мая, 17:29 316 1403311

>>1403307
Понел, спасибо.

317 19 мая, 18:24 317 1403323

>>1400739>>1400739

Спасибо, учту.

sage 318 19 мая, 20:51 318 1403443

>>1402986
Что именно не работает? https://ideone.com/ScXKqq

>>1403310
> наших с тобой постов нет
И не только наших.В любом случае, с описанием "ничего не работает" я не могу тебе помочь. Нужен или файл (а ссылку, если она была, я увидеть не успел), или больше инфы.

Ответы405346

319 20 мая, 02:17 319 1403596

>>1402809
И всё-таки.

320 20 мая, 17:16 320 1403874

51 Кб, 766x36638 Кб, 712x248

Как реализовать нормальных хендлинг ошибок? Неохота писать первый пикрил каждый раз, думаю использовать самопальное макро как на втором пике, но вопрос - насколько это читабельно? Что думаете?

Ответы403897404020

321 20 мая, 18:00 321 1403897

>>1403874
Сокращенная запись тебе принципиально не нравится?

Ответы403900

322 20 мая, 18:08 322 1403900

>>1403897
Что имеешь в виду?

Ответы403922

323 20 мая, 19:20 323 1403922

>>1403900
return some_check()
? do_something_else(kek)
: (error("FUCK YOU"), NULL);

Ответы403923403956

324 20 мая, 19:24 324 1403923

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

Ответы403951

325 20 мая, 20:20 325 1403951

>>1403923
борда отступы хавает

326 20 мая, 20:24 326 1403956

>>1403922
А если там проверок больше? Но вообще основной поинт был в том что бы не писать это логгирование с else {} каждый раз и вынести их в отдельный макрос.

Ответы403973

327 20 мая, 21:13 327 1403973

>>1403956
Зачем делать макрос? Сделай функцию.

Ответы403976

328 20 мая, 21:17 328 1403976

>>1403973
Мне нужно возвращать значение из родительской функции в случае неудачи, простая функция так не может.

Ответы404011404012

329 20 мая, 22:33 329 1404011

>>1403976
ну так вызывай вызывай функцию так
return foonktsyja(...);

330 20 мая, 22:34 330 1404012

>>1403976
а вообще, error handling - от лукаваго

Ответы404387

59 Кб, 806x617
331 20 мая, 22:46 331 1404020

>>1403874
Я всегда что-то вроде первого варианта использовал. Не люблю пользоваться макросами для control flow (максимум - что-то наподобие кернельных интрузивных списков). Если возможно, проверяю на ошибки в начале и делаю early return, как на пике.
Мне нравится в этом плане Zig со своими defer/errdefer (первый из которых взят из Go). Вроде как вполне сокращает лишнюю писанину. Посмотрим, как этот язык в конце концов себя покажет.

Ответы404387

63 Кб, 1108x324
332 21 мая, 20:59 332 1404387

Подумал еще об одном абсолютно непортабельном варианте - слишком экзотично, или пойдет?

>>1404012
А как жить без него?

>>1404020
Хм, посмотрел на Zig - как-то слишком инопланетно и заумно.

Ответы404437

60 Кб, 604x519
333 21 мая, 22:49 333 1404435

Как научится писать хороший и безопасный код на Си?

Просто вызубрить С11?

Ответы404440404513404735

sage 334 21 мая, 22:58 334 1404437

>>1404387
Иди пиши портянки if-ов, как люди. Никто твои макросы разгребать не будет.

335 21 мая, 23:06 335 1404440

>>1404435
>безопасный
Соблюдать правила
>хороший
Прочитать книги ХАКЕРСКИЕ
Писать читабельный код и чекать его на godbolt.

Ответы404449

336 21 мая, 23:29 336 1404449

>>1404440
>Прочитать книги ХАКЕРСКИЕ

например?

>чекать его на godbolt.

о, спасибо

337 22 мая, 07:07 337 1404513

>>1404435
Пишешь код, получаешь опыт с такими же задротами, через 10 лет просыпаешься кармаком.

Ответы406070

338 22 мая, 16:40 338 1404735

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

339 22 мая, 21:36 339 1404917

Итак, аноны, на связи >>1402292 кун. Помнится, поступил совет >>1402295 . Я таки взял в рот у Майкрософта, но проблема совершенно аналогичная. Только на этот раз компилятор всего лишь припендюривает _ к именам функций, объявленных __stdcall, а в либе, где, к слову, предусмотрены символы на все случаи жизни, кроме моего, присутствует такой вариант _protseduraname@8, что не соответствует моему _protseduraname. Че делать, епт??

Ответы404920

sage 340 22 мая, 21:48 340 1404920

>>1404917
> _protseduraname@8, что не соответствует моему _protseduraname
Первое - __stdcall, второе __cdecl. Объяви функцию как __stdcall, и оно слинкуется.

Ответы404923404928404930

341 22 мая, 21:53 341 1404923

>>1404920
мамой клянусь, она везде объявлена, как __stdcall

Ответы404936

342 22 мая, 21:57 342 1404928

>>1404920
Я ведь правильно компилирую?
cl /Fetest.exe test.cpp /Link zalupaSDK.lib

343 22 мая, 21:58 343 1404930

>>1404920
есичо, у меня инструментарий 2005 года

22 Кб, 800x415
344 22 мая, 22:12 344 1404936

>>1404923
> мамой клянусь
Покажи сообщения линкера. Смотри, вот у меня оно все правильно декорируется на пике (последние две строки). Тоже какой-то старый cl примерно тех же лет.

> /Link
С маленькой буквы: /link, но не знаю, имеет ли значение регистр. Да и вообще, можно без /link тут, просто имя либы, оно само разберется.

Ответы404942

43 Кб, 989x986
345 22 мая, 22:26 345 1404942

>>1404936

Ответы404946

346 22 мая, 22:33 346 1404946

>>1404942
Дык эта. У тебя тут кресты. А кресты имена манглят, а не декорируют. Сделай вокруг объявлений extern "C", как у меня на пике.

Ответы404950

347 22 мая, 22:39 347 1404950

>>1404946
ох бля, как я забыл про extern "C". В случае с либой у меня header инклудиться как раз в блоке extern "C"

Ответы404953

348 22 мая, 22:43 348 1404953

>>1404950
Ну блин, оно должно работать. Вот с MinGW была проблема, известная, а тут никаких проблем я не помню. Если уж либа такая секретная, смотри сам, что там у либы в экспортах, смотри, что тебе dumpbin показывает в символах, сравнивай, думай. Поищи, может там кто-нибудь сделал #define __stdcall на ничего. Или может, у тебя объвяления функций из либы правильные, и они линкуются, у тебя на твои колбеки ругается?

Ответы404960

349 22 мая, 22:55 349 1404960

>>1404953
>что там у либы в экспортах
Я под шиндой только компилирую, а копаюсь в коде под линуксом. Там же посмотрел
nm zalupaSDK.lib | grep protseduraname
И увидел кучу всего, в т.ч.
_protseduraname@8
>#define __stdcall на ничего
Во всем хедере __stdcall фигурирует только дважды в одном месте
#define CALLBACK __stdcall
#define CALL_METHOD __stdcall
И дальше в объявлениях функций используются только эти CALLBACK и CALL_METHOD.
>у тебя на твои колбеки ругается
да. unresolved external symbol _protseduraname in function mygavnokod

Ответы404974

350 22 мая, 23:18 350 1404974

>>1404960
А ты cl /E делал? Все точно правильно разворачивается?

Ответы404988404999

88 Кб, 285x177
351 22 мая, 23:41 351 1404988

>>1404974
ЧЗХ?!?!
cl /E | findstr protseduraname
extern "C" int protseduraname(...)

Там вообще такая хуерга идет:
#if (defined(WIN32) || defined(WIN64))
...
#define CALLBACK __stdcall
#define CALL_METHOD __stdcall
...
#else
...
#define CALLBACK
#define CALL_METHOD
...

Таке враження, ніби воно не знає, що в мене операційна система Windows.

Ответы404998

352 22 мая, 23:51 352 1404998

>>1404988
> defined(WIN32)
Потому что _WIN32. Ну видимо от тебя хотели cl /c whatever.cpp -DWIN32 yobaSDK.lib

Ответы405000

353 22 мая, 23:51 353 1404999

>>1404974
ох нихуя себе, я дописал параметр /DWIN32, и все слинковалось

Ответы405000

354 22 мая, 23:52 354 1405000

>>1404998
да, так и сделал уже >>1404999

355 23 мая, 17:10 355 1405276

Объясните тупому.
Все приложения на Си должны использовать msvcrt ?
Может ли приложение работать без msvcrt ?

Ответы405307

356 23 мая, 19:14 356 1405307

>>1405276
> Все приложения на Си должны использовать msvcrt ?
Нет. Приложениям под линукс разрешили использовать glibc.

> Может ли приложение работать без msvcrt ?
Да. Ты можешь слинковаться статически, или ты можешь не использовать стандартную библиотеку, обращаясь напрямую к Windows API.

Ответы405340

357 23 мая, 19:51 357 1405340

>>1405307
а как статически линковаться ?
че ето такое ?

358 23 мая, 19:57 358 1405346

>>1403443
https://yadi.sk/d/c9RgWu-5GGAH1g
Вот ссылка на собранный TCC бинарный файл, который отказался запускаться на другой машине.

Ответы405420

359 23 мая, 22:07 359 1405420

>>1405346
Ну не удивительно, что у тебя сообщения удаляли с такими-то файлами. Я ожидал от тебя собранный хелловорлд, а не эту пародию на бэкдор. Возможно, тебя просто антивирус блочит. Возможно (хоть и маловероятно), виноват TCC - директория исключений выглядит как-то подозрительно, возможно она сломана. И вообще, почему ты решил, что файл не запускается? Винда как-то ругается? Возьми x64dbg и поотлаживай - даже если на самом деле не запустится, ты хотя бы узнаешь NTSTATUS. Вангую, что все у тебя запускается, работает, просто не коннектится и выходит, завершаясь exit()-ом.

Ответы405434

17 Кб, 839x337
360 23 мая, 22:46 360 1405434

>>1405420
Что такое директория исключений ?
Почему антивирус на моей машине ничего не блочит, и за что блочить-то собсна ?
Запуск процесса и перенаправление ввода/вывода это что-то противозаконное ?
>Винда как-то ругается?
пикрелейтед

Ответы405469

361 23 мая, 23:00 361 1405442

>>1399216
>Скажи Source.c, что он тоже fpic, и настанет счастье.
nehuya, ne srabotalo.

362 24 мая, 00:01 362 1405469

>>1405434
> Что такое директория исключений ?
https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64

> за что блочить-то
Поведение. Сокет, cmd.

> пикрелейтед
Может она 32-битная просто? Под отладчиком запусти. Или в event-log-ах посмотри, может там напишут. Под этим окном может скрываться что угодно.

Ответы405715

363 24 мая, 14:36 363 1405715

>>1405469
У меня нет возможности что-то там отдебажить на той машине где не запускается.
У тебя запустилось ?

Ответы405863

364 24 мая, 16:08 364 1405767

>Может она 32-битная просто
А с каких пор поддержку 32 бит выпилили из десятки?

Ответы405863

48 Кб, 176x147
365 24 мая, 16:36 365 1405779

>>1400241 -нуб репортинг ин.
В конце концов выбрал введение в дискретку на Udemy. 15$ всего.
Там теория множеств, логика, комбинаторика.
И шо вам сказать, таки ДИЧАЙШЕ ЗАШЛО, особенно теория множеств. Это практически основа всего. Я даже думаю немного глубже зайти в тм, уж оче достовляе.
А потом на алгоритмы перейду.

366 24 мая, 16:44 366 1405784

>>1401580
>у вирта
Уверен, можно найти что-то поновее.

Ответы405822

11 Кб, 300x229
367 24 мая, 16:51 367 1405788

>>1402742
>с++
>без костылей
>БЕЗ КОСТЫЛЕЙ
>С++
>БЕЗ КОСТЫЛЕЙ

368 24 мая, 17:54 368 1405822

>>1405784
у вирта оче концентированный учебник, каждая страничка - полезная, для новичков, само собой
имхо, не устарел ни разу

16 Кб, 365x365
369 24 мая, 19:05 369 1405858

>>1401974
Неправда, там все на квик бейзике.

67 Кб, 547x531
370 24 мая, 19:06 370 1405859

>>1402719
> подразумевая что С++ не какуля мамонта

sage 371 24 мая, 19:25 371 1405863

>>1405767
Десятка сама 32-битная. Потому что бинарь 64-битный.

>>1405715
Не на чем тестить.

372 25 мая, 05:03 372 1406070

>>1395013
>Кармак смог написать
>>1404513
> просыпаешься кармаком.
Вы спецом приводите в пример именно того кто сейчас пишет на чем угодно, только не на си, и как только у него появилась возможность сразу забыл си как страшный сон?
Это такой тонкий стеб?

Ответы406931

373 25 мая, 16:52 373 1406299

Можно ли добиться для глобальных переменных, определённого расположения в памяти, как в структуре? (Что б копировать скопом например.) Пишу в gcc. Пока сделал так, но это ка-то костыльно:
struct
{
double time_;
double fps_;
} glob;
#define time glob->time_
#define fps glob->fps_

Ответы406326

374 25 мая, 17:44 374 1406326

>>1406299
> Можно ли добиться для глобальных переменных, определённого расположения в памяти
Нет. Можно, линкером, но это костыль. Можно явно городить указатели, но это пиздец. Кто тебе мешает обращаться к своим переменным, как к нормальным членам структуры, зачем тебе эти дефайны, у тебя пальцы писать устают? Алсо, там у тебя должна быть точка, а не стрелка.

Ответы406331

375 25 мая, 17:50 375 1406331

>>1406326
Ясн. Ну да хотелось покороче писать.

376 25 мая, 19:20 376 1406373

void add(struct tree a, struct tree stack[]){
int i;
stack = (struct tree )realloc(stack,sizeof(struct tree)+1);
for(i=0;stack!=NULL;i++)
;
stack=a->left;

}

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

Ответы406386406405406406406462

Sage 377 25 мая, 19:28 377 1406386

>>1406373
А разве gcc массивы создавая двусвязку делает? Не думаю, что это будет работать на 99 или 89

Ответы406390

378 25 мая, 19:34 378 1406390

>>1406386
При чем тут двусвязка? Stack массив указателей на структуру, который мне собственно нужен для обхода дерева в ширину.

Ответы406402

Sage 379 25 мая, 19:51 379 1406402

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

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

380 25 мая, 19:55 380 1406405

>>1406373
По моему должно быть ка-то так, но я не проверял.
void add(struct tree ЗВ a, struct tree ЗВ ЗВ ЗВ stack, int carrent_size)
{
ЗВ stack= realloc(ЗВ stack, carrent_size + sizeof(struct tree));

//предполагая что ты отставил последний указатель NULL
int i=0; while((ЗВ stack)) i++;

(ЗВ stack)= a->left;
//или всё таки так???
(ЗВ stack)= a;
}

Ответы406408

381 25 мая, 19:55 381 1406406

>>1406373
1) Там struct tree ∗stack? Если нет, то не ок.
2) realloc() всегда выделяет размер элемента + 1 байт, ты хотел явно не этого. Таскай с собой еще указатель на текущий размер.
3) Тебе никто не обещал, что кусок, который добавится в конец realloc()-нутого массива, будет забит нулями. Еще один повод передавать указатель на размер. Ну если у тебя stack терминирован NULL-ом, тогда можешь просто цикл перед realloc() сделать, а не после.
4) А еще принято притворяться, что ты умеешь обрабатывать ошибки выделения памяти, поэтому void add - не самая лучшая идея.

382 25 мая, 19:58 382 1406408

>>1406405
Да блин, квадратные скобки проебались. Где (ЗВ stack) должно
быть (ЗВ stack) КВ_СК i КВ_СК

383 25 мая, 22:17 383 1406462

>>1406373
Ты какую-то дичь городишь. Сделай связанный список из него уже стек делай.

384 26 мая, 07:13 384 1406550

struct stack звdel(struct stack звstck){
printf("%d\n",stck->next);
free(stck);
printf("%d\n",stck->next);
stck=stck->next;
printf("%d",stck);
return stck;
}
Я видимо не до конца понимаю как работают списки и указатели. Почему первый printf выдает нуль, а второй и третий нет?

Ответы406553

385 26 мая, 07:26 385 1406553

>>1406550
Понял, я долбаеб

386 26 мая, 18:34 386 1406931

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

387 26 мая, 21:24 387 1407030

Итак, аноны. Смотрю я, значит, на свой код, и испытываю смешанные чувства. Вопрос... Можно ли сделать это менее костыльно?
https://pastebin.com/TpCUJq5z
да, это псевдокод, исполняюемую версию с гитхаба не кидаю, ибо нехуй диванонеров кормить. Собсно, никого ебать не должно, у меня все работает. Но хотелось бы с соблюдением всех красивостей переделать. В курсе про static __thread, но градус гавнокодности отнюдь не падает.

Ответы407035

388 26 мая, 21:33 388 1407035

>>1407030
ой бля, там разыменовать надо возврат tsearch

17 Кб, 1097x81
389 28 мая, 13:22 389 1407879

Нюфаг-тред не помог. Подскажите, пожалуйста, куда тут копать.

Ответы407892407894

390 28 мая, 13:41 390 1407892

>>1407879
Численное интегрирование, чисметы, ваш кеп.
Но зачем рекурсия?
Самый прямолинейный способ интегрирования это сделать разбиение Ox на кусочки определённой ширины, и запись для них суммы произведений значений функции в середине отрезочков на ширину этих отрезочков.
Здесь промежуточек малый, можешь даже ln(1+t) расписать в ряд Маклорена, там в знаменателе t посокращается со степенями t в числителе, часть членов выбрось, полином второй степени по Симпсону интегрируется.
Ну вот ты мне энивэй расскажи, зачем рекурсия нужна.

Ответы407900

391 28 мая, 13:42 391 1407894

>>1407879
в SICP про эту хуйню было, кажется

Ответы407897407900

392 28 мая, 13:43 392 1407897

>>1407894
Никогда не понимал эту книгу, а тут такое вижу. Про что там вообще рассказывается? Все рецензии какие-то водянистые, а в самой книге сорцы Лиспа, мне страшно.

393 28 мая, 13:46 393 1407900

>>1407892
Я хуй его знает. Скинули задание первого курса глянуть, на чем и завис. Без понятия, зачем тут рекурсия, но нужна по заданию.
>>1407894
Ну вот и повод прочитать. Хотя там лисп.

394 30 мая, 18:08 394 1409318

Господа, посоветуйте либу для графики: для лабы графики, круги, квадраты порисовать.
Через graphics.h не могу, потому что 1)Где взять эти ебучии borland-утилиты из 90-х, чтобы скомпилировать, 2)Костыль с WinBGIm не пашет, ДА БЛЯТЬ И НЕ СМОЖЕТ, потому что он под кресты, с пространствами имен, дефолтными значениями параметров в функциях и прочим.

Ответы409343409665413492

395 30 мая, 18:36 395 1409343

>>1409318
Юзай gnuplot или если шаришь в питоне то попробуй pyplot

396 31 мая, 06:06 396 1409665

>>1409318
если тебе чисто графики рисовать для курсачей и лаб - то юзай гнуплот и матплотлиб, как советует тебе господин выше.
если же ты хочешь дрочить это в сишечке то смотри на дерьмо типа такого
https://github.com/grz0zrg/fbg
https://github.com/simple2d/simple2d

397 31 мая, 11:53 397 1409809

Решил тут подтянуть си, на всякий случай. Нихуя не понимаю, что тут не так
[code]
struct Point {
int x;
int y;
int z;
};
int main(void) {
void r;

r = malloc(10sizeof(Point));
free(r);
exit;
}
[/code]
Почему не компилируется

Ответы409833

398 31 мая, 12:07 398 1409823

Аноны, зачем тут надо указатель приводить
struct sockaddr_in peer;
rc = connect(s, (struct sockaddr *)&peer, sizeof(peer));
Почему нельзя просто передать &peer, разве ф-ия коннект не знает, что за указатель она принимает.

Ответы409827409843

399 31 мая, 12:22 399 1409827

>>1409823
Можно. Warning - не Error.

Ответы409843

400 31 мая, 12:35 400 1409833

>>1409809
потому return val; - встроенная конструкция C, по которой генерируется код типа
movq %rax, $val
popq %rbp
ret
и ты компилятор достаточно умен, чтоб ты мог опустить val.
exit же - это функция обертка для системного вызова exit, код для которого по умолчанию лежит в _start, куда возвращается main. Так что если хочешь завершить процесс на месте, пиши exit(0); и будет тебе счастье.

401 31 мая, 12:54 401 1409843

>>1409823
> ф-ия коннект не знает, что за указатель она принимает
Знает. Она принимает struct sockaddr, ты передаешь struct sockaddr_in. С точки зрения компилятора - это разные структуры. Это и есть разные структуры, просто они подогнаны так, чтобы у них было совпадающее начало. Вообще, так делать нельзя, там должен быть void * или union, но по историческим причинам тянется это говно.

>>1409827
> Warning - не Error.
Нахуй иди.

Ответы409893411174

402 31 мая, 14:29 402 1409893

>>1409843
Можно в любой непонятной ситуации кастовать к void ★, и все.

Ответы409905

403 31 мая, 14:51 403 1409905

>>1409893
Можно тебе в жскурятник съебать и все.

Ответы410160

404 1 июня, 03:36 404 1410160

>>1409905
Забавно, что у меня, возможно, больше профессионального опыта в си, чем у тебя, а ты такое мне говоришь, а может и не больше, кто знает.

Ответы410293410351

405 1 июня, 13:36 405 1410279

Сейчас тонну бреда напишу, но надеюсь мне помогут.
Как в C, если это возможно, заставить набор команд/функцию выполняться атомарно? Я использую либу с многопоточностью, но сам потоков не заводил; мне нужно, чтобы функция из либы, выполнялась до конца, единым блоком и не расхуячивала мои данные.

Ответы410347

406 1 июня, 14:08 406 1410293

>>1410160
>больше профессионального опыта в си
Больше 20 лет?

407 1 июня, 15:27 407 1410347

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

Ответы410363

408 1 июня, 15:44 408 1410351

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

409 1 июня, 16:13 409 1410359

Репост из реверсача, вдруг тут кто нибудь знает

В линуксовых shared object'ах extern переменные и функции в двух разных процессах будут иметь один и тот же виртуальный адрес, или могут (и должны) иметь одинаковые значения в младших битах адреса, но разные в старших из за какого нибудь ASLR? При этом для обоих процессов они имеют одинаковый физический адрес до первой записи?

Ответы410443410458

410 1 июня, 16:32 410 1410363

>>1410347
Да, чертовски похоже на то, что мне надо.

Ответы410390

352 Кб, 720x718
411 1 июня, 17:37 411 1410390

>>1410363
какая-то подзалупная библиотека...

412 1 июня, 20:03 412 1410443

>>1410359
>Репост из реверсача, вдруг тут кто нибудь знает

>В линуксовых shared object'ах extern переменные и функции в двух разных процессах будут иметь один и тот же виртуальный адрес
Этим ld распоряжается, виртуальные адреса будут разными. При этом у сегментов без прав на запись физ. адреса всегда будут одинаковыми. В не-pic elf файлах .so можно подменить в runtime, так что все еще хуже.

>или могут (и должны) иметь одинаковые значения в младших битах адреса
Да, память же страничная, все выравнивается (обычно) на 4к, выравнивание указывают в phdr у PT_LOAD. В man есть страничка про elf.

>При этом для обоих процессов они имеют одинаковый физический адрес до первой записи?
Да, а виртуальные останутся прежними. Это называется Copy On Write. Он и при clone сработает для всех отображений.

Ответы410524

413 1 июня, 20:28 413 1410458

>>1410359
ASLR можно отключить.

414 1 июня, 23:12 414 1410524

>>1410443
оки, спасибо

415 2 июня, 14:48 415 1410728

Привет.
Как лучше всего читать файл целиком в память ?
Размер знаю (fseek, ftell), а вот как прочитать способов нарыл много.

Ответы410843

416 2 июня, 14:51 416 1410730

C – это подмножество C++, или там есть какие-то уникальные фичи, которых нет в крестах?

Ответы410783

sage 417 2 июня, 16:12 417 1410783

>>1410730
Нестрогое подмножество. Стараются поддерживать языки более-менее совместимыми. Но, например, в designated initializers есть только в C++20, а сишный _Complex вроде так и не завезли. Ну и там есть всякие мелочи типа sizeof('x').

418 2 июня, 17:14 418 1410837

есть ли смысл явно кастовать указатель одного типа к указателю на другой при передаче параметра в функцию? например, есть функция
int f (void• o);
и я в нее передаю указатель на структуру mystruct msInstance. есть ли смысл явно кастовать
f( (void•) msInstance);
?
и наоборот, если функция принимает mystruct•, есть ли смысл при передаче в функцию void• кастовать его к mystruct?

Ответы410840

419 2 июня, 17:18 419 1410840

>>1410837
inb4 влияет при дереференсинге - а если я, например, передаю в функции f принятый указатель в какую нибудь системную функцию или вообще в инлайн асм операцию типа вызываю clflush или еще чего, где типы не имеют значения

Ответы410852

420 2 июня, 17:28 420 1410843

>>1410728
fread если через стандартную библиотеку C.
Если unix-like, то fstat и read, но лучше будет отобразить файл в память целиком через mmap.

Ответы410848411160

421 2 июня, 17:31 421 1410848

>>1410843
Про mmap двачую.

422 2 июня, 17:42 422 1410852

>>1410840
Бинарник из-за этих приведений никак не меняется, как и само значение указателя. Явно приводить к void★ не нужно. В обратном случае написать явное приведение к типу структуры вполне обоснованно.

536 Кб, 800x792
423 3 июня, 09:27 423 1411160

>>1410843
Я уже сделал, fseek/ftell/fread в выделенный буфер char
А вы тут шарите за альтернативные потоки данных в NTFS ?

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

424 3 июня, 10:27 424 1411174

>>1409843
>но по историческим причинам тянется это говно.
У винды половина апи с таким багором. Даже где-то читал, что они говорили, мол это фича. Классика короче.

Ответы411199411239

425 3 июня, 10:30 425 1411176

Аноны, как дебажить макродрисню? Копаться в сгенерированном листинге? Попроще можно как-то?

426 3 июня, 11:15 426 1411199

>>1411174
>мол это фича
Backwards Compatibility довольно важная вещь. В линупсах юзерленд апи тоже десятки лет не изменяется. Им тоже приходится поддерживать такие былинные фейлы как aio. Говорят, что uring получше, но я не пользовался пока.

Ответы411239

sage 427 3 июня, 13:39 427 1411239

>>1411174
Это не апи винды, апи сокетов (первый, который без префикса WSA) заимствован из BSD, это ихний говнодизайн. А копирайты в коде Winsock вообще от Intel, они-то что там забыли?

>>1411199
> Backwards Compatibility довольно важная вещь
Это та самая причина, почему винда все еще нужна.

428 3 июня, 14:48 428 1411265

Что значит contstraint "c" в записи
asm volatile("clflush 0(%0)\n"
:
: "c"(addr)
: "rax");

не могу найти описание именно для "с"

Ответы411331

sage 429 3 июня, 17:06 429 1411331

>>1411265
> https://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html#Machine-Constraints
> c The c register.
Т.е., ecx/rcx.

Ответы411379

430 3 июня, 20:09 430 1411379

>>1411331
спасибо

431 4 июня, 05:21 431 1411525

Что делают ключевые слова auto и register в с11?

Ответы411614411634

432 4 июня, 11:25 432 1411614

>>1411525
Также в Си существует четыре класса хранения:
auto — по умолчанию для всех переменных.
register — подсказка компилятору хранить переменные в регистрах процессора. Для таких переменных отсутствует операция взятия адреса
static — статические переменные. Имеют область видимости файла.
extern — переменные объявленные вне файла

Не думаю, что в C11 что-то кардинально поменяли.

433 4 июня, 12:19 433 1411634

>>1411525
https://en.cppreference.com/w/cpp/language/storage_duration

Ответы411685

sage 434 4 июня, 13:30 434 1411685

>>1411634
Тогда уж https://en.cppreference.com/w/c/language/storage_duration

82 Кб, 671x697
435 4 июня, 20:35 435 1411906

Анунаки понимаю что тред по сишечке, но может поможете немного с make? Вот чего эта хуйня не рабтает? Пол дня ебусь уже

Ответы411991

436 4 июня, 23:24 436 1411991

>>1411906
А это точно гнушный мейк? Выглядит очень странно

Ответы412032412204

437 5 июня, 05:55 437 1412032

>>1411991
Ага, он самый, кстати починил, а все было из за одного пропущеного пробела. Ну как так то

438 5 июня, 13:20 438 1412204

>>1411991
А что необычного? Как по мне анон неплохой придумал ну или подглядел где то, не нужно хедеры указывать, все само находится и в отдельный каталог собирается. Осталось ещё сделать что бы объектные файлы подтирались и вообще хорошо будет.
мимоанон

439 5 июня, 16:44 439 1412293

Я правильно понимаю, что на питоне функция pop() удаляющая элемент из массива, создает новый массив, исключая из него элемент который нужно удалить ?
Как можно что-то подобное на Си получить ?

Ответы412317412319

440 5 июня, 17:41 440 1412309

Почему не работает(
Передаю аргумент sosi
//Цикл for
if(argv == "sosi")
{ /.../}
Не выполняется условие.

Ответы412315

441 5 июня, 17:50 441 1412315

>>1412309
По адресу аргв всегда однобайтовый чар будет, т.е. argv[1+n]['s', 'o', 's', 'i']

Ответы412318

442 5 июня, 17:54 442 1412317

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

Ответы412320

443 5 июня, 17:56 443 1412318

>>1412315
Не очень понял 1+n, да и в принципе нихуя я не понял.
Почему printf() выводит по индексу, а условие не работает с тем же индексом, и как сделать чтобы работало ?

Ответы412319

444 5 июня, 17:58 444 1412319

>>1412293
> функция pop() удаляющая элемент из массива, создает новый массив
Ничего она не создает, просто удаляет элемент.

> Как можно что-то подобное на Си получить ?
memmove(&array[index], &array[index + 1], (array_size - index - 1) * sizeof(array[0])) удалит из массива элемент index. Это полностью идентично тому, что делает pop() в питоне (ну за исключением того, что оно подсунет в index индекс последнего элемента, если ты функцию без аргументов вызовешь).

>>1412318
Строки сравнивают с помощью strcmp(). Твое == сравнивает указатель на массив символов в argv с указателем на строковый литерал. Очевидно, что они всегда различны.

Ответы412321412328

445 5 июня, 17:58 445 1412320

>>1412317
Например есть у меня массив [test, xyest].
На питоне у класса массивов есть функция pop, которая по индексу удаляет элемент из массива.
То есть после pop(0), в массиве останется только xyest.
Собственно это мне и надо.

446 5 июня, 18:01 446 1412321

>>1412319
Нормально объяснил, все по делу.
А то я на питоне скриптик написал, и захотел в образовательно-развивающих целях написать тоже самое на Си.
И вот с парсингом аргументов вопросы и возникли.
Дома буду, попробую, пасиба.

Ответы412326

447 5 июня, 18:17 447 1412326

>>1412321
Забыл как это называется по умному, но в си любое имя это по дефолту указатель, и когда ты берешь в операцию сравнения какое-то имя, например *sosi, перед самой операцией разворачивается адрес, на который это имя указывает, и оттуда читается количество битов, определяющееся типом указателя/имени, т.е. если ты закастовал sosi к например флоат, то при взятии адреса будет читаться 4 байта, и они будут сравниваться с байтами с другой стороны сравнения. Если ты только изучаешь, то не юзай бестпрактисес, а пытайся все делать пошагово

448 5 июня, 18:20 448 1412328

>>1412319
Он добавляет в конец массива элемент который надо удалить.
Допустим я передаю аргументы:
a.exe -f test
Программа должна удалить из массива -f если найдет его.
А вывод такой:
a.exe
test
test
Может так происходит потому что for работает с массивом по одному адресу, а memmove переносит массив в другой адрес ?

Ответы412341

7 Кб, 507x497
449 5 июня, 18:42 449 1412338

Аноны, очень нужна помощь. Нужна функция для заполнения произвольного выпуклого многоугольника. Я написал https://ideone.com/c3e8qu но она не работает, выдает что то вроде пикрил.
Писал еще в прикреплённый, но тут по моему больше к месту.
С min max я уже нашёл ошибку.

Ответы412351

450 5 июня, 18:47 450 1412341

>>1412328
> А вывод такой:
А ты argc исправил? Элементов-то меньше стало. Вот тебе рабочий пример: https://ideone.com/vNS9an

Ответы412349

451 5 июня, 19:00 451 1412349

>>1412341
Точно, забыл про argc.
Теперь все хорошо.
А вот вопрос, если argv ответит указателем, то как мне получить значение этого указателя, чтобы его занести в другую переменную ?
char name = argv не работает

Ответы412350412352

452 5 июня, 19:04 452 1412350

>>1412349
char name = &argv[1+n]

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

Ответы412357412363

453 5 июня, 19:05 453 1412351

>>1412338
Проблема решилась избавлением от модулей

454 5 июня, 19:06 454 1412352

>>1412349
char ∗name = argv[​i​ + 1];

455 5 июня, 19:10 455 1412357

>>1412350
>char name = &argv[1+n]
>main.c:12: warning: assignment makes integer from pointer without a cast
>main.c:12: warning: nonportable conversion from pointer to char/short

>char ∗name = argv[​i​ + 1];
Сработало.

456 5 июня, 19:18 456 1412363

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

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

Собственно идея реализации пока одна, написать функцию булевую, которой передавать массив и строку, если строка в массиве есть - вернет True, если нет - False.

В питоне для этого есть in, в Си если что-то подобное и есть, то скорее для поиска подстроки в строке, или нет ?

Ответы412395

457 5 июня, 20:14 457 1412395

>>1412363
А как ты передаешь аргументы? В виде массива, или как члены структуры?
В случае массива, тебе нужна функция, которая будет посимвольно искать то что тебе нужно, в стандартной либе есть strstr(), но стандартная либа под реальные проекты абсолютно не приспособлена, поэтому под свою нужду напиши свою, благо куда двигаться понятно. Кстати, bool в сишке не используют, он ничем не отличается от int 1 int 0/int -1 int 0/whatever int whatever int, при этом тратится время на линковку ненужной либы, лишние задачи в препроцессоре, лишние касты и етц.

Ответы412397

458 5 июня, 20:19 458 1412397

>>1412395
Написал функцию, про bool прочел уже, возвращаю 1 если есть, 0 если нет.
https://ideone.com/Y8feXF вот как-то так получилось.

Ответы412398412403

459 5 июня, 20:21 459 1412398

>>1412397
Че еще придумал, возвращать не 1, а индекс элемента, чтобы его запихать в memmove для удаления собственно.

460 5 июня, 20:32 460 1412403

>>1412397

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

Ответы412405412411

461 5 июня, 20:37 461 1412405

>>1412403
Сделать программу, сейчас я пока пыхчу над парсингом аргументов.
Идея такая, есть 2 необязательных аргумента, их при отсутствии можно заменить дефолтными значениями, и есть 1 обязательный, это -f за которым следует список файлов.
Список как по мне обработать трудно, память-хуямять выделять, определять это все еще список файлов или нет, трудно это в общем, и я придумал удалять по элементу из массива, пока в конце концов в массиве argv не останется один лишь список файлов.

Вот это я и хочу сделать.

strcmp написать я могу и сам, не очень мне только понятно как вытащить из argv именно ЗНАЧЕНИЕ, чтобы уже по нему циклом пройти и сравнивать каждый символ.

Ответы412429

462 5 июня, 20:58 462 1412411

>>1412403
https://ideone.com/Jqqy1L
чет такое получилось
Беспокойно насчет chrlen правда, все ли строки нулем заканчиваются ?

224 Кб, 570x722
463 5 июня, 21:33 463 1412429

>>1412405
>над парсингом аргументов.
getopt, argp_parse

Ответы412430

464 5 июня, 21:35 464 1412430

>>1412429
Ну а чем они отличаются от моей писанины ?

Ответы412592

465 5 июня, 21:45 465 1412592

>>1412430
Ну велосипедь

Ответы412593

466 5 июня, 21:46 466 1412593

>>1412592
Не хочу.
А getopt есть под виндувс ?

Ответы412621

467 5 июня, 23:13 467 1412621

>>1412593
Типа такого:
https://www.codeproject.com/Articles/157001/Full-getopt-Port-for-Unicode-and-Multibyte-Microso

гугли короче.

Ответы412623

468 5 июня, 23:15 468 1412623

>>1412621
бееее
портированый еще
я уш лучше повелосипедю, вот мне не понятно если честно, почему в интернетах так мало этому внимания уделено, чет ниче внятного найти не могу

Ответы412625

469 5 июня, 23:20 469 1412625

>>1412623
>в интернетах так мало этому внимания уделено
Потому, что все юзают gcc и стандартные либы

Ответы412627

470 5 июня, 23:27 470 1412627

>>1412625
Ну какие стандартные либы-то ?
getopt равно как и argp либы линукса, а не виндовс
Запустить их можно вроде как, но это не костыльнее самописного парсера ?

Ответы412719

471 6 июня, 08:49 471 1412719

>>1412627
Я, блять, не знаю, в чем у вас проблема, но MinGW под шиндовс вполне себе собирает программу с getopt, все работает как надо.
Мимо

Ответы412745

472 6 июня, 10:38 472 1412745

>>1412719
mingw портирует glib, которая не входит в iso

473 6 июня, 17:56 473 1412921

Поясните за массивы строк.
Вот допустим мне надо положить строки в массив, чтобы получилось что-то такое ["stroka1", "stroka2"]
Делаю так
>char massiv[4][10];
>massiv[0][0] = *"stroka1";
>printf("%s", massiv[0][0]);
Пробовал strcpy, чтобы скопировать в [0][0] строку, выхлопнул warning'и, ничего не вывел.

Ответы412927

536 Кб, 800x792
474 6 июня, 17:58 474 1412927

>>1412921
Разобрался, индекс второй лишний указал.

475 8 июня, 00:14 475 1413492

>>1409318
S D L 2
D
L
2

Ответы413619

476 8 июня, 14:24 476 1413619

>>1413492
И что, ее научили в векторную графику?

477 10 июня, 06:23 477 1414343

Здарова. Прохожу тут курс cs50, там сишечка в начале. Пока идёт норм, но курсы расчитаны на то, что я буду пользоваться онлайн-ИДЕ для кодинга, а мне охота локально. Там использована собственная библиотека авторов курса - cs50.h. Я собрал и установил её по инструкции, но теперь каждый раз при конпеляции нужно добавлять флаг -lcs50, иначе конпелятор не линкует её. Как это фиксится? Почему в их онлайн-иде такого нет?

Ответы414345414346414351

478 10 июня, 06:55 478 1414345

>>1414343
Хз что ты там делал, но просто пишешь инклюд ето говно и все работает!
Локально можешь виртуалку навернуть.

Ответы414347

479 10 июня, 06:57 479 1414346

>>1414343
Потому шо так написано потому и нет.

480 10 июня, 07:07 480 1414347

>>1414345
Не работает.
Сбилженая либа находится в /usr/local/lib, если просто инклюдить, то кидает ошибки. Компилируется только с вышеуказанным флагом.

Ответы414348

481 10 июня, 07:15 481 1414348

>>1414347
Хуй знает, я эту говно 3 годжа назад делал, либу в папку с проектом кидал, инклюдил и все работало.

482 10 июня, 07:34 482 1414351

>>1414343
> Как это фиксится?
Это требуемое поведение

> Почему в их онлайн-иде такого нет?
Там автоматом линкуется. Ты в своей тоже наверное можешь настроить. Или навернуть какой-то скрипт/makefile.

Ответы414408

483 10 июня, 11:40 483 1414408

>>1414351
Спасибо за пояснения. По мейкфайлу на каждую небольшую лабу пилить как-то излишне, как мне кажется. Разве что сделать универсальный и передавать ему аргументом название си-файла.

484 10 июня, 20:13 484 1414608

Посоны. У меня, помнится, скомпилился код с арифметикой безтиповых указателей. Ну, типа (void ∗)suka + sizeof(typeof(∗suka)) работал. Хотя это ж illegal shit. Короче, я не хочу кастовать (char ∗), как еблан, это ж вообще всрато выглядит. Неужели не логично, что я по байтам считаю, когда фигурирует sizeof(typenamenahui) ?

Ответы414713

485 11 июня, 01:35 485 1414713

>>1414608
> Хотя это ж illegal shit
typeof это такой же иллегал шит. Да еще и ненужный в твоем случае.

> я не хочу кастовать (char ∗)
Кастуй к указателю на uint8_t, но это слегка не по стандарту. А еще лучше заверни в макрос, чтобы не видеть. Что-нибудь типа OFFSET_PTR_BY(ptr, some_value).

> (void ∗)suka + sizeof(typeof(∗suka))
Ты не поверишь, но вместо всего этого говна ты мог написать (suka + 1).

Ответы414787

486 11 июня, 11:21 486 1414787

>>1414713
>suka + 1
Это да, я просто для демонстрации, чтоб в одной строчке было видно, что эта часть выражения берется как void.
>макрос
уже на этом остановился, но с большим заточем под задачу. Макросы - это охуенно!

487 11 июня, 20:48 487 1414937

Есть один генератор судоку, есть ли в си средства для работы с ПДФ, и посоветуйте плиз как сделать генерацию пдф по темплейту?

Ответы414980

488 11 июня, 20:52 488 1414939

Движок съел второй абзац, нужно генерировать пдф в формате {
const data;

Сгенерированые судоку;

const data;
}
В Гугле по инфе находятся одни пиндосы из 95-ого и долбоебы с СО

489 11 июня, 22:42 489 1414980

>>1414937
> есть ли в си средства для работы с ПДФ
Своего в Си нет ничего, кроме стандартной библиотеки. Но ты можешь найти в гугле либы или писать PDF вручную, это несложно, можно обойтись одними printf, если не использовать сжатие, встроенные шрифты или картинки. Вон, можешь спиздить минимальную реализацию, например, отсюда: https://forum.pellesc.de/index.php?topic=471.15

106 Кб, 288x326
490 12 июня, 01:09 490 1415013

Как перестать орать над этой действительностью? Гавнокодирую Булевые сетки для шараги, и реально не всасываю, есть ли в этом мире адекватные языки. Питухон? Пфф, про эту скриптопарашу, косплеяющую natural english, и слышать не хочу. Кресты? Ну пиздос, давай теперь засрем всю память STL-ништяками, чтоб обслужить невъебенный алгоритм. Жаба? Потише, я чуть не подавился, лол.. C#? Дотнетчик в семье - позор на все село. Функциональные языки? Лол? Какие-то непопулярные вундервафли? Спс, лучше изучу батин мотоцикл, больше пользы. Вот и решил я остановиться на вашем Б-гоподобном Си. Люблю Си. Чтоб говно не полезло, пока будешь пердолиться в касты, указатели на указатели под указатели с указателями за щеку и вот это все, надо сначала на отдельный файлик макросов насрать. Ох и весело то как, йобанаврот, всю эту красоту наводить, за несколько часов работы так и не приступив к, собсно, работе. Но, по ходу, других вариантов, чтоб на всю жизнь не зашквариться и на внуков хоть краем глаза без стыда глянуть, особо нет. Си охуенен. Всем добра, посоны.
вот, бля буду, спроси меня, нахуй я это высрал, хуй я те че внятное отвечу, анон

Ответы415014415501

213 Кб, 1920x1080
491 12 июня, 01:14 491 1415014

>>1415013
ты не сказал ничего плохого против джаваскрипта...

Ответы415018

492 12 июня, 01:19 492 1415018

>>1415014
>не удостоил внимания даже в контексте обсёра
пофиксил

493 12 июня, 20:22 493 1415463

http://web.archive.org/web/20190125125043/http://homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Как насчёт добавить в шапку? Намного лучше всякие Code Complete читать

Ответы416026

494 12 июня, 21:56 494 1415501

>>1415013
Скиньте хоть примеры, как макросами жизнь облегчать, а то может я у себя таким образом могу что-то упростить.

Ответы415503415538415542415544

495 12 июня, 22:04 495 1415503

>>1415501
Примеры ограничиваются define zalupa penis ? her : davalka;
return zalupa и хуйней типа define unexpected_error

496 13 июня, 00:03 496 1415538

>>1415501
https://pastebin.com/qDByQzjp

497 13 июня, 00:09 497 1415542

>>1415501
Вот динамически расширяемый массив.
https://pastebin.com/Xw7su98i
Складываешь в него указатели хоть до Берлина, потом free и дело с концом.

Ответы415554

498 13 июня, 00:10 498 1415544

>>1415501
#define swap(a,b) {typeof(a) _t = a; a = b; b = _t;}
Можно всякие километровые касты заворачивать в дефайны. Все в фантазию упирается.

499 13 июня, 00:35 499 1415554

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

Ответы415578

500 13 июня, 02:21 500 1415578

>>1415554
Тогда надо еще Ls_free делать свой, и указатель придется явно носить как void∗∗, а не просто void∗. Короче, черный ящик ломается. Вообще, это под задачу делалось. У меня возврат указателя в контекст, где не существует чудо-макросов, и там же может понадобиться free. Хавнокод, согласен, не стал для двачей перечесывать.

501 13 июня, 16:41 501 1415894

> In recent versiions of GCC, the inline keyword has two different forms: GNU and C99.
> In GNU mode we can use 'extern inline' to make inline functions work like macros. The function is only inlined--it is never output as a definition in an object file.
> In the new C99 mode 'extern inline' has a different meaning--it causes the definition of the function to be output in each object file where it is used. This will result in multiple-definition errors on linking. The 'inline' keyword on its own (without extern) has the same behavior as the original GNU 'extern inline'.
Посоны, верно ли я понял? Если я компилирую ГЦЦ, то:
1. С флагом -std=c99 inline функция будет подставлять себя в код примерно так же, как макрос?
2. С флагом -std=c99 extern inline функция будет доставлять ошибку, если объектных файлов больше одного
3. Без флага extern inline функция будет работать как макрос.
4. Без флага inline функция будет (а хз что).

Ответы415944

502 13 июня, 18:05 502 1415944

>>1415894
> Без флага
Нет никакого "безфлага". Если явно не укажешь стандарт, GCС подставит -std=gnu99 или -std=gnu11, (или что там у него теперь по умолчанию? может даже -std=gnu17), в зависимости от того, насколько он старый. Но это не играет никакой роли, потому что обсуждаемое поведение будет только с явным указанием -fgnu89-inline (может, когда-то было и по-другому, хуй знает).

> The 'inline' keyword on its own (without extern) has the same behavior as the original GNU 'extern inline'.
Наглый пиздеж.

> Без флага inline функция будет (а хз что)
Вот это самый интересный вопрос, как и пункт 1. А будет вот что. Вот такой код:
// main.c:
inline void hello(void) {}
int main(void) { hello(); }
// hello.c:
#include <stdio.h>
void hello(void) { puts("Hello, world!\n"); }

может вывести хелловорлд, а может и не вывести - зависит от компилятора и флагов (в случае GCC - указано ли -O0 или -O1 и выше, причем с -O0 и без hello.c оно там вообще не соберется). Поэтому inline-функции с -std=c99 явно делают static и не выебываются.

Ответы415953

503 13 июня, 18:13 503 1415953

>>1415944
> Поэтому inline-функции с -std=c99 явно делают static и не выебываются.
А если функция нужна во всех файлах?

Ответы415956

504 13 июня, 18:16 504 1415956

>>1415953
Клади static inline yoba сразу с телом в .h-файл. В худшем случае (если компилятор решит не инлайнить), у тебя будет по одной копии функции в каждом файле, подключившем .h.

505 13 июня, 18:46 505 1415972

>>1415970 (OP)
>>1415970 (OP)
>>1415970 (OP)
>>1415970 (OP)
>>1415970 (OP)

# OP 506 13 июня, 21:35 506 1416026

>>1415463
Почитал. Эталонный пример плохого стайлгайда. Куча подводных камней в приводимых примерах, куда ни ткни. Да и устарело к тому же.

Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 16 июля 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.

« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion