Этого треда уже нет.
Это копия, сохраненная 13 мая 2017 года.

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

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

Что читать:

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

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

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- 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. Древний, но все еще актуален.

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

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

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

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

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

Stephen G. Kochan "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://arhivach.org/thread/106153/
- https://arhivach.org/thread/131949/
- https://arhivach.org/thread/140570/
- https://arhivach.org/thread/153698/
- https://arhivach.org/thread/155908/
- https://arhivach.org/thread/173837/
- https://arhivach.org/thread/180461/
- https://arhivach.org/thread/182958/
- https://arhivach.org/thread/188294/
- https://arhivach.org/thread/193780/
- https://arhivach.org/thread/198868/
- https://arhivach.org/thread/206632/
- https://arhivach.org/thread/211714/
- https://arhivach.org/thread/217128/
- https://arhivach.org/thread/223224/
- https://arhivach.org/thread/235327/
- https://arhivach.org/thread/237852/

Шапка: http://piratepad.net/bJ1SdmkZyu
#2 #935768
Линупсовые гайдлайны - говно или заебись?
935769
#3 #935769
>>935768
Заебись
164 Кб, 963x1340
#4 #935781
Почему в шапке больше нет пикрила? Годнота же, актуальная до сих пор.
935786
#5 #935786
>>935781
Потому что была, но тогда тред превращался в обсуждение ассемблеров.
935790
#6 #935790
>>935786
При чем тут ассемблеры? Там этой темы не так много относительно общей темы и примеров именно на Си.
935822
Dmitry #7 #935822
>>935790
Hacking it's more about Ruby and python today.
935830
#8 #935830
>>935822
Посмотреть бы, как атаку переполнения буфера на змее реализуют.
Книга все-таки не о крекинге. А о безопасном кодинге на Си. Плюс внятно описаны криптография и сетвой кодинг.
935837936127
Dmitry #9 #935837
>>935830
For machine-specific weaknesses use appropriate tools like C or C++.
#10 #935864
Нуб вкатился.
ANSI C.
Открываю файл 1.txt, чтобы считывать с него по строке.
file=fopen("1.txt","r");
Также открываю 2.txt для записи:
filec=fopen("2.txt", "w");
Ранее 1.txt был записан в этой же проге, если что, а потом закрыт.
Знаю кол-во строк заранее, пишу в цикле fgets(outstr, 178, file);
Размер массива outstr 180 символов, если что.
Проверяю некоторое условие (оно внешнее, от содержимого outstr не зависит).
Если оно выполняется, то
хочу записать outstr в filec:
fputs(outstr, filec);
И ничего, файл filec пуст всегда. Я в этой программе удачно заполнил 1.txt, но не могу никак заполнить filec, и в консоль ничего вывести не могу, даже если написаь fclose.
ЧЯДНТ?
935869935877
#11 #935869
>>935864
Но вам проще будет ответить на общие вопросы, наверное. Речь о стандартной библиотеке, ОФК.
1. Можно ли одновременно открывать несколько файлов и переносить из одного в другой, сравнивать их и т.п.?
2. fgets где оставляет каретку после своей работы? Написано, что она считывает до первого символа след строки.
Т.е. три fgets подряд благополучно заполучат три строки? Ничего между ними вписывать не надо?
935877
#12 #935877
>>935869
1. Можно.
2. Каретка - это про печатную машинку или консоль. Позиция в FILE остается там, где закончилось считывание. Считывание заканчивается, когда заканчивается буфер или встретится символ конца строки (в зависимости от того, что случится раньше). Позиция в нижележащем файле ОС может быть где-то дальше из за кэширования прочитанных данных во внутрененм буфере FILE. Три fgets могут прочитать три строки, а могут только одну, если она длиннее буфера.

>>935864
Выкладывай минимальный собирающийся код.
935884
#13 #935884
>>935877
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
...
FILE file, filec;
...
/ Благополучное заполнение файла 1.txt. Имеем массив str размером strn с числами, где strn - число строк./
fclose(file);
int strm=0;
char outstr[180];
file=fopen("1.txt","r");
filec=fopen("2.txt", "w");
for (i=0; i<=strn-1; i++)
if (str>=strm)
strm=str;
if (strm==0)
return 0;
for (i=0; i<=strn-1; i++)
{
fgets(outstr, 178, file);
if (str==strm);
fputs(outstr, filec);
}
return 0;
}
#13 #935884
>>935877
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void)
{
...
FILE file, filec;
...
/ Благополучное заполнение файла 1.txt. Имеем массив str размером strn с числами, где strn - число строк./
fclose(file);
int strm=0;
char outstr[180];
file=fopen("1.txt","r");
filec=fopen("2.txt", "w");
for (i=0; i<=strn-1; i++)
if (str>=strm)
strm=str;
if (strm==0)
return 0;
for (i=0; i<=strn-1; i++)
{
fgets(outstr, 178, file);
if (str==strm);
fputs(outstr, filec);
}
return 0;
}
935892935893
6 Кб, 307x263
#14 #935892
#15 #935893
>>935884
Конкретная проблема в точке с запятой тут:

> if (str==strm);


Но макаба съела звездочки наверняка, поэтому там могут быть и еще какие то проблемы.
935896
#16 #935896
>>935893
Убрал, ничего не изменилось.
935902
#17 #935902
>>935896
Да, с двоеточием я обосрался. А ты уверен, что у тебя цикл работает, и строчка читается? Что ты не вышел по return чуть раньше? Если в gdb не умеешь пока, воткни printf, да побольше.
935903
#18 #935903
>>935902

> у тебя цикл работает


Да какой же я тупой!
У меня strs занулилась в вышецикле. Ну грёбаный писец...
Заработало, спасибо, анон.
935905
#19 #935905
>>935903
strn*
Фикс
#20 #936066
философский вопрос: если искать в массиве данные, какое лучше использовать для функции имя "search" или "find"? склоняюсь к первому варианту
936100
#21 #936100
>>936066
Find. Что функция возвращает-то?
936104
#22 #936104
>>936100
Если найдено то структуру, если нет, то null.
#23 #936124
>>935715 (OP)

>оптимизации, тысячи их.



Включая такие оптимизации, как обрезание производительносит на процессорах AMD.
936126
#24 #936126
>>936124
Лол, ты из /hw/ сюда закатился?
Каким образом?
936129936130
#25 #936127
>>935830

>Посмотреть бы, как атаку переполнения буфера на змее реализуют.



Атаку row hammering сбацали на ЖС.
936913
#26 #936129
>>936126

Я сюда не из /hw/, я сюда из-за моих попыток написать что-то на Qt.

В конце марта амд выкатывает процессоры вдвое дешевле интеловских при той же производительности и при меньшем энергопотреблении, вылезайте из танка.
936142
#27 #936130
>>936126

То есть, не марта, а февраля. Уже доступны для предзаказа.
936131
#28 #936131
>>936130
NDA до 28-го.
Нет смысла предзаказа
936139
#29 #936139
>>936131

NDA-то NDA, но результаты бенчей уже в сети, и фотка охуевающих оверклокеров тоже есть.

Предзаказ - это я о том, что вот оно, уже почти свершилось, и игнорировать это не надо.
936140936141
#30 #936140
>>936139

>NDA


поясни за сабж, как они дали интелу пасасать?
936154
#31 #936141
>>936139
Я бы не советовал бы верить этим тестам.
Ещё чуть-чуть, и станет видна настоящая картина
936154
#32 #936142
>>936129

>В конце марта амд выкатывает процессоры вдвое дешевле интеловских при той же производительности и при меньшем энергопотреблении


Кроме геймеров, кому на это должно быть не похуй?
936144936154
#33 #936144
>>936142
как боженька пизданул
мимо армвкатывальщик
936145
#34 #936145
>>936144
Давно вкатываешься? Подо что пишешь? Цели?
936150
#35 #936150
>>936145
Хочу USB свисток на Кортексе за 5 баксов для портирования лисапеда на ядре L4
936151
#36 #936151
>>936150
з.ы. ну или Plan9 завести
#37 #936154
>>936140

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



Скоро узнаем: >>936141

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

С моей диванной точки зрения видится то, что Интел сам себе дал пососать: могли бы продавать процессоры по сильно меньшим ценам и задавить x86-подразделение АМД напрочь, вместо этого выставили такие цены, что АМД сможет нагнуть их по всем практическим характеристикам и ещё и заработать на этом.

Можешь почитать Анандтек:
http://www.anandtech.com/show/10578/amd-zen-microarchitecture-dual-schedulers-micro-op-cache-memory-hierarchy-revealed
http://www.anandtech.com/show/10585/unpacking-amds-zen-benchmark-is-zen-actually-2-faster-than-broadwell
http://www.anandtech.com/show/10591/amd-zen-microarchiture-part-2-extracting-instructionlevel-parallelism

>>936142

Например, конпеляющим программистам.

Интел постоянно пихали АМД палки в колёса своими финансовыми выворотами (можно вспомнить премию за неиспользовани АМД и бенчмарки времен Netburst), из-за них производительность дороже, чем могла бы быть в условиях честной борьбы. Когда ты будешь собирать новый ПК, ты сможешь взять себе процессор с вдвое большим числом ядер примерно по той же цене. Это может быть интересно очень многим - хотя бы тем, кто сейчас может позволить себе только двухъядерник, и при этом хочет плавную работу нескольких программ.

С другой стороны, с моей точки зрения проблема современных ПЭВМ не в вычислительной мощности, но это уже другая история.
936170936182937212
#38 #936170
>>936154

> проблема современных ПЭВМ не в вычислительной мощности, но это уже другая история.


Го в /b/, там создашь и раскроешь эту тему
936177
#39 #936177
>>936170

... в результате чего я выясню, что то, что нужно мне, никому из /b/ не нужно.
936178940192
#40 #936178
>>936177
Так чего же ты хочешь? Развитие устройств ввода/вывода?
936196
#41 #936182
>>936154
так хули, копитолизды не заинтересованны в улучшении продукта, их цель - агрессивная реклама. АМД малацы, Интел должен был cдохнуть еще на i286 параше
936200
#42 #936196
>>936178

Я хочу
-полностью опенсорсный софт в рамках одной машины,
-никакого preemptive-пердолинга хотя бы на всех ядрах, кроме главного
-математически-строгие стандарты обмена без ошибок и и без всякого legacy (форматы любых данных, протоколы и т.д.) с референсным универсальным кодом, чтобы один раз и надолго,
-математически строгую оптимизацию компиляции без багов и распараллеливание кода (основанные на математической модели процессора),
-максимально простое и прозрачное сохранение состояния всех программ в хранилище (HDD или ещё куда),
-неимпераитвный язык, структура которого будет учитывать устройство современной вычислиловки и набор типичных методик работы с устройствами,
-ГУЙ с развитой самодокументацией (любой достаточно сложный ГУЙ требует прочтения мануала, нужно всю справку встроить в ГУЙ),
-IDE с развитой самодокументацией (конверсия между различными представлениями программы, предпросмотр дерева разбора, встроенный стандарт языка, средства автоматического доказательства)
-средства языка и компилятора для обнаружения ошибок вычислений без ECC и полного дубляжа вычислений, с помощью частичного дубляжа, дешёвых проверок, хранения хэшей
- изоляция костылей для поддержки разных форматов

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

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

И ещё хочу 1:1 монитор, потому что даже 16:10 задолбало. Как ни странно, джве модели есть.
936363
#43 #936200
>>936182
А почему АМД не копитолизды?
936214
#44 #936214
>>936200

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

