Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. Дрочим на --analyze. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio 2015 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и неполной поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Stephen Prata "C Primer Plus, 6th Edition" (2014) Свежая знает про C89, C99, C11, описывает различия, объемная около тысячи страниц, годная хотя есть некоторые шероховатости, с вопросами, упражнениями и ответами. Читать после K&R или до.
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)
Stephen G. Kochan "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
>>770548 Несколько лет назад, когда 64-битные системы еще не все заполонили ставил себе Haiku. Чудесная ОС. Жаль что не взлетела. На моем 4 пентиуме выдавала чудеса производительности в области проигрывания видеофайлов. На ней можно было одновременно запустить дохуя HD видео на и они не глючили. В шиндовс и прыщах такое сделать было невозможно. мимо-крокодил
>>770603 >чудеса производительности тото анон не о производительность, а об архитектуре ОС, в частности он абассал концепцию "все есть файл", но и в замен ничего не предложил.
>>770623 Ни один линк не был кликнут, такова судьба линков в /pr. Вот хуй же знает что с этим делать, никто читать не умеет, букв не знает, продолжает задавать глупые вопросы.
В AS400 файлов вообще не было изначально, например.
Заодно, если ты тот же анон что хотел обмазаться несвежим ваткомом и спрашивал про современные техники оптимизации
> SSA is not an implementation detail, it's a totally different way of thinking about a code. It is a way to turn your messy imperative code into a nice, clean, immutable functional code that is suitable for analysis.
Things that were either exceptionally complex or totally unthinkable in the era of three-address IRs are laughably trivial in SSA or CPS. E.g., moving loop invariants, detecting loop induction variables, transforming simple CFG into selects, ADCE and constant folding - all this stuff is absolutely trivial in SSA
>>770625 Угадай, имплементировано ли оно в Watcom C. В угадывании тебе сможет помочь выяснение момента появления этой техники в GCC.
AS400 - одна из самых продвинутых систем с точки зрения безопасности и разграничения прав доступа. Специальная роль "security officer", например, там была заложена с самого начала.
Читал до Праты - С++ программирование Герберта Шилдта, потом мне посоветовали книгу Стивена Праты С++ примеры и упражнения, начал читать оглавление и там написано - Прежде чем начинать изучать С++ вам возможно, прийдется начать изучать Си, и вот я здесь, изучаю на данный момент 4 главу книги Праты по Си, там подробно описаны строки, спецификаторы преобразования, в самом начале книги описали побитовые операций, сука, более идеального способа подачи информаций я ещё не видывал, и если хотите начать изучать Си, читайте Прату, не слушайте быдло-долбоебов которые говорят, что эта книга сложная, нихуя подобного, она пизже, чем то, что вам дадут в итоге, разница видна сразу. Алсо хотел бы спросить, так как пишу программки на VS2015, то хотел бы спросить, программы Си теперь полностью совместимы с С++ ? Ибо файл сохраняется не в .c а в .cpp...
>>770627 > вставляет код телеметрии Во-первых, уже не вставляет (если линковаться с CRT статически - осталось, но отключается документированной магией no_telemetry.obj). Во-вторых, даже в активном состоянии оно бы всего лишь отчитывалось об именах длл и времени загрузки - обычное профилирование, ничего интересного.
>>770638 Нет, между Си и C++ в Си-стиле есть разница. Сходи в опции проекта, выключи прекомпилированные заголовки, убери stdafx.h из проекта, а файл .c отлично создается (и компилируется именно как C), если при сохранении вручную указать расширение .c, а не .cpp.
>>770628 >В угадывании тебе сможет помочь выяснение момента появления этой техники в GCC. ты приведи цифры, насколько твой модный, современеый гцц с полной оптимизацией дает пасасать старому ваткому с такой же степенью оптимизацией, а все эти модные технологии и фичи оставь хипстерам. > "security officer" в чем ее приемущество?
>>770645 >ты приведи Ты ничего не хочешь сделать самостоятелдьно, даже на линк не можешь кликнуть. Как ты вообще дожил такой до своих скольки-там лет в дикой природе?
>> "security officer" >в чем ее приемущество? Я тебе дал все ключевые слова, по которым можно найти информацию. В прошлом треде даже советовал конкретную книжку, могу повторитьт - "Inside AS/400" by Frank G. Soltis. Тебе этого недостаточно?
>>770648 >Ты ничего не хочешь сделать самостоятелдьно, мне это не нужно, есть ты, который без ума от каких то там сферических технологий без конкретных доказательств, потрудись их превести на примерах гцц и ваткома >Я тебе дал все ключевые слова, по которым можно найти информацию. тоесть абасать Plan9 с ее срвером авторизации и файловым подходом, можно не вникая в детали?
>>770650 >мне это не нужно Тогда зачем вопросы задаешь? Пилите ваши сокеты, не отвлекайтесь.
>абасать Plan9 с ее срвером авторизации и файловым подходом, можно не вникая в детали Я на конкретном примере конкретных технических решений Plan9 тебе показал что эти долбоебы ничего не поняли и ничему не научились, в какие детали мне еще надо вникать?
>>770653 Думаем что можно только позавидовать железобетонной репутации Роба Пайка и Кена Томпсона. Если их даже после разработки Go продолжают считать неглупыми людьми, то теперь, вероятно, такое мнение о них сохранится в любом случае, чтоб они не сделали. Даже если повторят любое из достижений лауреатов премии Дарвина — останутся в нашей памяти как неглупые люди
>>770653 Хорошая параша, пытался ей обмазаться. Богатая библиотека, много чего попытались упростить. Единственное, слайсы какие-то ебанутые. Но в итоге из-за простоты своей он меня и оттолкнул. Не могу я без байтоебства и понимания того, что происходит. Сейчас пытаюсь понять C++11/14, такая-то зарядка для мозгакоторого нет
>>770826 Указатели нужны, чтобы было легче выстрелить себе в ногу. Где ещё у тебя будет возможность выйти за пределы массива? Или обратиться к несуществующей переменной?
А серьёзно, например, аргументы в функцию передают по значению, то есть копируются. А передавая указатель на переменную ты в функции можешь поменять её значение. Также структуры можно в функцию передать по указателю, что заметно экономнее.
>>770962 >структуры можно в функцию передать по указателю, что заметно экономнее Вот из-за таких как ты и придумали references, чтоб ты указатели в функции не передавал и не мутировал их там.
>>770826 Указатели не понимал только жид Спольский и его друганы. Любой славяно-ариец знает, что это всего лишь целое число, адрес в памяти некоей переменной, содержащей нужные ему данные.
>>770986 Этот дурень наверно спутал тред с плюсовым и говорит о константных ссылках.
>>770962 >Также структуры можно в функцию передать по указателю, что заметно экономнее. Не учи новичков хуйне. Выигрыш в перформансе будет только при передаче реально больших структур (а небольшие наоборот выгоднее передавать по значению), ты не в 85-м.
>>771260 По памяти - нет, выигрыша не будет нигде, когда есть ограничение - приходится держать в одном экземпляре.
По скорости - на небольших объектах будет выигрыш за счёт меньшго кол-ва индерекций данных, лучшей лакальности данных, различных оптимизаций компилятора (при передаче по ссылке их, как таковых, не может быть).
>>771292 Все так, но когда захочется изменять что-то в передаваемой по значению структуре, придется править все вызовы функции, а вот подход "всегда передавать указатель, а потом делать локальную копию структуры при необходимости" этим недостатком не страдает. А по значению имеет смысл передавать те структуры, содержимое которых ты мог бы передать в качестве отдельных аргументов (вроде vector3 pos вместо float x, float y, float z).
> -Seibel-: When do you think was the last time that you programmed?
> -Allen-: Oh, it was quite a while ago. I kind of stopped when C came out. That was a big blow. We were making so much good progress on optimizations and transformations. We were getting rid of just one nice problem after another. When C came out, at one of the SIGPLAN compiler conferences, there was a debate between Steve Johnson from Bell Labs, who was supporting C, and one of our people, Bill Harrison, who was working on a project that I had at that time supporting automatic optimization.
> The nubbin of the debate was Steve's defense of not having to build optimizers anymore because the programmer would take care of it. That it was really a programmer's issue. The motivation for the design of C was three problems they couldn't solve in the high-level languages: One of them was interrupt handling. Another was scheduling resources, taking over the machine and scheduling a process that was in the queue. And a third one was allocating memory. And you couldn't do that from a high-level language. So that was the excuse for C.
> -Seibel-: Do you think C is a reasonable language if they had restricted its use to operating-system kernels?
> -Allen-: Oh, yeah. That would have been fine. And, in fact, you need to have something like that, something where experts can really fine-tune without big bottlenecks because those are key problems to solve.
> By 1960, we had a long list of amazing languages: Lisp, APL, Fortran, COBOL, Algol 60. These are higher-level than C. We have seriously regressed, since C developed. C has destroyed our ability to advance the state of the art in automatic optimization, automatic parallelization, automatic mapping of a high-level language to the machine. This is one of the reasons compilers are. basically not taught much anymore in colleges and universities.
>>771759 Я не понимаю, когда я читал историю C, было очевидно, что он стал популярным совершенно естественным путём, никто его насильно не форсил. Если так вышло, что этот язык оказался более удобен, может, есть смысл задуматься всем тем, кто ратовал за эти свои amazing languages, которые не стали так известны.
> Fran Allen's work has had an enormous impact on compiler research and practice. Both alone and in joint work with John Cocke, she introduced many of the abstractions, algorithms, and implementations that laid the groundwork for automatic program optimization technology. Allen's 1966 paper, "Program Optimization," laid the conceptual basis for systematic analysis and transformation of computer programs. This paper introduced the use of graph-theoretic structures to encode program content in order to automatically and efficiently derive relationships and identify opportunities for optimization. Her 1970 papers, "Control Flow Analysis" and "A Basis for Program Optimization" established "intervals" as the context for efficient and effective data flow analysis and optimization. Her 1971 paper with Cocke, "A Catalog of Optimizing Transformations," provided the first description and systematization of optimizing transformations. Her 1973 and 1974 papers on interprocedural data flow analysis extended the analysis to whole programs. Her 1976 paper with Cocke describes one of the two main analysis strategies used in optimizing compilers today. Allen developed and implemented her methods as part of compilers for the IBM STRETCH-HARVEST and the experimental Advanced Computing System. This work established the feasibility and structure of modern machine- and language-independent optimizers. She went on to establish and lead the PTRAN project on the automatic parallel execution of FORTRAN programs. Her PTRAN team developed new parallelism detection schemes and created the concept of the program dependence graph, the primary structuring method used by most parallelizing compilers.
> Allen was a professor at New York University from 1970–73.[2] Allen became the first female IBM Fellow in 1989. In 2007, the IBM Ph.D. Fellowship Award was created in her honor
>>771771 Какого в пень юникс-вея, похеру всем был вей. Юниск стал популярен потому что малолетние долбоебы, которые сейчас играют в NodeJS, тогда до серьезных компьютеров не допускались. Все во что они могли играться это в тормозные недокофеварки типа PDP, куда они радостно и ставили Unix, потому что нормальная ОС на этом недожелезе во-первых, тормозила, во-вторых с ней надо было разбираться. С Юниксой разбираться было нечего, потому что в этой недосистеме и сейчас-то нихрена нет, а тогда не было совсем ничего.
>>771784 >типичный йоба-рисечер-кукаретик IBM сейчас ведущая компьютерная корпорация. Ничем не уступает гуглу по финансовым показателям. А по разработкам дает ему пососать на 10 лет вперед.
>>771796 >Фортрана лютейшее говно мамонта, хуже может быть только бейсик >PowerShell только до баша ей еще очень далеко >>771804 >А по разработкам дает ему пососать на 10 лет вперед конечно, так далеко, что сервера от IBM синоним лютейшего пиздеца
>>771810 > Фортрана > лютейшее говно мамонта Школьник плиз. Фортран ЛУЧШИЙ язык программирования на данный момент. Но поработать с ним дают только тем, кто имеет phd.
Школьнички, вот вы никогда не задумывались почему в США изобилие еды? И при чем тут Фортран? Подумайте над этим на досуге. Тогда возможно поймете почему от JS нет изобилия еды, а от Фортрана есть.
>>771815 Фортран - язык программирования, конечно, отвратительный. Но речь была не о нем, а о качестве его трансляторов. До которого всем - как до Луны.
>>771810 >сервера от IBM синоним лютейшего пиздеца Сберу не забудь рассказать, у них процессинг на них крутится. Правда, на нормальные машины денег не хватило, наскребли только на 795. Но справляются и они.
>>771872 >>771874 > it seems that even in 2015, Fortran is being used a lot. > I just came across this (alternate link) list which basically is a list of 13 codes approved by DOE's OCLF facility to run on the 300-petaFLOPS Summit machine which will be made available to researchers in 2018. I tried to find the main language used for the code (based on a quick google search) and here is what I found:
XGC Fortran
SPECFEM Fortran
ACME Fortran (Bunch of climate codes)
DIRAC Fortran (Mostly)
FLASH Fortran
GTC Fortran
HACC C/C++
LS-DALTON Fortran (some C)
NAMD C/C++
NUCCOR Fortran
NWCHEM Fortran
QMCPACK C++
RAPTOR Fortran
> So out of 13 codes, at least 10 (based on my quick search) appear to be written in Fortran. Not bad for a 50 year old language.
>>771898 Именно по этой, вероятно, причине гнутый фортран сливает фортрану от IBM в разы. И умеет компилировать в архитектуры отличные от говнопекашечек.
>>771810 powershell именно как шелл уделывает баш проблема в том что под винду никогда не было годных эмуляторов терминала но ведь шелл и эмуль - разные вещи
>>771810 > сервера от IBM синоним лютейшего пиздеца блядь, ты ебанутый, не пиши в том что не разбираешься на них была и есть охуенная аппаратная виртуализация просто несколько лет назад костылями прикрутили аппаратную виртуализацию и в x86, после этого стало выгодно везде пользовать x86 машины
>>772092 Lotus Domino на момент своего появления была невъебенно прорывной системой. Это был интранетный интернет когда в мире еще не было того интернета как мы его сейчас знаем.
Про LPAR же ты знаешь ровным счетом ничего, как видно из твоего аргументированнейшего ответа.
>>772105 >LPAR нет не знаю, но я знаю, что админы в госконторах настолько днище, что они просто накатят виндовз на сервер и сверху поставят скюл и им поебать на все эти LRAP
>>772151 Ты до сих пор продолжаешь под словом "сервер IBM" понимать "ПеКа-сервер", несмотря на то что уже много лет назад IBM весь бизнес по производству этих "ПеКа-серверов" для голодранцев продала Lenovo?
>>772148 Если клиентам нравится и они платят деньги, зачем же им отказывать? Это тебе не нодэжээсочка, где время жизни фреймворка измеряется в секундах, и пердолься с ним дальше как хочешь, если тебя по неопытности удосужило на нем что-то построить
>>772218 Это Пека-"серверы", которые давно проданы китайцам, причем здесь они? В этом треде о ПеКа-"серверах" никто не упоминал кроме тебя. Информацию о 795, которые упоминались, и других серверах IBM ты можешь нагуглить самостоятельно (я в этом уже немного сомневаюсь, судя по тому что ты не смог этого сделать до сих пор, но вряд ли чем-то смогу тебе помочь если так). Могу уверить тебя в одном - Windows на них поставить невозможно.
>>772251 В провинциальных отделениях - может быть. Хотя когда-то стояли и в отделениях одной госконторы Alpha-серверы от Digital, и крутился на них MUMPS. А в головном офисе - отчего же, и мейнфреймы бывают.
у меня пиздец, ребятки Знаю, как работает си, знаю всякие операторы, функции, структуры и другую поеботу, но не могу решать задачки за первый курс универа Просто смотрю на задание, и не могу представить себе алгоритм решения. Пиздец, блядь, я вылечу нахуй из шараги если не сдам
Locate the first instance of a substring in a string.
Results: If string contains substring, the return value is the location of the first matching instance of substring in string. If string doesn't contain substring, the return value is 0. Matching is done on an exact character-for-character basis with no wildcards or special characters.
Side effects: None. ----------------------------------------------------------------------
>>771780 > посмотри на календарь Внутри WinRT классический Windows API, поменялись только имена DLL. Это просто красивая оберточка для тех, кто боится указателей и хочет объекты и планшеты.
>>772389 если это учебная задача то делаешь функцию, которая приводит букву в нижний регистр дальше бежишь по строке, как только нашел букву из тех двух (сравнивая не напрямую, а испльзуя ту функцию), значит нужно сравнить следующий символ - если он второй оставшийся, значит, опа, ты нашел комбинацию
>>772389 если это учебная задача то делаешь функцию, которая приводит букву в нижний регистр дальше бежишь по строке, как только нашел букву из тех двух (сравнивая не напрямую, а испльзуя ту функцию), значит нужно сравнить следующий символ - если он второй оставшийся, значит, опа, ты нашел комбинацию
> shasm is an assembler written in GNU Bash Version 2, which may work in other recent unix-style "shell" command interpreters. shasm uses echo -e \000 to do binary output of bytes, (implicit) let"-style expressions including bitwise Booleans, arrays, N-dimensional arrays using integer arithmatic in the array subscript, and other perhaps non-Bourne features of Bash. It's probably a trivial port to pdksh or zsh. shasm does NOT call externals such as sed, dd, expr and so on. All it needs is the shell, although it does need a cushy shell.
Плюсы и сишечка со своими жирными стандартными либами и костылями - все. Хоть и сделали musl, uclibc, uclibc++ на них почему-то перекатыватся не стали.
>>772918 Какой смысл этих бенчмарков, если на реальном софте Джава всегда самое тормозное, что только бывает. Написать быстрый факториал можно и на бейсике.
>>773004 DB2 Oracle никак не повредил, он работал и продолжает уметь работать только на низкобюджетном хламе. Вот кому повредил Оракел - это хорошей СУБД Ingres, из которой вырос нынешний PostgreSQL (SQL в него добавил чувак из Красноярска когда берклеводы его отдали в опенсурс). В Ingres был язык намного более прямой, назывался QUEL. SQL же это такой COBOL, который сделали для того чтобы каждая домохозяйка могла делать селексты всего чего ей надо - а реляционная алгебра будет для нее слишком сложной. В результате имеет то что имеем.
>>772885 дим, ты дурачек кагда нужна производительность, ни кто не юзает сишную стандартную библиотеку под такой проект запиливают что-нибудь по духу apr library
Дядя Гейб из Вентиля сказал: >Даже баба может научиться программировать, не нужно быть гением, чтобы понять, как программировать, однако не каждый блещет оригинальностью.
Пацаны есть вопрос Смотрите кароч Как мне определить, сколько раз в строке появляется слово\комбинация букв? стрстр ищет только первое вхождение ведь Есть тема, что надо стртоком поделить все на лексемы, а потом по них проходить стрстром но я хз как это делат
>>773655 А циклы тебе на что даны? Сначала strtok в цикле, пока NULL не вернет, потом так же strstr: for (const char ∗ptr = haystack; ((ptr = strstr(ptr, "needle")) != NULL; ++ptr, ++counter);
>>773738 Это значит, что твой код ничего не делает и в нем нет смысла. Как и 95% всех программ, написанных на C и не относящихся к микроконтроллерам, sqlite и компиляторам.
>>773823 >Bugs >Early versions of Linux libc (like 4.5.26) would not allow an empty needle argument for strstr(). Later versions (like 4.6.27) work correctly, and return haystack when needle is empty. лол
>>773833 Я считаю ну хуй его знает. Дебажить через это говно нереально, код тоже абы-какой высрет. Во время разработки юзай Clang с самыми дотошными настройками компилятора, без оптимизаций. Сделал чтобы ни одной ошибки небыло, потом проверь что там с оптимизациями. А готовый пакет собирай с GCC 6.1
>>773880 make clean перед каждой пересборкой делаю, не в этом дело, вот к функции доступ получить не может, блядь, сейчас наверно в интернете найду ее и добавлю непосредственно в код.
Си это же обёртка над ассемблером? Как написать свою ось? Вот написал я хеллоуворлд, скомпилировал в бинарник. Как сделать, чтобы при включении пеки она отображалась?
>>774269 >Как сделать, чтобы при включении пеки она отображалась все просто, тебе нужно поместить его в определенный сектор диска который считывается биосом при загрузке, потом просто скопируешь строку в видиопамять и все
Допустим, есть один мультиплеерный рогалик на 5 рыл. Каждому из клиентов нужно отсылать каждую сек пакеты с обновленными координатами соперников и все такое. Вот только я не пойму, по идее для каждого клиента нужно иметь свой поток? Или же как в данном случае поступают? Либо же просто выделить отправку пакетов и прием в тред, отстраненный от остального игрового цикла?
>>774401 Если тебе заведомо хватает производительности одного ядра, то лучше вообще с потоками не заморачиваться. Почти любую хуйню проще сделать в одном потоке. Но даже если писать с потоками, то по потоку на клиента это в любом случае хуита.
>>770283 (OP) Почему функции принимают аргументы типа в "void звездочка", только для того чтобы привести их потом к нужному типу? 88 строка, например. http://pastebin.com/79ZNZJpx
>>774888 Почему он требует колбэка с такой сигнатурой если первой же строчкой приводит его тип к указателю на одну конкретную структуру, без вариантов?
>>774981 event_new принимает функцию (колбэк), которая принимает указатель на void. Делает она так потому, что вместо do_accept в нее могла бы быть передана любая другая пользовательская функция с такой же сигнатурой (в этом суть колбэков). В данном случае do_accept принимает указатель на struct event_base, но другая функция могла бы принимать указатель на другой тип. Ну и вот чтобы позволить функции event_new принять и затем передать в колбэк указатель на произвольный тип (такой, какой нужен конкретному колбэку), на месте этого типа и используется указатель на void.
Алсо, лучше бы ты спросил, для чего каст вот в этой вот строчке: listener_event = event_new(base, listener, EV_READ|EV_PERSIST, do_accept, (void*)base); Потому что хз зачем он там.
>>775058 Многие писатели линтов и валграйндов, не говоря уж о коммерческих статических анализаторах кода, понимают свою задачу не в том чтобы послать нахер, потому что стандарту не противоречит, а в том чтобы указать на все места, где может быть программист допустил ошибку, потому что это место похоже на типичные ошибки, которые программисты допускают.
>>775119 Но, кстати, при этом преобразование указателя на функцию, скажем такого: int (∗f1)(struct xy ∗arg) к такому: int (∗f2)(void ∗arg) недопустимо вообще. Вопрос: разве это не бага в языке? Зачем так сделано? Раз уж разрешили неявное преобразование (void ∗) в другие указатели, то почему не разрешили преобразование таких указателей на функции?
>>775137 Отсутствие преобразования (хоть явного, хоть неявного) такого указателя int (∗f1)(struct xy ∗arg) к такому int (∗f2)(void ∗arg). Учитывая тот факт, что преобразование struct xy ∗arg к void ∗arg разрешено, и даже может производиться неявно.
>>775135 Этот язык вообще один большой баг. Один только алиасинг чего стоит. Ты еще спроси, почему функции f1 и f2 несовместимы, если у одной параметр - указатель на struct foo { int a; }, а у другой - указатель на struct bar { int a; }.
>>775144 >Ты еще спроси, почему функции f1 и f2 несовместимы, если у одной параметр - указатель на struct foo { int a; }, а у другой - указатель на struct bar { int a; }. Очевидно, потому что у структур разные теги.
>>775140 >int (∗f1)(struct xy ∗arg) к такому int (∗f2)(void ∗arg) Потому что функция хочет принимать именно указатель на struct xy, а не что-то другое.
>>775147 А вот и нихуя. Если определения структурок видны полностью на момент вызова - функции совместимы, можно объявлять указатель int (∗ptr)(struct bar ∗) и вызывать по нему обе функции. А вот если на момент вызова одну из структурок не видно, функции уже магически перестают быть совместимыми, скастить f1 к ptr можно, а вызывать уже нельзя.
>>775166 > в стандарте сказано Сказано. C11 6.2.7 же: > If both are completed anywhere within their respective translation units, > then the following additional requirements apply: there shall be a > one-to-one correspondence between their members such that > each pair of corresponding members are declared with compatible types > ...
>>775144 >Ты еще спроси, почему функции f1 и f2 несовместимы, если у одной параметр - указатель на struct foo { int a; }, а у другой - указатель на struct bar { int a; }. Ну, по крайней мере struct foo x = {99}; struct bar y; y = x; тоже выдаст ошибку. В случае же с указателем на void, указатели преобразовываются без проблем, но почему-то только если они не в составе указателей на функции.
>>775156 А когда я пишу struct xy ∗ptr = malloc(sizeof(struct xy) ∗ 10); ptr хочет принимать в себя только указатель на struct xy, а не что-то другое? Нет, тут для void сделано исключение. В случае же, если этот указатель на void является частью типа указателя на функцию, это исключение уже не работает. Особого практического смысла я в этом пока не вижу, а вот минусы есть: например, менее удобно реализовывать подобие интерфейсов из ООП. Так вот, почему бы это в очередном стандарте не исправить, разрешив преобразование указателей на функции, если типы всех их аргументов друг в друга преобразуются? Ведь даже с обратной совместимостью никаких проблем не будет.
>>775186 > тут для void сделано исключение. Для него не делали исключение. Указатель но void специально ввели, чтобы возвращать из malloc-а или принимать в memcpy.
>>775197 Ну, при принятии очередного стандарта, когда что-то (не) изменяют в языке, какой-то логикой наверно при этом руководствуются? Я надеюсь.
>>775198 Но почему бы тогда таким же образом не ввести правило, чтобы можно было без проблем присваивать указатели на функции, если списки аргументов у них отличаются только тем, что в одном случае аргумент указатель на void, а в другом – указатель на какой-то полный тип? Все равно ведь это ограничение легко обходится с помощью функции-обертки (и при этом по стандарту, не вызывая UB), так почему бы не избавить программистов от лишнего бойлерплейта?
>>775168 И вообще, зачем ты полез в раздел про определения типов в различных translation unit. В стандарте есть место, где совсем явно сказано, что если разные теги — то это разные типы.
>>775212 Я не знаю, где ты тут видишь троллинг или тупость. Вызов функции, принимающей (по факту) указатель на некий тип, через указатель на функцию, принимающую указатель на void является повсеместной практикой (те же коллбэки, ООП), без которой нормальное программирование на C было бы невозможным. Я задался вопросом, по какой именно причине связанные с этими практиками неудобства еще не пофикшены в стандарте? Эти причины пока никто толком не смог объяснить.
>>775810 Если у тебя в программе есть переменная, но по каким-то причинам ты временно её не используешь, компилятор будет выдавать warning'и, что типа у тебя лишняя переменная. Если кастануть такую неиспользуемую переменную в void, то компилятор заткнется. А во время компиляции оптимизатор может потом ее и выкинуть в общем-то.
>>775850 Не, в смысле используют новые фичи. Анонимные структуры там, многопоточность в стандартной поставке, более фичастный юникод. Хотя многим приложениям нафиг многопоточность не нужна. Да и в гуестроении своя атмосфера. В общем энивей MS в этом документе усложняет язык, делая этакий С++ Lite, а это нафиг не нужно.
>>775901 Одно, но не совсем, иначе это был бы не MS
> Новый набор изменений называется C++/CLI и полностью поддерживается Visual Studio 2005. Таким образом Managed C++ считается устаревшей спецификацией, и код, написанный таким образом, рекомендуется переписать.
>>775922 Я не слежу, что там в инфраструктуре C++ разработки под винду происходит. Вот в сишке все просто. Есть autotools, есть cmake, есть meson из систем сборки. Из gui gtk и efl. Ну и до кучи либ для тестирования, производительных серверов, различные бд, вот это вот все.
>>775838 > А уже есть люди, которые уже перекатились на С11? Да. У нас на работе новые проекты на C11, старые на C99, а на C89 только форкнутый опенсорс.
>>775856 > Анонимные структуры Как расширение GNU, все, кому надо было, использовали задолго до C11 > многопоточность в стандартной поставке По стандарту опциональна. И никто не поставляет, ни MS, ни GNU. Да и нахуй не нужны C11-треды при живых pthreads. > более фичастный юникод Хуичастый. Нормализация есть хоть в твоём "фичастом"?
>>775856 >>776223 Только не пойми неправильно. Я осознаю, что стандартизация часто это закрепление сложившейся практики. Это и было в случае с C11 (да и 99 тоже). Большая часть новых "фич" уже давно были реализованы в расширениях.
В этом радикальное отличие от выхода стандарта C++11.
>>776325 В общем случае ты не можешь сравнить два float, но ты можешь удостовериться, что они отличаются не более чем на некоторое число. Это число зависит от задачи. Вспоминай школу - округление, приближенные вычисления, погрешность - вот это все. И втыкай, ну хотя бы if (fabs(b - 3.141593) < 1.0f) printf("В военное время значение пи может достигать четырех\n");
Как конпелировать с Clang-LLVM на винде, не имея при том всего скама вроде цугвина, мингв, тдм-гцц, и.т.д, чтобы чистый Clang-LLvm с его либой под венду
>>777164 >>777159 очепятка, но с логическим И нужна проверка всех условий, а в случае с ИЛИ не всех. и да, на конпелятор не хочу надеятся, нужно что бы логика была наглядной
>>777167 Это ты тут недавно switch() оптимизировал?
> с логическим И нужна проверка всех условий Чушь собачья. Первое же встреченное ненулевое значение превратится в нулевое, и справа && уже ничего вычислять не будет.
Алсо, да, я был прав. Даже древний компилятор из Visual Studio 6.0 собирает из этих двух вариантов абсолютно идентичный (совпадает до последнего бита!) код.
Привет, ребят. Перевожу проект на vcc14, столкнулся с проблемой. Есть функция, которая считает количество использованной приложением памяти. Вот часть кода:
По итогу, оно входит в infinite loop на HeapWalk, и каждый раз записывает одно и то же значение в heapinfo. Может, кто знает, в чем может быть проблема?
>>777188 На реальном. Пытаюсь разобраться. Знаю, что скорее всего, повреждение будет из-за того, что указатель где-то приводится не к uintptr_t, а к int, но хз, где именно.
Вообще, легаси - говно. Хуй знает, как обнаружить повреждение.
>>777195 Нахуй кому-то делать ради тебя что-то? Ватком развивался мелкой командой и давно заброшен, GCC живёт и развивается гигантским коммунити, и там уже не первый год идёт рефакторинг – код не ухудшается день ото дня как ты предполагаешь.
>>777456 >Нахуй кому-то делать ради тебя что-то ты же должен признать, что обосрался. ватком заброшен верно, но и даже такое старье не проигрывает живущему и развивающемуся гигантским коммунити гцц, выволд - гцц делают уебаны
>>777510 В чем оно не проигрывает-то? Не поддерживает и 10-й части платформ GCC? Не имеет выборной поддержки любого стандарта, причём даже с расширениями? Сасай по оптимизации?
Блять, ну лол, он выигрывает только в твоём слабоумном мозгу.
>>770283 (OP) Ну-ка быстро объяснили мне! Правильно так #define YOBA 1 или так const int YOBA = 1; ? Я слышал, что типа во втором случае может быть выделена память и создана переменная, поэтому он сосет. Так ли это?
>>777814 В первом случае препроцессор на этапе компиляции подставит вместо йобы литерал, и его использование будет бесплатным (ничего нигде не надо выделять). Во втором случае, если не брать в расчёт оптимизации компилятора, то на стеке появится переменная i, равная 1.
>>777838 Кстати, там есть GCC и Make. Получается, что Microsoft вертит Штульмана на хую? Ведь по GPL нельзя использовать GPL софт в качестве компонента для несвободной системы.
>>777839 Однохуйственно. register лишь даёт рекомендацию компиляторам (которые, тащем-та, давно уже задрочились класть хуй на рекомендации и делать заебись автоматически) хранить переменную в одном из регистров. Напротив, если она не хранится в регистре, значит, она (или указатель на неё) хранится на стеке, а указатель на вершину стека -- в регистре.
>>777867 Просто неоднократно слышал, что #define это ТИП НИПРАВИЛЬНА и нужно через const. Почему - не объясняют. Я всегда константы объявлял дефайном, не вижу в этом ничего плохого.
кста, я вот пилю свой проджект и хочу его открыть, а в дальнейшем и монетизировать, но я не хочу что бы проприетарные пидоры его или часть кода бесплатно использовали в своих продуктах, как мне его залецензить, чтобы не пасасать?
>>777897 Кьют идет по LGPL, что значит - ты обязан обеспечить возможность ковырять/изменять/изучать кьют в проге. Проще всего это добивается динамической линковкой - кьют это dll/so шки, но в принципе - ты можешь сделать и статику, но тогда сам ебись с механизмом, которым ты сможешь обеспечить это требование.
>>777907 там помойму все открытые лицензии нихуя пропреитарщиков ничем не обязывают, для этого гитхаб и придумали, что бы залез, скопипастил половину, вставил в свой проект и продал, а авторам гитохуй
>>777938 Ты не понел. Ты не можешь написать прогу и не открыть ее код, если она использует GPL либу. (То есть конечно можешь, но это будет нзаконно). И насрать, на то что чужие исходники ты приложил - ты обязан выложить и свои, или не использовать. В этом вся суть GPL.
Не устраивает - покупай проприетарь, линкуй динамически с LGPL, или ищи BSD (в которой хоть дрочи вприсядку - никаких ограничений)
> Компания Red Hat объявила об изменении лицензии на DLL-библиотеку Cygwin, эмулирующую базовый Linux API в Windows и позволяющую с минимальными изменениями собирать созданные для Linux программы. Вместо лицензии GPLv3+ библиотека отныне распространяется под лицензией LGPLv3+, которая позволяет связывать код с приложениями под любыми лицензиями, в том числе с проприетарным ПО.
> Кроме того, Red Hat отказывается от поставки коммерческой лицензии на Cygwin, так как LGPL позволяет обойтись без лицензионных исключений, и больше не будет требовать от разработчиков, присылающих изменения в Cygwin, подписания соглашения о передаче имущественных прав на код. Соответственно процедура участия в разработке существенно упрощается и лишается бумажной волокиты, отпугивающей многих разработчиков.
> Одновременно доступен выпуск Cygwin 2.5.2, в котором отражено изменение лицензии и прекращена поддержка Windows XP и Windows Server 2003. Изменение лицензии произведено только для библиотеки, утилиты и другие компоненты пакета Cygwin (cygserver, cygpath, regtool и т.п.) остались под лицензией GPLv3+.
>>778440 У цугвина способ другой. Там перекомпиляция требуется специально под cygwin, а в десяточке сделали трансляцию системных вызовов, что позволяет просто брать бинарь с его окружением и запускать, не рассказывая, что ядро не его родное.
>>778470 Ну, например на прошлой неделе написал несложное ESME для использования в одном проекте на работе (работаю не программистом, но иногда что-то такое пилю), в свободное время потихоньку пишу свой игровой движок. Что писать мне без разницы, главное, чтобы у этого в итоге было хоть какое-нибудь применение.
>>777846 > Ведь по GPL нельзя использовать GPL софт в качестве компонента для несвободной системы. Ты не понял, что в GPL подразумевается под "компонентом системы". Программы, которые ты ставишь на винду — это не компоненты винды.
Тем более, что microsoft не распространяет софт. Он подтягивается из убунтовых репов.
>>778440 Лол. Красношляпые поняли, что их платная цацка теперь нафиг не нужна с появлением подсистемы Linux в Windows. И стали раздавать её бесплатно всем, а не только опенсорсу.
>>777960 Всё никак не могу догнать эту разницу между LGPL и GPL. Есть библиотека. Распространяется по LGPL. Можно мне её использовать в своём платном приложении с закрытым исходным кодом и если можно то как?
>>779009 Delphi один раз выучил, и за вечер клепаешь автоматизацию автосервиса, получаешь бабло. А к Си тебе придется еще учить C++, потом Qt, потом SQLite, потом месяц с этим всем пердолиться, а результат такой же.
>>770283 (OP) У меня есть значение цвета в виде INT. У меня есть значение сдвига цвета, тоже в виде INT. Т.е. загружая палитру, я выполняю такой кусок кода: for (i = 0; i < palette_size; i++) vram_palette = rom_palette + shift; Как сделать так, чтобы цвет с нулевым значением так и оставался нулевым, без сдвига? Обыкновенный IF мне кажется слишком медленным, как и такая хуита: sign = (color > 0) — (color < 0); color = color + shift * sign;
>>779083 Думаешь он будет DSP программировать и встроенные в кристалл мини-FPGA ловко вертеть на хую, устраивая в них dynamic offloading критических частей сложнейших алгоримтов? Хрен там, будет байтики между портами возить на тележке и закатывать солнце вручную.
Второй случай нужен, чтобы держать данные ридонли-секции.
Это может быть полезно, если ты хочешь разместить конфигурацию портов микроконтроллера в виде массива структур во флешь-памяти и конфигурировать их циклом, в котором обходится каждая структура.
Работать будет чуть медленнее (что практически не важно, ибо подобная операция выполняется не часто), но и места займет меньше.
Аналогично можно делать таблицы виртуальных методов, конечные автоматы и прочие ABI с размещением во флеш.
Анон, хочу изучать си, но споткнулся на первом же шаге из Кернигана и Ричи. Вот я написал код для вывода "хелло ворлд". Что мне теперь делать? Как запустить программу? В гугле пишут нажать "начать отладку", но у меня она серая.
Объясните, нахуя в каждом Win32 приложении должен быть цикл обработки сообщений? Его задача заключается в том, что функция GetMessage достает из системной очереди приложений очередной сообщение и передает его в DispatchMessage, где производится поиск оконной процедуры, которой предназначено сообщение, и этой процедуре отправляется данное сообщение.
Но нахуя это делать в каждом приложении? Пусть, например, эксплорер достает все приложения из системной очереди и передает их нужным оконным процедурам.
>>780313 >>780268 > проектов: 0 Хм, да. Что-то ты не то сделал. Закрой это нахуй и создай новый проект (Консольное приложение). В проекте добавь новый элемент, файл C++ и назови его main.c. Там уже набирай (или вставляй) код и компилируй.
>>780300 Этот цикл нужен для ожидания\обработки действий пользователя. GetMessage - точка блокировки (без блокировки цикл сожрет все процессорное не выполняя полезной работы). Не ну ты конечно можешь их не обрабатывать (например так всякие консольные утилитки делают), но тогда и твой процесс завершиться очень быстро. И это не только в винде, это во всех системах, где ожидают действий от юзера. Эксплорер виндовой это самое обычное приложение, а ты просто ленивая скотина.
>>780330 Но можно было просто одной функцией Run(); сделать (вместо 3-х, GetMessage, TranslateMessage и DispatchMessage), а сообщения обрабатывать в отдельных потоках.
>>780338 А основная нитка что тогда по твоему делать? В Qt в общем то одним вызовом и запускается все это (а внутри уже и крутится цикл обработки эвентов)
>>780338 > Но можно было просто одной функцией Run(); сделать Нельзя. Из тройки GetMessage/TranslateMessage/DispatchMessage обязателен только GetMessage - дождаться уведомления о выключении компа, например. Остальные нужны не всегда. Еще в цикле обработки событий могут быть IsDialogMessage и TranslateAccelerator, они тоже не всегда нужны. А в играх делают цикл без блокировок, что-то типа if (PeekMessage()) { ...dispatch... } else { render(); }. Поэтому одного Run даже с кучей флагов нифига не достаточно, чтобы покрыть все случаи использования.
>>780357 Прата из шапки. На крайний случай Кочан. Но лучше сначала K&R дочитай.
>>780361 Да ты просто гений программирования. Очень замечательный интерфейс получается. Ты правда думаешь, что если тебе не хочется делать цикл приема сообщений, то юзеры должны ждать секунду пока твой код сообразит обработать сообщения?
>>780387 Это классика. К тому же, второе издание знает о C89 третьего издания вообще не существует - хуй знает, что за говно у тебя >>780371 тут, а множество консерваторов до сих пор пишет именно на C89.
>>780388 Ну вообще-то хотя бы один из тредов программы, слинкованной с /SUBSYSTEM:GUI, обязан обрабатывать сообщения, или винда сочтет, что программа зависла.
>>780411 Нахуй иди. Ну напишет он cl /c main.c && link main.obj, и что, это такое адски необходимое на начальных этапах знание? Или про это так сложно прочитать, когда оно понадобится?
>>780451 > Для настоящего третьего русского издания перевод заново сверен с оригиналом, в него внесены некоторые поправки, учитывающие устоявшиеся за прошедшие годы изменения в терминологии, а так же учтены замечания В общем, они его придумали. По сути это второе издание перевода второго издания K&R.
>>780442 >Это паттерн существовавший ещё до си, просто широкую распространённость получил только после ноды с её асинхронностью на каждый пук. Проиграл с этого хипстера. Он был широко распространён ещё во времена Windows NT, где был коллбек на каждое событие в интерфейсе.
>>780502 А я-то думал, я здесь самый старый. Хватит. Если не залезать в дебри, язык простой. Месяц на изучение синтаксиса, год на изучение либ и тонкостей типа неопределенного поведения. Умножь на два, если ты уже не тот, что прежде.
>>780506 > не тот, что прежде Давно уже не тот. В 93 хуярил на Ростовской областной олимпиаде по информатике. Места занимал. А сейчас туплю над структурой по пол дня.
>>780509 Осиляторство языка - это еще не главное. Может оказаться, что тебе просто писать нечего, потому что все уже написано, а то, что не написано, неподъемно для одного человека. Тогда, наверно, только реверс и дрочение класических алгоритмов может сохранить интерес к кодингу.
>>780438 коллбек функции в си - это способ параметризировать поведение (а не данные) в разных языках и разных либах по разному решается это могут быть делегаты встроенные в язык в шарпике и явке, интерфейсы встроенные в язык, либо делегаты и интерфейсы реализованные на уровне либ, либо тупые коллбеки, либо тру лямбды (не синт сахар) и другая экзотерика в функциональщине
Что читать:
- Классика от Отцов: http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf
- Годное пособие для гуманитариев: http://c.learncodethehardway.org/book/
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/%7Eats/books/ooc.pdf
- Стандарт 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: оче годно, батя рекомендует. Дрочим на --analyze.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2015 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)
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/
Шапка: http://piratepad.net/bJ1SdmkZyu