П.С. Рекламу "Атлон инсайд" помнишь? Вот и я не помню.
#45 #936363
>>936196

>неимпераитвный язык


>ГУЙ


Поделил на ноль.
Окошки с кнопочками императивны, хоть ты упрограммируйся вконец.
936402936889
#46 #936402
>>936363

>Окошки с кнопочками императивны, хоть ты упрограммируйся вконец.



Зависит от того, как это оформить. Если ввести новые концепции в язык, то можно даже Аллаха неимперативным сделать.

Что потом компилятор будет делать с этими конструкциями - разворачивать их в императивщину (процессоры императивные же) или нет - не важно.

Остальное ОК?
936403936889
sage #47 #936403
>>936402

> Зависит от того, как это оформить.


Хоть ты усрись, нельзя. Интерфейс априори императивен, со своими новыми концепциями можешь в /mg/ уебывать, там тебя встретят как своего.
936447936855
#48 #936447
>>936403

>императивен


это как? где вы бля таких словей набираетесь?
936541
26 Кб, 691x809
4 Кб, 307x154
#49 #936517
>>935715 (OP)
Пытаюсь в эту вашу СИ, и вот проблема.
Написал стронгли по учебнику код, который должен сравнивать введенные строки, потом печатать самую длинную, затем её же наоборот. Так вот, в любой ситуации печатается 661304 после вывода максимальной строки, переделанный в обраточку массив идет уже без чисел. Что это?
936523936531
#50 #936523
>>936517
Надо в шапку походу уже добавить правило, что если кто-то хочет помощи по коду, пусть выкладывают минимально компилируемый код на какой-нибудь пастебин. А то почти каждый долбоёб либо сразу в тело поста копирует код, где макаба съедает все звёздочки, либо выкладывет СКРИНШОТ С ТЕКСТОМ. Первое я ещё могу понять, но второе... Блядь, ну нахуй вы это делаете.
936527
#52 #936531
>>936517

> %3d


Получил кусочек стэка принтфа.
936535
#53 #936535
>>936531
sooqa, забыл почистить, спасибо. Мог бы и сам догадаться
#54 #936541
>>936447
Тi знаеш єто настолко древнея копiпаста што кажетьса што тогда энторнетов, не было:
http://rsdn.org/forum/decl/794170?tree=tree
#55 #936739
Вот затайпдефил я тип. А как его потом оттайпдефить? Не нужен мне больше он.
936741
#56 #936741
>>936739
А зачем? Экономить память в компиляторе - это какое-то непередаваемое извращение. Нет, оттайпдефать нельзя. Что единожды затайпдефано, останется тайпдефнутым до конца текущего модуля.
936745
#57 #936745
>>936741
А перетайпдефить? У меня не экономия а немного другая ситуация. Нужно для заголовков функций затайпдефить один тип, в тупую на void, а потом поменять void на нормальную структуру.
936748
#58 #936748
>>936745

> А перетайпдефить?


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

А вообще, расскажи, что сделать хочешь? Если ты хочешь скрыть детали реализации, делай в хедере:
typedef struct SomeType SomeType;
а уже в .c-файле, который со структурой работает (или в приватном хедере, если .c-файлов несколько):
struct SomeType {
...
};
936756
#59 #936756
>>936748
У меня есть файл main.c, там хедеры функций, которые принимают структуру type.
Также у меня есть файл func.h, в котором функции и эта самая структура.
Делаю:
#include "func.h" // файл со структурой type и функцией "func"
typedef type low_type;
void func(low_type type); // хедер функции func

И получаю хуй, так как сначала инклюжу файл с функциями, а потом какого-то хуя идут хедеры функций. Так нельзя.
Делаю:
void func(low_type type);
#include "func.h"
typedef type low_type;

и функция принимает в себя несуществующий тип low_type;

Хотел сделать перед функциями "typedef void low_type", а потом, заинклюдив func.h, "typedef type low_type", но так нельзя.
Единственное до чего додумался, так это просто вынести структуру в отдельный файлик func_struct.h и инклюдить его перед функциями, но это не красиво.
936771936985
#60 #936771
>>936756

> main.c, там хедеры функций


> у меня есть файл func.h, в котором функции


Ты все перепутал. В .h кладут хедеры, а в .c реализацию.
func.h:
#pragma once
typedef type low_type;
void func(low_type);
func.c:
реализация func
main.c:
#include "func.h"
компиляция:
cc main.c func.c
936775
#61 #936775
>>936771

> Ты все перепутал


Нет. В основной программе main.c это тоже .h файл. Я пишу библиотеку.

Конкретно у меня в основном .h файле лежат все хедеры и реализация половины функций из этих хедеров, а в том "func.h" лежит реализация второй половины этих функций и структурка.
Можно убрать хедеры функций из func.h в этот самый func.h, но я не хочу. У меня есть одной место, где прекрасно видно все функции и комментарии к ним. Так красиво получилось, незачем портить.
936791936934943350
#62 #936791
>>936775
Я тут мимо походил, но разве в этой вашей няшной не действует правило - у функции моет быть одно определение и сколько угодно объявлений? Тогда я не понимаю зачем этот человек складывает определения в хэдеры, разве что чтобы потом поиметь проблем при их инклуде в два линкуемых объектника
#63 #936855
>>936403

>Хоть ты усрись, нельзя.



Это в твоём мире нельзя, а в моём - можно.

>со своими новыми концепциями можешь в /mg/ уебывать, там тебя встретят как своего.



Могу съебать, а могу и не съебать. Кстати, ты (?) сам спросил.
#64 #936883

>императивен


аноны, нахуй вы такие пидерские слова используете?

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

вы же не петухатики
#65 #936889
>>936363

>Окошки с кнопочками императивны, хоть ты упрограммируйся вконец.


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

>>936402

>Зависит от того, как это оформить. Если ввести новые концепции в язык, то можно даже Аллаха неимперативным сделать.


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

При этом полноценный фреймворк НА СТРЕЛКАХ написать им так и не удалось.
936938936975
#66 #936913
>>936127

> >Посмотреть бы, как атаку переполнения буфера на змее реализуют.



> Атаку row hammering сбацали на ЖС.



> Эксплойт успешно сработал на на данных системах в браузере Firefox версии 39. Эксплотируется сама уязвимость в DRAM. Эксплойт, не позволяет получить права администратора в системе .


Ну и нахуй оно нужно?
937025
#67 #936934
>>936775

>Конкретно у меня в основном .h файле лежат все хедеры и реализация половины функций из этих хедеров



На кой ляд?

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



Съеби.
936974
#68 #936938
>>936889

>борщехлеба



Незнакомый мемес.

Кто такие "они" и как "они" должны интересовать меня?
#69 #936974
>>936934

> На кой ляд?


А как иначе? Я бы вообще всё положил в этот основной .h файл, и был бы у меня проект из одного файла, но реализаций func.h может быть много. Каждая для своей платформы, например. В итоге, чтобы собрать мою либу под сперму, нужно просто заинклюдить "func_win.h". Охуенно же.

> Съеби.


Ну ти чего.
Алсо, я тут кое что вспомнил и могу оправдать эти действия: Функция func используется в основном .h файле, описывается в другом, func.h файле, но при этом должна быть static. Если шапка будет где-то в другом месте, то основной .h файл не сможет её использовать.
937007
#70 #936975
>>936889

> 2017


> при нажатии кнопки гуй зависает пока производит вычисления


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


Давно во всех учебниках гуй представлен конечным автоматом, для представления которых ничего лучше фп не придумали, одни императивные мудаки лепят самописные очереди событий для самописного межтредового взаимоднйствия
#71 #936985
>>936756
В инклуде у тебя уже заинклудятся и тип и функция, зачем ты их опять описываешь?
#72 #937007
>>936974

>А как иначе?



Функции - в .c, объявы - в .h
#73 #937025
>>936913

> Ну и нахуй оно нужно?


Реализация эксплоита не позволяет получить права. А сама уязвимость потенциально позволяет ебать компьютер как угодно.
#74 #937212
>>936154

>конпеляющим программистам


Лол, у меня firefox на i5 собирается минут за 5. Максимум это в геймдеве востребована хуита будет.
#75 #937224
typedef struct {
int i;
int j;
} num_struct;
num _struct num;

Как мне эту структурку в одну строку заполнить? Что-то вроде num = {5, 10}; есть в сишке?
937225937270937383
#76 #937225
>>937224
А ты попробовать сам не мог? Есть, именно так и заполняется. Если ты хочешь заполнить НЕ при инициализации, и тебе жизненно необходимо сделать это одной строкой, тогда num = (num_struct) { ... }; Алсо, при инициализации можно указывать конкретно, что куда присваивать: { .i = 10, .j = 20 };
937236
#77 #937236
>>937225

> А ты попробовать сам не мог?


Почему? Я попробовал.
Спасибо.
937250
#78 #937250
>>937236
чукча не читатель, чукча писатель
#79 #937270
>>937224
Ещё один вопрос на эту тему: Нет ничего плохого в забивании структуры нулями memset'ом? Т.е. "memset(num, 0, sizeof(num_struct));".
937273
#80 #937273
>>937270
Нет ничего плохого. Но ты можешь сделать num = { 0 }, и компилятор сам решит, что выгодней: сделать несколько mov для маленьких структур, или заинлайнить/вызвать memset для больших.
#81 #937383
>>937224
@struct
class Petuh(val s1: CString, val s2: CString, val s3: CString)

val petuh = stackalloc[Petuh]
!petuh = new Petuh(c"Kudah", c"Pokpok", c"Kukarek")
#82 #937698
Дорогие си-погромисты. Обращаюсь к вам, первокурсник-тугодум. Задали прогу сделать, которая кодировку в тексте исправляет. С UTF этих ваших, да ASCII в windows-1251. Из аски в вин я более-менее смог наклепать, но из 2хбитового ютф ну никак не шарю... Направьте в нужном русле, пожалуйста!
937712938293
#83 #937712
>>937698
Возможно, тебе стоит взять какой-нибудь iconv и не ебаться вручную (если задание позволяет). Что касается UTF-8, там в старших битах первого байта кодируется количество байтов в последовательности:
(b & 0x80) == 0x00: 0xxxxxxx: 7 бит текущего байта
(b & 0xe0) == 0xc0: 110xxxxx: 5 бит текущего байта и 6 бит следующего
(b & 0xf0) == 0xe0: 1110xxxx: 4 бита текущего байта и по 6 бит из двух следующих
(b & 0xf8) == 0xf0: 11110xxx: 3 бита текущего байта и по 6 бит из трех следующих
Дополнительные байты (если первый байт их требует), выглядят как 10xxxxxx, в старших битах всегда 10, чтобы можно было узнать, что это не старт очередного символа, а середина, а младшие 6 битов используются для сборки codepoint. Можешь упростить себе жизнь, выкинув последние две проверки. В однобайтовом варианте у тебя по определению будет ASCII, а в двухбайтовом, возможно, кириллица. Добавишь пару проверок диапазонов, lookup-табличку сделаешь, и будет норм.
937717938293
#84 #937717
>>937712
Спасибо огромное! Я уже отчаялся. Мне говорили, что старшие биты нужно с 10 начинать, но я чет не понимал, зачем мне это. Теперь же все ясно и по полочкам.
937900
#85 #937900
>>937717
Cаси спасиба.
#86 #938293
>>937698
>>937712

На кой ляд ему биты вертеть? Пусть возьмёт самую стандартную либу с кодировками и сделает, внутренности UTF8 изучать не нужно.
22 Кб, 763x230
#87 #938310
Аноны, не знаю как правильно поискать стиль переноса параметров функции на новую строку.
Правильно ли так делать или нет?
938329938389
#88 #938329
>>938310
оставь первый аргумент на строке функции, а последующие под ним
938439
#89 #938330
Начал изучать С, понравилось то что охватывает и системный и прикладной уровень.
Сейчас пишу фронтенд для сайта и стили, на сервере всё работает, как сделать, чтобы у клиента запускалось?
938334938411938440
#90 #938334
>>938330
google
#91 #938389
>>938310
Как называется эта цветовая схема?
938402
#92 #938402
>>938389
нервныйтик личныйскетч
Darktooth for Visual Studio Code
938473
#93 #938411
>>938330

>прикладной уровень



НЕ ЛЕЗЬ, БЛЯТЬ, ДИБИЛ СУКА ЕБАНЫЙ - ОНО ТЕБЯ СОЖРЕТ
#94 #938439
>>938329

IDE не будет выравнивать аргументы под первым аргументов, это неудобно.
938456
#95 #938440
>>938330

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



То ли тонко, то ли толсто.

Гугли writing portable code.
#96 #938456
>>938439

>IDE


я без ide пишу
938488
#97 #938473
>>938402
Спасибо.
#98 #938488
>>938456

Notepad++ тоже не будет этого делать и другие редакторы тоже.

Только не говорм мне, что ты ручками табы и пробелы вставляешь.
938491938494
sage #99 #938491
>>938488
Все редакторы умеют как минимум в "тупые" автоотступы. Один раз сделал отступ - на следующей строчке он будет таким же.
938557
#100 #938494
>>938488

> ручками табы и пробелы вставляешь


зис, всегда отключаю автоиндент - бесит
938557938561
#101 #938557
>>938491

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

>>938494
охуетъ
938575
#102 #938561
>>938494
Как отключить "автоиндент" в Pelles C?
938564
#103 #938564
>>938561
А, всё, отключил.
#104 #938575
>>938557

>охуетъ


ну щито поделать, я любитель vim и geany
#105 #938577
Как эту ебалу сократить?

if(a > 0x09 && a < 0x10)
a = a + 0x06;
if(a > 0x19 && a < 0x20)
a = a + 0x06;
if(a > 0x29 && a < 0x30)
a = a + 0x06;
if(a > 0x39 && a < 0x40)
a = a + 0x06;
if(a > 0x49 && a < 0x50)
a = a + 0x06;
#106 #938584
>>938577
никак, и почему ты пидор, не используешь иф елс?
938586938587
#107 #938586
>>938584
аааа, сука какое это у нас число больше 9 и меньше 10?
938587
#108 #938587
>>938584
>>938586
Мне просто нужно "перескочить" комбинации A-F.
Особенность компилятора - if=elseif.
#109 #938588
>>938577
Дели на 9 и проверяй остаток
938589
#110 #938589
>>938588
А, не, хуита какая-то у тебя
#111 #938591
иф а >= А и а <= F
#112 #938598
Окей, похоже меня не поняли.

переменная "а" - тупой счётчик, считает от 00 до FF. Шестнадцатеричная система.
Нужно исключить, перескочить все НЕ десятичные комбинации. Убрать 0A,0B,0C,0D..... F9,FA.....FF.
Чтобы "а" выражалось исключительно цифрой без букв.

Ну хоть подскажите что гуглить мне, уже голову сломал.
938600938601
sage #113 #938600
>>938598
Мы все равно тебя не поняли, но вычисли, сделай табличку и забудь.
938604
#114 #938601
>>938598
ты наркоман, ну тебя нахуй, условие описал выше
#115 #938603
анончик пилит стартап, лол
sage #116 #938604
>>938600
Хотя да:
while (a < 0x100) { while ((a & 0xf0) >= 0xa0 || (a & 0x0f) >= 0x0a) { a++; } printf("%02x\n", a);
a++; }
938606938612
#117 #938606
>>938604
жесть
#118 #938612
>>938604
Спасибо, анон, реально помог.
Вот так в итоге вышло:
if ((a & 0xF0) >= 0xA0 || (a & 0x0F) >= 0x0A)
a = a + 0x06;
938614
sage #119 #938614
>>938612
Лол. Если сматчится первое подвыражение (при a = 0xb0, например), то твои цифры пойдут по пизде. Если уж тебе хочется именно скипать до следующего "правильного" числа, то разбей на два if, и при совпадении в старших разрядах скипай 0x60, а не 6.
938839
#120 #938695
Как по-человечески обращаться к значению указателя на переменную, по указателю на структуру, в которой она находится?
938698
#121 #938698
>>938695
Бля, я дебил *(some_struct->some_value)
#122 #938819
Есть тут аноны, кто в neovim пишет? У вас автокомплит по stdlib работает через deoplete?
938825
#123 #938825
>>938819
А, разобрался, для этого еще плагин сверху нужен.
10 Кб, 819x246
#124 #938839
>>938614
Спасибо, всё сделал, работает в железе идеально.

Алсо как бы вот это ещё уплотнить (пик, макакин спам-лист вставить мешает):
938866
#125 #938862
А на русском есть книги?
938865
#126 #938865
>>938862
Все эти книги настолько старые, что уже давно обзавелись переводом. Качество хз какое.
#127 #938866
>>938839
пздц.

побитовые операции юзай.
#128 #938957
>>938577
Аналог твоего кода:
if (a % 0x10 > 0x09) a += 0x06;
Если именно "проскочить" a-f до ближайшего нуля в последнем разряде, т.е. из 0x0b надо сделать 0x10:
if (a % 0x10 > 0x09) a = (a / 0x10 + 0x01) * 0x10;
#129 #939069
>>935715 (OP)
Каким образом в определении типа этой структуры используется тип PLIST_ENTRY до того, как даже определена структура? Как транслятор решает это?

http://www.nirsoft.net/kernel_struct/vista/LIST_ENTRY.html
939082
#130 #939082
>>939069
Це ж дефайн, препроцессор подложит всё что надо.
#131 #939117
>>938577
оберни это

>if(a > 0x09 && a < 0x10)


>a = a + 0x06;


в функцию/макрос
#132 #939844
Делаю упражнения из K&R. В 1.8 ("Write a program to count blanks, tabs, and newlines") наткнулся на какую-то НЕХ.
Сам листинг довольно незамысловатый: http://pastebin.com/1vRnQ3m4

Запускаю программу, пишу строку (да что угодно), завершаю комбинацией Ctrl+C. Выдаёт что-то типа:
"Blanks: 2147344387, tabs: 0, newlines: 2.". То есть, табы и переводы строк правильно считает, а с пробелами выдаёт не то.
ЧЯДНТ?
939847
#133 #939847
>>939844

> long blanks, tabs, newlines = 0L;


ты не инициализировал blanks и tabs
939861
#134 #939861
>>939847
Точно, спасибо. У меня Java головного мозга.
939871
#135 #939871
>>939861
Что ты несешь, поехавший? В Java так инициализировать нельзя.
http://ideone.com/OQUJP6
Как и в других языках с C-синтаксисом.
939923
#136 #939923
>>939871
Да, ето так.
#138 #940019
>>939953
даже читать лень, гуглопараша не может в разработку по. и да, вебкит на крестах же.
940064
#139 #940064
>>940019
при чём тут гугл, баг в Ragel со стороны Cloudflare
940123
#140 #940123
>>940064

В том-то, блять, и дело, что в Ragel багов нет, просто это императивное говно в C транслируется и безопасность у него такая же, как у C.
#141 #940137
>>940123
ну C никогда не претендовал на статус безопасного языка, какие проблемы
940171
#142 #940158
>>940123
просто ооп питухи не могут в байтоебство
sage #143 #940159
>>940123

> в C транслируется и безопасность у него такая же, как у C


То есть, если бы он транслировался в нативный код процессора, виноват был бы процессор?
940171
#144 #940161
бля, поясните нахуй этот Cloudflare нужен? какя то хипстерская поебота
940171
#145 #940171
>>940137

Почитай статью, там синтаксис такого же уровня, как и в C. Пропустили fhold - получи пизды.

>>940159

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

>>940161

Он нужен для того, чтобы любой сайт мог защититься от ДДОСа и спама без пердолинга с хостером.
940181940188940190
#146 #940181
>>940171

>чтобы любой сайт мог защититься от ДДОСа


ясно, эконимия на одминах
940225
sage #147 #940188
>>940171

> Как ты себе это представляешь?


Как делают нормальные люди - берут llvm и генерят IL, из которого генерится машинный код. Транслировать в си ненужно.

> Статью прочти, неосилятор.


Я проскроллил, какой-то говноязык, какие-то криворукие студенты.
940225
#148 #940190
>>940171

> любой сайт мог защититься от ДДОСа


двачу он не особо помог
940225
#149 #940192
>>936177
Нет, ты выяснишь, что ты пидорас-байтоёб и ЭМБЕДЕД НИНУЖОН, СЪЁБЫВАЙ ОТСЮДА И ГОВНО СВОЁ ЗАБЕРИ
b vyjuj bynthtcyjuj ghj cdjb[ hjlcndtyybrjd^ dxfcnyjcnb ghj vfvfie
940202940225
#150 #940202
>>940192
С++ говорят для эмбеддеда не хуже, часто даже лучше, иногда быстрее.
940206
sage #151 #940206
>>940202
Ну если с модными JS и Lua сравнивать, то конечно не хуже.
940222943387
#152 #940222
>>940206
а че, пездоглазы из самсунга свой днищелесапед джерискрипт и разрабатывают как жс ембедед. движок на си, а сверху жс и все это говно в телевизор, лол.
943416
#153 #940225
>>940181

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

>>940188

>Я проскроллил, какой-то говноязык



Такая же ошибка могла быть в C.

>>940190

Это ты про то, что двачевский скрытый IP откуда-то взяли, лол. Если одмен профукал IP сайта, это его проблемы.

>>940192

>Нет, ты выяснишь, что ты пидорас-байтоёб



Прочитай следующий мой пост, там о байтах ни слова.
зануда-кун #154 #940392
сап, анон. Подскажи вкатывальщику-неосилятору. Если я учу Си и собираюсь по серьёзке упарываться им со всеми вытекающими и прочими ништяками, то стоит ли мне гуммантираю лучше изучать электротехнику, чтобы знать как шить микроконтроллеры и для каких целей их прошивать. И вообще подскажите где вообще Си полезен, кроме таких низкоуровневых вещей. Так и не понял почему он круче ассемблера. Скажи, что почитать, анон, чтобы понять куда можно си впихнуть и куда его можно впихнуть с натяжкой.
940399
#155 #940399
>>940392
"Язык программирования C" почитать. Он от отцов
940408940410
sage #156 #940406

> Если я учу Си и собираюсь по серьёзке упарываться


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

> стоит ли мне гуммантираю лучше изучать электротехнику


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

> где вообще Си полезен


Либы, сервисы.

> почему он круче ассемблера


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

> куда его можно впихнуть с натяжкой


Писать для веба неприятно. Писать гуи неудобно по сравнениню с высокоуровневыми языками. В остальных случаях никто не мешает писать на Си.
940411940415
#157 #940408
>>940399
Есть же Прата для начинающих
#158 #940410
>>940399
бладжд там есть квест 1.13 написать гистограмы. Я так и не понял как их делать, но в консольку вывел ">" в горизонтальную гистограмму, а с вертикальной дак вообще охуел там корячиться. Четыре дня думал, так и не понял, как эти ёбанные гистограммы вертикальные запилить, не подлкючая сторонних средств. Но в книге ничего вроде не написано вообще про сферу применения языка. Тупо приходится отовсюду выискивать где и что пишут на сях.
940412940422940429
#159 #940411
>>940406
чаю, адекват.
sage #160 #940412
>>940410

> так и не понял, как эти ёбанные гистограммы вертикальные запилить


А в чем проблема? Ты не можешь посчитать на основе простейшей пропорции, стоит ли выводить в консоль заполняющий символ или проблел?
940424
#161 #940415
>>940406
На GTK написан GIMP. Точно Си тяжко подходит для гуишек? Опыт есть в этом? Я бы попробовал (времени навалом) но если это не имеет смысла, то и знакомиться с GTK не стоит.
940418940583
sage #162 #940418
>>940415

> GIMP


Я даже говорить ничего не буду.
940425
#163 #940422
#164 #940424
>>940412
Да, я как-то криворуко это наделал. Вроде консолька что-то выводит, но всегда что-то непонятное вылазит. Типа массив создаётся, где каждый индекс номер слова, а элемент индекса - количество букв для гистограммы. Вроде правильно проинициализировал массив, но количество строк всегда разное и не поддаётся нужной мне логике.
http://pastebin.com/v8Zbu0aN
#165 #940425
>>940418
А чем гимп зашкварен? Норм же, не?
940429
48 Кб, 750x142
1 Кб, 156x146
#166 #940429
>>940410
А сам я сейчас сижу на квесте 1.21.
http://pastebin.com/aSz4XXif
Должна делать пикрил.
Но делает пикрил2.

>>940425
Норм
940439940440940459
#167 #940439
>>940429
Взоржал с малалетнего дЭбила, ббгг.
940441
#168 #940440
>>940429
А, я начинаю понимать по поводу своего 1.21. Предположение такое: каждый раз после нового getchar() место putchar() уходит в начало строки.
Или как всё обустроено?
Я вообще не могу представить, как C обрабатывает вводимый в консоль текст, как он понимает, когда надо начинать обрабатывать. Т.е. я нажал Enter, это вроде бы \n для C, ноон после Энтер начинает работать и Enter становится как EOF...
940446940452
#169 #940441
>>940439
Это почему?
#170 #940446
>>940440

> каждый раз после нового getchar() место putchar() уходит в начало строки


Да не, бред какой-то
#171 #940452
>>940440
может шиндосовская кодировка энтера воспринимается как EOF. Я же наоборот не могу найти в Убунте сочетание для EOF ctrl-z работает как стоп-сигнал какой-то

>[1]+ Stopped

940454
sage #172 #940454
>>940452
Ctrl+D
940455
#173 #940455
>>940454
игнорит. ctrl+c вырубает выполнение
940457940459
#174 #940457
>>940455

>игнорит


Enter и только потом Ctrl+D
940460
sage #175 #940459
>>940455

> игнорит


Ввод по умолчанию line-buffered. Enter тыкай после Ctrl+Z/Ctrl+D.

>>940429
Таб - это не 8 пробелов. Таб втыкает нужное количество пробелов до следующего табстопа. А табстопы располагаются на каждой 8-ой колонке. Т.е., один символ и таб - 8 знакомест, два символа и таб - тоже 8 знакомест, 8 символов и таб - 16 знакомест. От этого и пляши.
940462940551
#176 #940460
>>940457
чаю
940480
#177 #940462
>>940459

> Таб втыкает нужное количество пробелов до следующего табстопа.


никогда не любил из-за этой неопределённости табы, юзаю только пробелы
#178 #940480
>>940460
канчаю
24 Кб, 608x442
#179 #940526
Хелп, аноны! Ввод строки manager пропускается. Почему?
940528
#180 #940528
>>940526
неактуально
#181 #940551
>>940459
А,я понял. Спасибо, я просто не знал, как работает Tab.
#182 #940583
>>940415

>если это не имеет смысла, то и знакомиться с GTK не стоит.


Имеет смысл, если интересно. А так писать на С с gtk гораздо медленнее, чем на том же python или javascript. Тут тебе и хоть какая-то типизация, сегфолты, если не понимаешь как что-то работает и прочие радости.
#183 #940584
>>940123

>в Ragel багов нет


Чет в голос всегда ору, когда пишут что в %youbasoftname% багов нет.
#184 #940670
Поясните за рекурсивные структуры вида:
typedef struct name {
name next;
name
prev;
} name;

Как их использовать? Чтобы в next действительно лежал следующий элемент, а в prev предыдущий. Гуглом ненагуглил.
940673940689940762
#185 #940673
>>940670
Указатели сожрала макаба, но думаю все всё поняли.
#186 #940689
>>940670

>рекурсивные структуры


проиграл
гугли двунаправленные списки
#187 #940762
>>940670

>Чтобы в next действительно лежал следующий элемент, а в prev предыдущий.



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

Если тебя это пугает, используй C++ и его std::list .
940773
#188 #940773
>>940762
В glib есть реализации нескольких коллекций
https://developer.gnome.org/glib/stable/glib-data-types.html
941291
#189 #941291
>>940773

Без шаблонов это боль: ОП будет кастовать gpointer во время каждого обращения.

К тому же, ОП не про двусвязный список спрашивает, а именно о том, как обращаться с этими структурами.
941293
#190 #941293
>>941291
Я к тому, что не обязательно ++ тащить для коллекций.
941429
#191 #941429
>>941293

Что значит "тащить"? Оверхед плюсов в простейших задачах околонулевой.
46 Кб, 381x297
#192 #941448
КАКОГО ФИГА?! Я только на пару недель отлучился выучить ассемблер, выучил кое как теперь си кажется бредом шизофреника, но тем не менее я его использую
И теперь мой код не работает. Я не понимаю почему. В области обведённой синем происходит бесконечный цикл. Не понимаю почему. Я проверял через printfы wik и width и у меня через некоторое время wik был больше width. Но цикл продолжал работать как упёртый но глупый рабочий на зло всем.
Из-за чего так? Уже 2 часа мучаюсь над этим
http://pastebin.com/HrreXvdL
941479941497
#193 #941479
>>941448
залей файл, на котором тестируешь
941530
sage #194 #941497
>>941448

> u64 width;


> u64 height;


И ведь только в прошлом треде мы говорили о том, почему вредно копировать байтики поверх структур (и переменных). У тебя 64-битная неинициализированная переменная, ты пишешь значение в младшие 32 бита (на little-endian машине), а в старших битах что? - мусор. Если по счастливому совпадению мусора нет в width, значит, виснет во внешнем цикле из-за height. Алсо, нахуя тебе вообще 64-битные размеры изображения?
941512941531941535
#195 #941512
>>941497
но это не объясняет того, откуда берётся бесконечный цикл
941514
sage #196 #941514
>>941512
uint64_t n = 0xffffffff00000000ULL;
while (n--) {
putchar('.');
}
Докрутится - приходи.
941515
#197 #941515
>>941514
но строго говоря он не бесконечный
941517
sage #198 #941517
>>941515
А я и не говорил про бесконечные циклы.
8 Кб, 57x47
#199 #941530
>>941479
этот, только у меня бмп, а он не поддерживается двачем
941541
#200 #941531
>>941497
Очередной отсос байтослесарей. Всё через жопу.
#201 #941535
>>941497
очень громкий и высокий крик разочарования но и понимания АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА
Я всё понял! Почему-то мой мозг принял 64-битные числа за 4-байтные. От жеж дидько, какой я не внимательный иногда. Спасибо, анон.
#201 #941535
>>941497
очень громкий и высокий крик разочарования но и понимания АААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААААА
Я всё понял! Почему-то мой мозг принял 64-битные числа за 4-байтные. От жеж дидько, какой я не внимательный иногда. Спасибо, анон.
#202 #941541
>>941530
да уже не актуально, я просто хотел у себя запустить, было интересно, откуда там мог бесконечный цикл взяться, но походу его там не было изначально
#203 #941559
Вот вы тут сидите конпелируете, а вот тут вот:
http://www.iso-9899.info/wiki/Books
— написано, что 'Learn C The Hard Way' суть негодная книжка и не стоит её на второе место в шапке вывешивать.
941595
#204 #941595
>>941559
Негодная. Написано же - "для гуманитариев". Для нормальных людей у нас есть проверенные временем альтернативы: K&R и Прата.
941618
0 Кб, 225x40
#205 #941598
Подскажите простой способ рандома поэффективнее, чем нижеследующий.
void random(int mr[],int size,int min,int max)
{
srand(time(NULL));
int r, d;
d=max-min;
for (r=0;r<=size-1;r++)
mr[r]=rand()%d + min;
}
Данной функции передаётся массив, его размер, максимальное и минимальное значения элементов.
Если функцию вызвать три раза массивами разных размеров, но с одинаковыми min и max, то всё будет очень уныло, например, как на пикрил.
Что заменить, что добавить?
941605941613941688
#206 #941605
>>941598
double random(void) { return rand() / (double) RAND_MAX; } // 0.0 .. 1.0. И дальше городи эти свои (int) (random() * d) + min. Будет слегка получше.
941620942107
#207 #941613
>>941598
Ах да, srand() нужно вызывать один раз в начале программы. time() возвращает время в секундах, и если между вызовами прошло меньше секунды, то получается, что ты инициализируешь генератор одним и тем же значением, и, конечно же, получаешь одни и те же данные.
941636
#208 #941618
>>941595

А что-нибудь годное для гуманитариев у вас есть?
941622
#209 #941620
>>941605

> double random(void) { return rand() / (double) RAND_MAX; }


Это что? Функция? Её перед моей random вызывать? Т.е. ей название другое дать, да?
941625
#210 #941622
>>941618
K&R вполне подходит. Если сложно, предварительно можно Петцольда "Тайный язык информатики" навернуть.
941658
#211 #941625
>>941620
Разобрался.
Но странно, что я ни разу её не вызываю, а она как-то работает
941636
sage #212 #941636
>>941625
Лол. Нет, твоя основная проблема была >>941613 в этом. А использование RAND_MAX просто дает последовательности с менее заметными корреляциями, по сравнению с использованием остатка от деления.
941638
#213 #941638
>>941636
Лол, я оставил srand на месте, но только теперь srand(time(NULL)_rand());
Всё теперь стало довольно рандомным
941639
#214 #941639
>>941638

> srand(time(NULL)+rand())


Fix*
#215 #941658
>>941622

>K&R вполне подходит.



Сдаётся мне, что у тебя слишком хорошее мнение о гуманитариях. Энивей, спасибо, попробую.
#216 #941688
>>941598
Я знаю лишь как на ассемблере такое сделать. Надеюсь там можно вставлять асм код.
rdtsc ;ложит в edx:eax количество тактов, которое прошло после последнего сброса процессора
mov peremennaya,eax ;в переменную с названием peremennaya ложит значение eax, которое меняется каждый такт

Правда я могу где то ошибаться, может надо [peremennaya] написать или что-то такое.
942084
#217 #942084
>>941688

>знаю лишь как на ассемблере такое сделать



>Правда я могу где то ошибаться, может надо [peremennaya] написать или что-то такое.



>или что-то такое.



> что-то такое.

942089
sage #218 #942089
>>942084
Да чего ты к нему придираешься? Необходимость писать квадратные скобки зависит от конкретного ассемблера или от чего-то такого
942093942106
#219 #942093
>>942089

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



Я просто гуманитарий-ниасилятор, который тремя постами выше от K&R охуел. Ты не представляешь, насколько таким как мы бывает в радость технаря подъебнуть, особенно насчёт ассемблера или чего-то такого.
#220 #942102
Есть функция, в которой многократно используется переменная с длинным названием, я хочу её сократить. Как лучше делать, так:
int var = ebat->long->name->var;
или так:
int *var = ebat->long->name->var;

Кто будет работать быстрее? Как надо делать? Надо ли делать вообще?
942137942145
#221 #942106
>>942089
Ассемблерщик, а ты умеешь призывать RDRAND из процессоров >= Ivy Bridge или >=Excavator?
942128942449
#222 #942107
>>941605

> chislo=((double)rand()/(double)RAND_MAX);


Рандомлю число таким способом.
Мне может вернуться единица?
942216
179 Кб, 688x384
#223 #942128
>>942106
А ты умеешь? Умник, бля.
942140
#224 #942137
>>942102
ты сломал мой мозг
#225 #942140
>>942128
Нет, но ассемблерщик же тут ты. Отличная функция, иди учи ассемблер.
942146
#226 #942145
>>942102

>Кто будет работать быстрее?



Победила дружба, оптимизирующему компилятору насрать на указатели.
942329
#227 #942146
>>942140
Ебать ты манька.
#228 #942213
Посоны, чо думаете за ncurses?
Есть ли что пизже, если да, то в чем?
942393
#229 #942216
>>942107
Может.
sage #230 #942329
>>942145

> компилятору насрать на указатели.


Причем два раза. Pointer aliasing гугли.
#231 #942393
>>942213
Всё пишут на ncurses, вот и ты пиши и не выёбывайся.
942396
#232 #942396
>>942393
Я и пишу, прост мало ли.
#233 #942449
>>942106
Думаю что для этого надо написать команду
rdrand
942524
#234 #942524
>>942449
Как ты додумался до такого?
#235 #942573
>>935715 (OP)
Анон, как понять что ты готов ногой открывать дверб в любую вакансию, где нужны Сишники? Есть ли какой-то заметный УРВОЕНЬ?
942599
#236 #942599
>>942573
Вот тебе три вопроса. Если на каждый ответишь без гугла - то можешь скорее всего. Если же даже вопросы вызовут WTF, то продолжай учиться.
1. Чем конвенция cdecl отличается от fastcall?
2. Дана структура struct { char a; int *b; double c; } x;
Чему равен её sizeof? Как его уменьшить?
3. В двух объектных файлах есть переменная с одним и тем же названием, в файле с main она объявлена как extern. Что произойдет при попытке собрать приложение?
#237 #942602
Плюсаны, нужно написать некоторую программу с графическим интерфейсом игорь типа тетриса, но показать ее работоспособность нужно на университетском древнем пека. На чем там байтоебы рисовали окошки в 2007?
942609
#238 #942608
>>942599
Да, продолжу как учиться.
#239 #942609
#240 #942612
>>942599

> с main она объявлена как extern


Всмысле? Если название такое, то оно зарезервировано под функцию объявления её в других .c файлов командой extern из хидера, или я чего-то не понимаю.
942613
#241 #942613
>>942612
fileA.c
int x = 3;
fileB.c
int x = 4;
main.c
extern int x;
942614
#242 #942614
>>942613
Не знаю, как это компилировать, проблем не имею.
942617
#243 #942617
>>942614
Компилируется это нормально. Вопрос на линковку причем довольно простой, на самом деле.
#244 #942619
>>942599

> Чем конвенция ... отличается


1) Чем угодно. Может не отличаться.

> Чему равен её sizeof? Как его уменьшить?


2) Чему угодно. Удалить из нее лишние члены.

> Что произойдет при попытке собрать приложение


3) Сборка приложения.

Правильно ответил? Меня примут?
942626
#245 #942626
>>942619
Не-а.
#246 #942632
>>942599
Правильные ответы, если кому интересно. Но лучше попытайтесь ответить сами.

1. cdecl передает аргументы на стеке в обратном порядке, fastcall - часть в регистрах, и лишь то что уже не влезет - на стеке.
2. Зависит сразу же от нескольких факторов - разрядности системы (это влияет на sizeof(int *) и размеров данных (это влияет на sizeof(double) - если CHAR_BIT != 8, то размер будет не 8). Дальше в игру включается выравнивание, его уже сами гуглите. Отключить можно через #pragma pack или в gcc через __attribute__((packed))
3. Произойдет ошибка линковки. Что-то вроде Multiple definition of ...
942636942641942664
#247 #942633
>>942599
Вся та хуйня, тобой написанная, к языку C не имеет отношения. Ну разве что третий вопрос немного.
942634942642
#248 #942634
>>942633
Вот правильный ответ.
#249 #942636
>>942632

> Произойдет ошибка линковки.


В оригинальном вопросе про инициализацию не было ни слова, а без инициализации ошибок не будет, привет фортрану.
942637942650
#250 #942637
>>942636
Глобальные переменные всегда инициализируются, привет хаскелю.
942639942643
#251 #942639
>>942637
А Питону никто не передаст привет, суки.
#252 #942641
>>942632

>3...


Сук, что за баг разума... Вроде понимаешь, что ответ такой, ибо это очевидно, но всё равно ищешь какой-то подвох.
945788
#253 #942642
>>942633
1. Стандартная практика в сжатые сроки определять уровень знания предметной области - задавать несколько глубинных вопросов и экстраполировать полученные ответы. Выковыривать знания каждого аспекта - слишком долго.
2. Со всеми тремя вопросами я сталкивался на практике, так что имеет. Ты не представляешь, как часто люди приводят указатель на структуру к (uint8_t *), отправляют как бинарные данные, а потом удивляются, что на другой стороне ЧОТО НИТО ПРИХОДИТ.
#254 #942643
>>942637
Я про явную инициализацию. Неявную делает линкер. Или не делает (когда программа freestanding).
942646
#255 #942646
>>942643
Ок, если не инициализировать не-нулём, то никаких ошибок линковки.
#256 #942650
>>942636
Признаю, мой косяк. Но, собственно, ответ вполне мог был бы выглядеть "если инициализируем переменные, то так, а если не инициализируем - то так". Это был бы только дополнительный плюс тебе в карму.
942663
#257 #942663
>>942650
Скучно. Ты бы лучше спросил, что будет, если сделать так:
#include <stdio.h>
static char foo[]; int main(void) { return printf("%zu\n", sizeof(foo)); }
#258 #942664
>>942632

>fastcall


Да, но текущее архитектурное состояние нам же надо сохранить перед вызовом и после вызова восстановить. Один фиг оно, получается, на стек уйдёт. В чём профит? В обычном варианте ты внутри функции пихаешь на стек значения используемых регистров перед вызовом (push x R), чтобы их потом в конце функции со стека обратно в регистры записать (pop x R), плюс пушишь и попишь аргументы функции (push x A + pop x A). Итого (A + R) x 2 стековых инструкций.
В fastcall -- пихаешь на стек регистры, в которые запишешь аргументы (push x A), в конце функции восстанавливаешь регистры обратно (pop x A). Между делом пушишь и попишь оставшиеся аргументы на стек (push x K + pop x K). Итого (A + K) x 2 стековых инструкций. Получается, что профит в количестве инструкций будет только тогда, когда K < R, т.е. количество оставшихся аргументов (>= 0) меньше количества используемых функцией регистров.

Так?
942666942668
#259 #942666
>>942664

> один фиг оно, получается, на стек уйдёт


Есть функции, которые больше ничего не вызывают (leaf functions). Во многих RISC-ах даже специально существует регистр LR, хранящий адрес возврата, чтобы вообще не трогать память и работать побыстрее. Сохранять те регистры, через которые передаются аргументы, обычно не нужно, плюс часто есть еще регистры, которые сохранять не нужно. Их можно юзать и получать неплохое ускорение на коротких функциях.
#260 #942668
>>942664
Не все регистры являются callee-saved. Если, допустим, у тебя функция одного аргумента, то он передастся в eax (или rax), ты там же в рамках регистра с ним поработаешь и через eax же вернешь. Никакого стека.
942671
#261 #942671
>>942668
Это какой такой фасткол использует eax/rax? Кроме тех случаев, когда компилятор каждую функцию вызывает по-разному, наиболее удобным ему способом, не следуя никаким конвенциям.
942676
#262 #942676
>>942671
У меня в памяти отложилось, что фасткол в этом плане не стандартизирован и каждый компилятор (идеологически) может реализовывать как хочет. В любом случае, я привел лишь синтетический пример.
942677
#263 #942677
>>942676
__fastcall стандартизирован на x86-64, на x86 есть распространенный стандартный __fastcall от MS и менее популярный вариант от Borland.
942679942695
#264 #942679
>>942677
Не знал, прикольно. Можно ссылочку, где об этом подробнее почитать можно?
15 Кб, 867x316
#265 #942695
>>942677

>__fastcall стандартизирован

942696942721
#266 #942696
>>942695
А, значит я таки был прав. Ну и заебись тогда
#267 #942721
>>942695
Ты поехавший что ли? В стандарте си ничего нет, кроме языка. Там даже стека нет. Соглашения о вызовах стандартизируются в описании ABI процессоров.
942746
#268 #942746
>>942721

> в описании ABI процессоров.


Процессору похуй на твой C.
19 Кб, 277x504
#269 #942765
Бля, я прям охуел сначала. Не сразу заметил ошибку. Шланг не прощает.

Есть вообще профит им компилять?
942767943123
#270 #942767
>>942765

>Есть вообще профит им компилять?


Есть профит использовать -Wall -Wextra
942768
#271 #942768
>>942767
Впрочем, gcc тут молчит. Я думал он лучше справляется с неинициализированными переменными.
#272 #942784

> ref class Work


> error: 'ref' does not name a type


В студии работает, при попытке собрать с GCC получается эта хуита
942785942806942861
#273 #942785
>>942784

> ref class Work


Это не С и даже не С++. Это либо С++/CLI, либо С++/CX
942866
#274 #942806
>>942784
Линуксоеды соснули.
#275 #942861
>>942784

>В студии работает



Студия - это IDE с кучей языков, а не компилятор.
942866
#276 #942866
>>942785
>>942861
Действительно, это cli.
#277 #943019
Как codelite заставить запрашивать инпут?

Сук, мне уже пичот
943027
#278 #943027
>>943019

Возьми паяльник и заставь.
943030
#279 #943030
>>943027
Ха
Ха
Умереть и не встать.

А если по делу? Вывести-то оно выводит в консольке, а запрос ввода где?

Сложна. В документации к коделайту нужной инфы пока не нашёл
943048
#280 #943048
>>943030

> заставить запрашивать инпут?


> запрос ввода где?



Как-то так, думаю:
getchar()
scanf()


мимо-гуманитарий
943068
#281 #943068
>>943048
Толсто.

Но скорее всего - я не так выразился.

После кнопеляции и запуска написанного кода я всего лишь вижу консоль с надписью: Press any key to continue

А по идее - я должен ввести энное количество чисел, но увы
943138
#282 #943123
>>942765
В шланге есть -Weverything, специально чтобы ты страдал. И analyze еще есть, стоит пользоваться периодически. И -fsanitize тоже.
943442
#283 #943138
>>943068

Код покажи наконец.
#284 #943350
>>936775

> Нет. В основной программе main.c это тоже .h файл. Я пишу библиотеку.


В голос. У тебя библиотека - это кучка заголовочных файлов?
943373
#285 #943373
>>943350
.h-only либы вполне себе существуют.
#286 #943387
>>940206
Ты ска, ты че на Луа гонишь?
#287 #943416
>>940222
Таких кастрировать надо.
Охуеваю от андроеда на тиви, ну блядь, ну ладно бы железо там было норм, но нет же, на самое вшывое и давлик прокручивает говнокод.
5 минут нахуярить на С гуй с линукса. Написали бы приложение для арча на арм, чтобы консолька, все нормально, вейланд.
943424943500
#288 #943424
>>943416
Если бы не сраные приложения для телевизоров, в эти телевизоры бы продолжали пихать ртос с мгновенной загрузкой и без тормозов, а не ублюдочный линукс.
943519
#289 #943442
>>943123
Ололо, он мне высрал три страницы ворнингов из /usr/include/cairo/cairo.h, который я использую. Причём ворнинги довольно сомнительны.
943447
#290 #943447
>>943442
Ну я же сказал

> чтобы ты страдал


А чтобы не страдать, ворнинги для системных либ стоит выключать. Я свой код стараюсь собирать с Weverything, даже если считаю, что компилятор излишне придирается. Единственное, что выключаю для всего проекта - высер столмана -Wno-date-time[/spoile]
943456943472943520
#291 #943456
>>943447

> ворнинги для системных либ стоит выключать.


Как? Нагуглить не смог. Впрочем, после того, как я внёс pkg-config в "``" вместо "$()" никогда не понимал этой прыщемагии, шланг уже на кайру не ругался.
943490
#292 #943472
>>943447

>ворнинги для системных либ стоит выключать.


И да, шлангист, подскажи такую вещь. Шланг очень много ругается на unused functions, unused parameter, как отключить эти ворнинги?
943493943494
#293 #943490
>>943456
Не обращай внимания на унтера и собирай с
gcc -Wall -Wextra
как посоны делают.
943491
#294 #943491
>>943490
Или clang, они совместимы на самом деле, а вот поехавшие ворнинги не нужны.
#295 #943493
>>943472
Эти ворнинги не стоет отключать, программа у тебя не годится, либо выпиливай функции либо используй. Доделывай.
943515
#296 #943494
>>943472
Неиспользуемые параметры в колбеках затыкаются чем-нибудь типа: #define UNUSED_PARAM(x) ((void) (x)), а неиспользуемых функций у тебя быть не должно.
943515
#297 #943500
>>943416
Пиздец как у меня горит со СМАРТ ТВ, которое на каждое нажатие пульта по 2 минуты реагирует.
НЕНАВИСТЬ
943519
#298 #943515
>>943493
>>943494
Неиспользуемые функции они на будущее, ещё не реализовал части программы с ними. Тоже самое с неиспользуемыми переменными, функционал с ними просто ещё не запилен. Но зачем мне каждый раз при конпеляции видеть эту информацию? Сейчас отключу, потом включу.
943523
#299 #943519
>>943424
Но приложения все-таки могут быть полезными. На линукс все есть, новое не сложно сделать, а вот через давлик/арт это дохуя ресурсоемко, у меня на пк столько памяти не жрет сколько на вшивом смартфоне, а у тв еще и разрешение большое.
Комп может жрать меньше 100мб с загруженой графической оболочкой. Андроид почти 300 со старта жрет.
>>943500
У моего говно-тв реагирует норм, долго реагирует именно если начать набирать номер канала. Но утубик и все остальное совершенно не работает, вообще. Только одно приложения с говноканалами кое как тащит.
А с флешки почти норм (на самом деле нет).
Хорошо не мой телик, Я бы такой не покупал, лучше взять монитор хороший и отдельно приставку с хорошим железом которую можно будет заменить когда в говно скатится, а монитор - это почти всегда на порядок лучше изображение.

Вот только почему андроид не понял.

Годные смарт тв начинаются от 3К бачей думаю, но переплачивать за смарт не знаю зачем, лучше взять панель с HDMI 2.1 DP 1.4 SuperMHL и ебатся уже только с приставками.
#300 #943520
>>943447

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


Кастишь unsigned int в int при, например, сложении одного с другим? Меня шланг завалил подобными претензиями, но по-моему кастинг тут выглядит плохо.
943526943544
#301 #943523
>>943515
А зачем ты функции эти компилируешь?
Закоментируй, скрой макросами, вынеси в отдельный файл и убери из мейкфайла.
Компилятор ведь прав что ты муть компилируешь, убери, и компилируй что уже работает.
943547
#302 #943526
>>943520
(int) перед выражением написать это каст? Надо явно указывать всегда, или перевести другую переменную в просто инт, так должно производительнее выйти, потому как никаких конвертаций не будет.
943532
#303 #943532
>>943526

> (int) перед выражением написать это каст?


А что же ещё?

У меня в коде много участков с выражениями подобного типа:
a = b + c;
Что выглядит вполне няшно. А так:
a = b + (int32_t)c;
Уже начинает раздражать.
943553
#304 #943544
>>943520

> Кастишь unsigned int в int


Ты такой кастишь, а в результате у тебя отрицательное число. Поэтому, хоть язык и не требует, лучше для себя же пометочку сделать, мол, вот кастую явно, значит, и о проблемах подумал. То же и с кастами в меньшие по размеру типы.
#305 #943547
>>943523
Давай проще: Возможно отключить эти ворнинги не завезли?
943548943550
#306 #943548
>>943547

> Возможно


Возможности
fix
#307 #943550
>>943547
-Wno-название-ворнинга
943552
#308 #943552
>>943550
Добра :3
943556
#309 #943553
>>943532

>Что выглядит вполне няшно. А так:


>a = b + (int32_t)c;


Не правильно пишешь, формат задается один раз перед всем выражением.
А вот int+uint вернет мусор, тут и надо указывать (int) в начале выражения один раз.
Или если int+float тоже форматировать надо в флоат.
943563943712
#310 #943556
>>943552
man gcc
#311 #943563
>>943553

>А вот int+uint вернет


С float все ясно, а вот интеджеры могут прокатить и без форматирования, например если добавляем к юинту отрицательный инт и результат не отрицательный.
Поэтому лучше или один всеобъемлющий инт юзать или явно конвертировать чтобы не получить неожиданых ошибок, дебажить может быть очень трудно если пропустил.
943566
#312 #943566
>>943563
Как быть с char и unsigned char? Строка char* скармливается конечному автомату, у которого есть потребность индексировать этим символом в массивах состояний, и отрицательные индексы ему конечно не нужны. Тут методом тыка за секунды решается, но интересно, как оно по канону.
943567943571943578
#313 #943567
>>943566
Очевидно, что если у тебя 8-битная кодировка, то и строки unsigned char. А если 7-битная ASCII (или какой-нибудь ASCII-совместиый UTF-8, и тебе насрать на все кроме ASCII), то можно и проверить, не притащили ли лишнего в старшем бите.
#314 #943571
>>943566
unsigned юзать для ясности, конечно отрицательных значений там быть не может.
static const unsigned char - так объявляется алфавит в ядре linux.
Почему обычный char работает нормально стало интересно, он конвертируется наверно тоже.
#315 #943578
>>943566
Самое главное не сравнивай float и int или INT UINT.
#316 #943584
int main(int argc, char argv[]){
return 0;
}
Почему так пишется, а не
unsigned int main(unsigned int argc, unsigned char
argv[]);
Ведь количество не может быть отрицательным, и возвращать отрицательный код ошибки незачем и сами строки по природе из unsigned char состоят, зачем тогда по другому принято?
Было бы гораздо проще вместо unsigned int uint писать.
943589943592943593
#317 #943589
>>943584

> Почему так пишется


Потому что давным давно символы были 7-битными. Отрицательный код ошибки удобен (чтобы отличать невырный синтаксис аргументов от ошибок выполнения полезной части программы, например). А вот size_t argc был бы к месту, но... обратная совместимость.
#318 #943592
>>943584

>unsigned char argv


это бля что за наркомания?
943602
#319 #943593
>>943584

>unsigned int


и это что за хуйня?
943602
#320 #943594
Что здесь происходит вообще? Школотрон дорвался до unsigned?
943603
#321 #943602
>>943592
Массив строк.
>>943593
Положительный int. Читай спеки.
943607
#322 #943603
>>943594
Ну очень уш долго писать, uint заебись, я макросом заменяю, но выглядит как костыль, вот бы дефолт таким был.
943608
#323 #943607
>>943602
теперь объясняй как массив vекторов и их количество могут быть отрицательными?
943619
#324 #943608
>>943603

>uint заебись, я макросом заменяю


уходи
943620
#325 #943619
>>943607
C не имеет векторов. Это не вектор а указатель на char[].
943622943624
#326 #943620
>>943608
stdint.h
не имеет uint, а было бы удобно btw.
Что плохого в макросе?
943622943626
#327 #943622
>>943619
Вектор - это последовательность элементов, массив. В Си массивы есть. argv - это массив указателей на char.

>>943620
Если тебе сложно написать два слова, пиши только unsigned. Во-вторых, товарищ Шахиджанян ждет тебя. Или нормальный IDE. В-третьих, макросы для типов зло, используй typedef.
943630
#328 #943624
>>943619
arg[v] <- что означает буква v?
943669
#329 #943626
>>943620

>не имеет uint


потому, что он нахуй не нужен
#330 #943630
>>943622
Это не массив а указатель на массив, значения переданые не копируются, а ты получаешь только указатель, тоесть ты можешь переопределить его внутри функции.
Аяаяй такгого не знать.
>>943622
uint короче ведь. typedef не уверен что лучше, макроса в программе уже не будет, а typedef уже в программе обрабатывается, лишние затраты, всегда проигрывал с манек брезгующих #define для констант, это ведь самая настоящая константа hardcoded в програмку, а не определяемая при исполнении с выделением памяти.
943631943633943656
#331 #943631
>>943630

> typedef уже в программе обрабатывается, лишние затраты


Шизик, уходи.
943669
#332 #943633
>>943630

>Это не массив а указатель на массив,


это указатель на массив указателей. уходи.
943636
#333 #943636
>>943633
Если уж придираться, то указатель на массив имеет типа "указатель на массив". А массивы в аргументах функции неявно преобразуются к указателю на первый элемент этого массива.
943638
#334 #943638
>>943636
нет. уходи.
943639
#335 #943639
>>943638
static void foo(int *x) {}
int array[1];
foo(&array);
Собери с -Wall и прочитай сообщение компилятора.
943642
#336 #943642
>>943639

>foo(&array);


-> foo(array)
уходи
943643
#337 #943643
>>943642
Откуда вы лезете?
http://ideone.com/eVc4xR
943644
#338 #943644
>>943643
prog.c:20:17: error: passing argument 2 of ‘not_main’ from incompatible pointer type [-Werror=incompatible-

уходи
#339 #943656
>>943630

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


Ебать дебил.
943657
#340 #943657
>>943656
А что не так? const int a = 3 выделяет память, компилятору нужно ее читать. Удаляется такая "константа" только с -flto.
943659943660
54 Кб, 707x322
#341 #943659
>>943657
Съеби уже нахуй отсюда со своими историями
943670943671
#342 #943660
>>943657
Просто интересно, а по каким причинам нормальный компилятор не подставит значения константы в местах использования константной переменной?
943669
#343 #943669
>>943624
означает вектор, но векторов в C нет, это массив argv ты обращае
>>943631
Чем дефайн плох маньк?
>>943660
Он не подставит значения манька тупая, const можно задать во время выполнения. А дефайн это впечатано в код программы.
Попробуй
int s;
scanf("%d",s);
const int d=s;
printf("%d",d);
Это такипеременная которую нельзя менять.
#344 #943670
>>943659
Это частный случай. Алсо, память все равно выделится.
943674
#345 #943671
>>943659
У тебя там какой-то манямирочек, от const можно передать поинтер, от дефайна нельзя.
943674
#346 #943674
>>943670

> Алсо, память все равно выделится.


Да похуй, хоть 100 раз. Никакого "компилятору нужно ее читать" нет и это главное.
>>943671
Научись следить за ходом обсуждения, прежде чем влезать, а пока иди нахуй.
943675
#347 #943675
>>943674

>читать


Если знаешь значение константы зарание то #define как правило лучшее решение.
const же совсем не для того, и конст будет иметь свою ячейку в памяти.
943725
#349 #943712
>>943553

>Не правильно пишешь, формат задается один раз перед всем выражением.



блядь что
#350 #943725
>>943675

>#define как правило лучшее решение.


Может быть и так, но у многих на препроцессор категорическая аллергия - и на то есть существенные причины.
Это следует понимать, а не быть неполноценным аутистом вроде тебя.
943741
#351 #943741
>>943725
У многих - это у тебя лично?
Во всех сишных проектах, с которыми мне довелось работать - везде так или иначе использовался предпроцессор.
943755
#352 #943755
>>943741

> >многих на препроцессор категорическая аллергия


>везде так или иначе использовался предпроцессор.


Это совершенно ортогональные утверждения.
А ведь ты и правда туповатый аутист, плохо быть тобой.
944241
#353 #943764
Совершенное число. Как вывести сумму всех делителей совершенного числа на экран?
void main()
{
int a, i, x1=0, cnt=0, summ=0;
printf("Vvedite luboe desyatichnoe chislo:");
scanf("%d", &a);

for (i=1; i<=a-1; i++)
{
x1=i;
if (a%x1==0)
summ+=i;
}
printf("summ=%d\n", summ);
if (a==summ) printf("Sovershennoe chislo");
else printf("Ne sovershennoe chislo");
}
943927
#354 #943776
>>943771
не работает. я только начал недавно вкатываться
943793
#355 #943793
>>943776
Для начала сделай так чтобы твой говнокод меньше походил на говно и больше на код.
А теперь нахуй иди, дебил обосранный.
943895
#356 #943895
>>943793
Поясни, что не так, или петух.
Мимо
943897943899
#357 #943897
>>943895

>etot translit urovnya chervya-pidora


>Поясни, что не так


Ясно.
943904
#358 #943899
>>943895
Для кого шапка PR написана ? Ссылку на ебучую песочницу делай, а не гавнокод вставляй.
943904
#359 #943904
>>943897

> транслит как признак именно говнокода


>>943899

> Ссылку на ебучую песочницу делай, а не гавнокод вставляй.


> мимо


У меня нет кода другого анона, ибо я мимо, но я же вижу, что ты человека просто так обоссал.
#360 #943927
>>943764
А что конкретно у тебя не работает в приведенном коде?
944112
49 Кб, 1040x759
хелп #361 #943985
Посоветуйте, пожалуйста, подходящее решение для моей проблемы. У меня есть простой алгоритм написанный в матлабе. Пикрил. Который там занимает 4 строчки.

Хочу сделать тоже самое, но теперь на си/си++. Читал, что в крестах есть std::vector, но не уверен, что это то, что мне нужно.

1. Мне нужно хранить 2d вектора. Их будет очень много. Миллионы штук.
2. Отсортировать их в лексикографическом порядоке.
3. Подсчитать число уникальных векторов.

Больше ничего делать с ними не нужно.

Есть ли уже готовые инструменты в стандартной библиотеке для этого?

Алсо могу рассматривать только элементы языка по стандартам C89 и C++03 максимум. Т.к. компилятор будет MSVC 2010. И изменить это нельзя.
944015
#362 #944015
>>943985

Вектор в плюсах - это одномерный массив. Что такое "2d вектор"? Это матрица?

>1. Мне нужно хранить 2d вектора. Их будет очень много. Миллионы штук.



std::vector<std::vector<std::vector<int>>> или что там у тебя вместо int

Это будет твоё хранилице всех матриц.

>2. Отсортировать их в лексикографическом порядоке.



std::sort, тебе нужно лишь написать функцию сравнения двух матриц.

>3. Подсчитать число уникальных векторов.



Сравниваешь каждую пару соседних векторов в отсортированном массиве с помощью уже написанной функции и удаляешь одинаковые.
944033
#363 #944027
>>942599
Нахуй сишнику знание fastcall-a?
22 Кб, 312x325
#364 #944033
>>944015

>Что такое "2d вектор"? Это матрица?


Вектор в евклидовом пространстве размерности 2 (плоскости). В обычном школьном смысле.

Закодировать его нужно через координаты по осям x и y.
944037
#365 #944037
>>944033

Тогда std::vector<std::pair<int,int>> (или что там вместо int).
#366 #944056
>>942599
1. За функцией __cdecl стек чистит caller, в __fastcall некоторые аргументы передаются через регистры.
2. Выравнивание, наверное, на double, поэтому sizeof будет 3 * sizeof(double). Или char будет выровнен на размер указателя, а затем будет лежать double.
3. Хуй знает.
#367 #944112
>>943927
все работает. я не понимаю как вывести помимо числа совершенное оно или нет, его делители все
944116
#368 #944116
>>944112
Клади по ходу вычисления делители в массив или делай повторно тот же самый цикл, добавив внутрь if printf делителя.
#369 #944241
>>943755
Как и случаем ранее.
Видишь ли, использовать макроопределения для заранее известных констант - это классическое и повсеместно используемое решение, и на то действительно есть существенные причины. Вне зависимости от чьей-либо (твоей прим. авт.) аллергии.
944265944304
#370 #944265
>>944241

>препроцессор с - мерзостный высер от дегенератов для дегенератов (тебя)


>использовать макроопределения для заранее известных констант - это классическое и повсеместно используемое решение


Опять же - совершенно ортогональные и истинные утверждения.
944296
#371 #944296
>>944265
Царь, ты?
944319
#372 #944304
>>944241

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



Настолько существенные, что нельзя использовать enum?

>>943676
944311944315
#373 #944311
>>944304
А ты сделай мне double или char * enum.
944344
#374 #944315
>>944304
Алсо логически более правильно использовать enum для связанных параметров (список состояний, например), а не объявлять через него любую целочисленную константу, попавшую в исходный код.
#375 #944319
>>944296
Не стоит вскрывать, дурачок.
#376 #944344
>>944311

Ок-ладно. А как насчёт регистровых констант?
944359
#377 #944359
>>944344
Ты про спецификатор register?
944360944371
#378 #944360
>>944359
Иди нахуй.
944371
#379 #944371
>>944359

Да.

>>944360

Нет, ты.
944375944401
#380 #944375
>>944371

>Да.


Пизда.
12 Кб, 415x467
3 Кб, 310x220
6 Кб, 382x318
#381 #944386
>>935715 (OP)
Сап, пр, помоги нюфагу, есть файл с числами, считываю из него числа в массив и вывожу его во второй, все бы ничего, да только считывается только первая строка файла, как заставить цикл переходить и на вторую строку?
944387
#382 #944387
>>944386
Ты считал k + 1 (0..k) элементов из файла, а пишешь k (0..k-1). Алсо, закрой file2.
944392
4 Кб, 166x372
13 Кб, 411x458
#383 #944392
>>944387
Так, поставил k+1, все считало, только откуда взялись нули?
944417944419
#384 #944401
>>944371
Во-первых, никто не мешает тебе написать const register int = MY_DEFINE там, где это требуется. Макроопределения вообще удобнее тем, что их можно легко расшарить, а в случае с константными переменными - это уже либо static, либо extern. К слову, объявлять регистровые переменные в global scope - это как раз не самая популярная практика, и не все компиляторы это одобряют.
Во-вторых, если тебе нужно экономить на спичках, то не повод ли это отказаться от C и посмотреть в сторону ассемблера?
944435
#385 #944417
>>944392
k-1? Два лишних значения пишешь, по-моему.
944421
#386 #944419
>>944392
Ну и вообще: http://pastebin.com/EzbjnsPR .
Нахер тебе нужны эти массивы.
944448
#387 #944421
>>944417
Почему там два лишних? Если считалось, допустим, 6 символов, то k = 5 (0..5). Их и выводим в цикле for (i = 0; i <= k; i++).
944426
#388 #944426
>>944421
Потому что k = 6 в этом случае.
944429
#389 #944429
>>944426
Действительно, это я тупой.
#390 #944435
>>944401

>Во-вторых, если тебе нужно экономить на спичках, то не повод ли это отказаться от C и посмотреть в сторону ассемблера?



Вот это-то я, блядь, и хотел сказать. Если так сильно жалко память, что готов пожертвовать даже скоупингом имён или писать undef, нахрен писать на C?
944450
#391 #944448
>>944419
Сортировка данных, из файла считывать и сортировать, для этого и массивы
#392 #944450
>>944435

>нахрен писать на C?


Для мультиплатформы, например.
Нет, не армопараша и подобное говно.
944458
101 Кб, 600x518
#393 #944453
Все тотже начинающий неосилятор.
Сделал таблицу для квадратов и кубов числа но она съезжает в бок когда число становится больше. Как записать чтобы число выдавало справа налево?
http://pastebin.com/kvkkDLUs
944461944463
#394 #944458
>>944450

>Для мультиплатформы, например.



Нипонял.
944465
#395 #944461
>>944453

printf возвращает число символов, которое он вывел. Делаешь так: отдельно печатаешь числа и отдельно печатаешь пробелы. Напечатал число - проверил число символом - добилдо нужного числа символов пробелами.
944468
#396 #944463
>>944453
printf("| %d | %d | %d |\n", i, ii, iii);
printf("| %5d | %5d | %5d |\n", i, i
i, iii);
944468
#397 #944465
>>944458

>Нипонял.


Это нормально.
Макеты для cuda, например.
59 Кб, 524x514
#398 #944468
>>944461
>>944463
Ебать я тупой. Отдуши братишки.
#399 #944480
Поясните начинающему: пытаюсь запилить строки с длинной и rc. С динамической-то частью всё просто, но как прописать это в статике? Т.е в асме я бы прописал что-то типа:
hello_ref DW -1
hello_len DW 11
hell_data DB "hello world", 0
В принципе возможно сделать без спецефических для компилятора хаков?
944484944572
#400 #944484
>>944480

Тебе нужно хранить длину вместе со строкой?

struct
{
size_t dlinnnnnnna;
char pointer string[];
}
944485944614
#401 #944485
>>944484

pointer лишний, лол.
944571
#402 #944571
>>944485
Ваще лол. проста лооооооооооооооооооооооооооооолишеееее
лаааааааааааааааааааааааааал нахуй
#403 #944572
>>944480
Зачем rc для ro-строк?
944614
#404 #944608
Сап, ребят, где-то видел нерабочий код на C (кажется был прототип функции, без тела, и она в main вызывалась), который gcc при этом под O3 компилил и не жаловался.
Вроде в твиттeре кто-то постил прикола ради давно еще, но это не точно, помогите плз найти
944773
#405 #944614
>>944484
Благодарю.
>>944572
Для унификации же.

Похоже на параною с моей стороны, но всё ж успокойте меня:
Для ro строк использую структру {int rc; int len; const char data[];}, ну что бы её
в неизменяемую секцию ложило, для rw - {int rc; int len; char data[];}.
Тут ведь гарантирутся их эквивалентность? Компилятор ничего не соптимизирует?
944633
#406 #944633
>>944614

> ну что бы её


>в неизменяемую секцию ложило


Кого — структуру?
944634
#407 #944634
944635
#408 #944635
>>944634
Лол.

Короче, строковые литералы компилятор всегда суёт в RO-секцию и тип у них const char[<длина>], поэтому присваивать их можно только указателям на const char.

К структурам это не имеет никакого отношения.
944640
#409 #944640
>>944635

>


>К структурам это не имеет никакого отношения.


Ну, кроме упомянутого в предыдущем предложении присваивания. Нормальный компилятор не даст присваивать указателю на char. Ну или по крайней мере прокукарекает warning про ISO C forbids blah-blah-blah...
#410 #944647
Алло нахуй, куда уехал мой с++ трендж?
944659
#412 #944661
>>944659
Ты ошибся, дружище. Мне нужна помощь по ёбаному MFC
944663946371
#413 #944663
>>944661

>MFC


monoidal functor category? Так тебе туда.
944671
#414 #944671
>>944663

>monoidal functor category?


Нет. Это дерьмо гораздо хуже, и уроков по нему минимум.
945086
688 Кб, 1366x768
454 Кб, 1366x768
#415 #944672
Сука, больной уёбок
944687944702944748
#416 #944687
>>944672

>больной уёбок


ващет так и есть
944695
#417 #944695
>>944687
Это уже стало нормой?
#418 #944702
>>944672

Учить foundation classes по ютубу - это клиника.

Открой MSDN или книжку найди какую-нибудь.
944726
164 Кб, 1366x768
#419 #944726
>>944702
Книжки есть, но по MFC даже в ютубе оч мало информации
944752944758944769
#420 #944748
>>944672

>Одноклассники

944797
#421 #944752
>>944726

Так, СТОП. Microsoft Foundation Classes? А почему в C-треде?
944762944799
#423 #944762
>>944752

>А почему в C-треде?


очевидно, анон считает, что здесь собрана ит элита и он прав.
149 Кб, 570x807
#424 #944769
>>944726
читай пикрил и уебуй с нашего уютного тхредика
944804
#425 #944773
>>944608
ну ребят, неужели никто не знает?
944777944792
#426 #944777
>>944773
А ты думаешь, тут любят коллекционировать баги гцц? Могу тебе предложить какой-нибудь int main = 0xc3; но это явно не то.
944904
#427 #944792
>>944773

Это вполне мог быть вызов функции, который никогда не могу случиться, например.
#428 #944797
>>944748
Как бута штото плахое :^)
#429 #944799
>>944752

>почему в C-треде?


Потому что С++-тред проёбан, и я не могу его найти
#430 #944804
>>944769
Неактуально для новых студий
944847
#431 #944847
>>944804
ой, иди нахуй тогда, твоя mfc уже лет как 10 протухла
944935
#432 #944904
>>944777
это даже не то что бы баг, скорее undefined behavior там был, мне кажется
#433 #944935
>>944847
Не MFC протухла, а все руководства и книги по ней
Хотя и MFC уже пахнет говном из привокзального сортира. Но тогда на чём мне пилить? Qt?
944947944951
#434 #944947
>>944935

> Qt


да, ну или .net если ты аутист

> все руководства и книги по ней


mfc было тухлым изначально, даже пакистанские говноеды из мелкософта это признавали, так что книги актуальны до сих пор
мимо winapi->mfc->qt господин
944955944957944963
#435 #944951
>>944935

>Qt


Там уже давно C++ не пахнет. Можно все на веб стаке или qml лабать, что большинство крупных контор (близзард например) и делают
#436 #944953
>>944951

>Там уже давно C++ не пахнет. Можно все на веб стаке или qml лабать



А можно и на плюсах тоже, юзать куэмэль не заставляют.
#437 #944954
>>944951
Только Qt-говно что на C++, что на QML одинаково тормозит, в отличие от MFC, в котором хоть и абсракции, но хотя бы ничего не лагает на пустом месте.
944958944963
#438 #944955
>>944947

>mfc было тухлым изначально


аргументировать ты конечно не сможешь
как и все кукареки в интернетах
944958
381 Кб, 807x719
#439 #944957
>>944947
Так, может на WinAPI всё и делать?
#440 #944958
>>944954

>хоть и абсракции


хуякции, и вот ему тоже полбу >>944955
в mfc тебе придется жрать солянку из winapi и ооп
944960
#441 #944959
>>944951
Дело в том, что я не крупная контора.
#442 #944960
>>944958
Солянка солянкой, зато всё автоматизировано
#443 #944962
p.s. и да говноеды, хотите жрать говно, жрите, никто вас отговаривать не будет, но здесь не кресты нехуя
944998
6 Кб, 255x200
#444 #944963
>>944947
>>944951
>>944954
Ну и что выбирать?
#445 #944971
945365
#446 #944998
>>944962

>нехуя


Уроки-то сделал?
945038
#447 #945000
>>944963
dlangui
945373
#448 #945038
>>944998
проверяй за щекой
#449 #945071
945373
#450 #945086
>>944671
Microsoft Foundation Classes?
945363
#451 #945087
>>944963
Haskell
945373
#452 #945097
Посоны посоветуйте современной литературы по C (С11 желательно). Раньше читал K&R когда был задротом, но уже подзабыл. Хочется начать снова на чем то более свежем.
945226945257945533
#453 #945226
>>945097
скинул в личку, проверяй
#454 #945257
>>945097

>читал туториалы когда был ньюфагом


Проиграл. Сдаётся мне, ты просто идиот, учитывая что в стандартах практически нихуя не меняется.
#455 #945363
>>945086
Да. Но я уже понял, что сделал не так, и как тут с чем работать.
#456 #945365
>>944971
В ближайшем будущем попробую
32 Кб, 556x561
#457 #945373
>>945000
>>945071
>>945087
Ну а новые езыки мне зочем есле есть с++?
945402
#458 #945402
>>945373

>c++


>c–+

sage #459 #945533
>>945097
Прата из шапки, потом стандарт.
#460 #945730
Поясните, как на си в VS 2017 прогать?
#461 #945732
>>945730
никак
945737
#462 #945737
>>945730
>>945732
почему никак? в настройках проекта же можно C выставить
945743
#463 #945743
>>945737
vs для пидоров, поэтому никак
945799
#464 #945788
>>942641
тоже поначалу искал подвох, но потом понял, что всё-таки ответ на поверхности
#465 #945799
>>945743
О!
Уважаю братишка.
#466 #945829
>>945730

>VS 2017


>си


Нахуя?
945841
#467 #945841
>>945829
Ну попердолить там настроечки
945911
#468 #945851
>>945730

>VS 2017


Нахуя?
#469 #945911
>>945841
Попердоль в чем-нибудь другом
#470 #945980
С какой стороны обрезается память realloc'ом?
946057
#471 #946049
>>945730

Больно.
#472 #946057
>>945980

Realloc может не только обрезать, но и переместить.
946064
#473 #946064
>>946057
Я понял, но я только уменьшаю размер массива
946303
#474 #946180
Как работает memset? Циклом память забивает?
Где можно посмотреть реализацию? В glibc нихуя не понятно.
946303946389
#475 #946303
>>946064

Ответ тот же.

>>946180

>Где можно посмотреть реализацию?



Я бы погуглил вместо тебя, но не буду.

Знаю, что 1) Есть DMA. 2) есть специальные инструкции.
946305
#476 #946305
>>946303

> Ответ тот же.


Лол, она может переместить даже когда я не требую больше памяти из кучи? Как так-то? ANSI C
946322
#477 #946321
С++ тред куда-то укатился
946322946326946339
#478 #946322
>>946305

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



Да.

>>946321

->>>>> >>931827 (OP)
946324
#479 #946324
>>946322

> Да.


Как такое возможно, немногословный ты мой друг?
946450
#480 #946326
>>946321
И хуй с ним
#481 #946335
напомните, malloc по стандарту выдаёт выравнивание к double?
946389
#482 #946339
>>946321
C++ = meme lang.
946354946365
#483 #946354
>>946339
пчм?
946359
#484 #946359
>>946354
Маня абстракции, ООП. На C всегда можно написать более быстрый код.
946371
#485 #946365
>>946339
Я лично считаю c++ мем языком из-за его плохого дизайна.
В язык просто накидали рандомных фич для решения непонятно каких проблем.
Вместо дженериков эти шаблоны, которые "решают" две проблемы одновременно. Но они хуже джавовских/растовских дженериков и в метопрограммировании мягко говоря сосут
#486 #946371
>>946359
Не ебу, что за абсракции. За всю жизнь написал на нём два с половиной хелловорлда и теперь дрочу FMC, как видно тут >>944661
Запилил всратый калькулятор, что попробовать ещё сделать? олсо для матриц хуету, которая будет считывать определитель?
sage #487 #946389
>>945730
Создаешь C++ проект, добавляешь файлы с расширением .c, пишешь. Кукаретиков не слушай, они даже не пробовали.

>>946180
Да, memset забивает циклом память. В общем случае выбираются инструкции с операндами "пожирнее" (SSE c 128-битными, например), а адреса, не подходящие для этих инструкций (невыровненные начало и хвост буфера), заполняются с помощью инструкций с меньшим количеством операндов.

>>946335

> напомните, malloc по стандарту выдаёт выравнивание к double?


Выдает адрес с выравниванием, подходящим для любого нативного типа. Если именно double требует наибольшего выравнивания, то да.
946391
sage #488 #946391
>>946389

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


С меньшим размером, конечно же.
113 Кб, 695x975
#489 #946450
>>946324

По стандарту. Это сделано для того, чтобы программа могла уплотнять выделенные фрагменты памяти.
946451
#490 #946451
>>946450
Понятно, т.е. мне всегда для realloc подрубать второй указатель и проверять
946452
#491 #946452
>>946451

Не надо ничего проверять, просто индексировать надо оффсетами, а не указателями. ОБЫЧНО адрес выделенной области тебе неинтенесен.
946453946459
#492 #946453
>>946452

> просто индексировать надо оффсетами, а не указателями


Я даже не знаю, что это.
Просто учусь
#493 #946457
>>935715 (OP)
Бля как выделить гигабайт памяти? Пробовал и через new и через malloc нихуя не понимаю, не могу выделить нихуя, я вобще хз как так.
946459946460
sage #494 #946459
>>946452

> Не надо ничего проверять


А что ты делаешь, когда realloc() NULL возвраащает?

>>946457
А у тебя он есть? Попробуй mmap().
946688
#495 #946460
>>946457
Те смотрю в диспетчере 0 эффекта
946462
sage #496 #946462
>>946460

> Те смотрю в диспетчере 0 эффекта


Что ты в диспетчере смотришь? Я так понимаю, это винда, в винде десяток колонок на тему памяти. Алсо, настоящую память тебе дают по мере использования - попробуй забить свой гиг единичками (не нулями!).
74 Кб, 372x246
#497 #946463
946464946467
#498 #946464
>>946463
Один вопрос WHAT THE FUCK
sage #499 #946467
>>946463
1) На стеке ты можешь выделить не больше нескольких мегабайт.
2) Целочисленные константы по умолчанию int, этот int переполняется при умножении. Добавь к любому числу в строчке с size суффикс ULL (unsigned long long).
946472
67 Кб, 459x237
#500 #946472
946476
sage #501 #946476
>>946472

> суффикс

#503 #946688
>>946459

>А что ты делаешь, когда realloc() NULL возвраащает?



Это да.
Тред утонул или удален.
Это копия, сохраненная 13 мая 2017 года.

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

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