Вы видите копию треда, сохраненную 14 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Что читать:
- Классика от Отцов: 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/~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: оче годно, батя рекомендует. Дрочим на --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
Линк видел? Нажать побоялся?
Тебе дали возможность узнать что-то о чем-то за пределами твоего ванямирка. Но нахуй тебе это надо же. Kids these days.
Несколько лет назад, когда 64-битные системы еще не все заполонили ставил себе Haiku. Чудесная ОС. Жаль что не взлетела. На моем 4 пентиуме выдавала чудеса производительности в области проигрывания видеофайлов. На ней можно было одновременно запустить дохуя HD видео на и они не глючили. В шиндовс и прыщах такое сделать было невозможно.
мимо-крокодил
>чудеса производительности
тото анон не о производительность, а об архитектуре ОС, в частности он абассал концепцию "все есть файл", но и в замен ничего не предложил.
Ни один линк не был кликнут, такова судьба линков в /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
>несвежим ваткомом и спрашивал про современные техники оптимизации
SSA-представление было разработано исследователями Ron Cytron, Jeanne Ferrante, Barry Rosen, Mark Wegman и Ken Zadeck в IBM в 80-х годах.
ох, кек
>>770624
>AS400 файлов вообще не было изначально
ну и скорее твой же вопрос, как у них там с правами доступа на объекты?
https://www.infoq.com/news/2016/06/visual-cpp-telemetry
Мегайоба оптипизирующий конпелятор, кек^3
Угадай, имплементировано ли оно в Watcom C.
В угадывании тебе сможет помочь выяснение момента появления этой техники в GCC.
AS400 - одна из самых продвинутых систем с точки зрения безопасности и разграничения прав доступа.
Специальная роль "security officer", например, там была заложена с самого начала.
Иии чо? Мой йобавирус будет залочен до релиза? Или эта хуитка спихдит кредитку, выебет кота и убьёт брата?
Раздули конечно из этого невесть что.
Алсо хотел бы спросить, так как пишу программки на VS2015, то хотел бы спросить, программы Си теперь полностью совместимы с С++ ? Ибо файл сохраняется не в .c а в .cpp...
dz хотя бы знает как было устроено в AS400 (в общих чертах), в отличие от тебя.
> вставляет код телеметрии
Во-первых, уже не вставляет (если линковаться с CRT статически - осталось, но отключается документированной магией no_telemetry.obj). Во-вторых, даже в активном состоянии оно бы всего лишь отчитывалось об именах длл и времени загрузки - обычное профилирование, ничего интересного.
>>770638
Нет, между Си и C++ в Си-стиле есть разница. Сходи в опции проекта, выключи прекомпилированные заголовки, убери stdafx.h из проекта, а файл .c отлично создается (и компилируется именно как C), если при сохранении вручную указать расширение .c, а не .cpp.
Прата охуенен для начинающих, никто не спорит.
> программы Си теперь полностью совместимы с С++
Нет, конечно. Разные языки, разные стандарты.
>В угадывании тебе сможет помочь выяснение момента появления этой техники в GCC.
ты приведи цифры, насколько твой модный, современеый гцц с полной оптимизацией дает пасасать старому ваткому с такой же степенью оптимизацией, а все эти модные технологии и фичи оставь хипстерам.
> "security officer"
в чем ее приемущество?
Блять точно, переименовать же надо было... Спасибо.
>ты приведи
Ты ничего не хочешь сделать самостоятелдьно, даже на линк не можешь кликнуть.
Как ты вообще дожил такой до своих скольки-там лет в дикой природе?
>> "security officer"
>в чем ее приемущество?
Я тебе дал все ключевые слова, по которым можно найти информацию.
В прошлом треде даже советовал конкретную книжку, могу повторитьт - "Inside AS/400" by Frank G. Soltis.
Тебе этого недостаточно?
>Ты ничего не хочешь сделать самостоятелдьно,
мне это не нужно, есть ты, который без ума от каких то там сферических технологий без конкретных доказательств, потрудись их превести на примерах гцц и ваткома
>Я тебе дал все ключевые слова, по которым можно найти информацию.
тоесть абасать Plan9 с ее срвером авторизации и файловым подходом, можно не вникая в детали?
>мне это не нужно
Тогда зачем вопросы задаешь? Пилите ваши сокеты, не отвлекайтесь.
>абасать Plan9 с ее срвером авторизации и файловым подходом, можно не вникая в детали
Я на конкретном примере конкретных технических решений Plan9 тебе показал что эти долбоебы ничего не поняли и ничему не научились, в какие детали мне еще надо вникать?
Думаем что можно только позавидовать железобетонной репутации Роба Пайка и Кена Томпсона. Если их даже после разработки Go продолжают считать неглупыми людьми, то теперь, вероятно, такое мнение о них сохранится в любом случае, чтоб они не сделали. Даже если повторят любое из достижений лауреатов премии Дарвина — останутся в нашей памяти как неглупые люди
Хорошая параша, пытался ей обмазаться. Богатая библиотека, много чего попытались упростить. Единственное, слайсы какие-то ебанутые. Но в итоге из-за простоты своей он меня и оттолкнул. Не могу я без байтоебства и понимания того, что происходит. Сейчас пытаюсь понять C++11/14, такая-то зарядка для мозгакоторого нет
>Я на конкретном примере конкретных технических решений Plan9 тебе показал
что ты там показал, пиздунишка? ты сразу обосрался и слил
http://pastebin.com/VSiGMPhm
Итог:
gcc -O3
sample.bin:50000003
c1: 50000003
sub1: 0.030000 seconds
c2: 50000003
sub2: 0.090000 seconds
wcl386 /onkhtx bittest.c
c1: 50000003
sub1: 0.156000 seconds
c2: 50000003
sub2: 0.109000 seconds
cl /O2 bittest.c
c1: 50000003
sub1: 0.310000 seconds
c2: 50000003
sub2: 0.068000 seconds
кек
ты против прерываний как системных вызовов или концепции "все есть файл", определись.
>между звездочка-Hui и амперсанд-Hui
Фикс.
чтобы не плодить сущности.
Указатели нужны, чтобы было легче выстрелить себе в ногу.
Где ещё у тебя будет возможность выйти за пределы массива? Или обратиться к несуществующей переменной?
А серьёзно, например, аргументы в функцию передают по значению, то есть копируются. А передавая указатель на переменную ты в функции можешь поменять её значение. Также структуры можно в функцию передать по указателю, что заметно экономнее.
>структуры можно в функцию передать по указателю, что заметно экономнее
Вот из-за таких как ты и придумали references, чтоб ты указатели в функции не передавал и не мутировал их там.
Что за блджад поколение выросло, до википедии не могут дойти https://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays
Указатели не понимал только жид Спольский и его друганы. Любой славяно-ариец знает, что это всего лишь целое число, адрес в памяти некоей переменной, содержащей нужные ему данные.
Этот дурень наверно спутал тред с плюсовым и говорит о константных ссылках.
>>770962
>Также структуры можно в функцию передать по указателю, что заметно экономнее.
Не учи новичков хуйне. Выигрыш в перформансе будет только при передаче реально больших структур (а небольшие наоборот выгоднее передавать по значению), ты не в 85-м.
Поясни, почему передать указатель не экономнее по памяти, чем пихать всю структуру в стек?
Да и по скорости.
По памяти - нет, выигрыша не будет нигде, когда есть ограничение - приходится держать в одном экземпляре.
По скорости - на небольших объектах будет выигрыш за счёт меньшго кол-ва индерекций данных, лучшей лакальности данных, различных оптимизаций компилятора (при передаче по ссылке их, как таковых, не может быть).
Все так, но когда захочется изменять что-то в передаваемой по значению структуре, придется править все вызовы функции, а вот подход "всегда передавать указатель, а потом делать локальную копию структуры при необходимости" этим недостатком не страдает. А по значению имеет смысл передавать те структуры, содержимое которых ты мог бы передать в качестве отдельных аргументов (вроде vector3 pos вместо float x, float y, float z).
> зачем они нужны
Чтобы решать проблемы.
https://en.wikipedia.org/wiki/Fundamental_theorem_of_software_engineering
>>771754
Ты забыл приложить няшку.
Поэтому фотка будет анти-Си кодерши.
http://www.codersatwork.com/fran-allen.html
https://en.wikipedia.org/wiki/Frances_E._Allen
> -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.
>>771754
Ты забыл приложить няшку.
Поэтому фотка будет анти-Си кодерши.
http://www.codersatwork.com/fran-allen.html
https://en.wikipedia.org/wiki/Frances_E._Allen
> -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.
Я не понимаю, когда я читал историю C, было очевидно, что он стал популярным совершенно естественным путём, никто его насильно не форсил. Если так вышло, что этот язык оказался более удобен, может, есть смысл задуматься всем тем, кто ратовал за эти свои amazing languages, которые не стали так известны.
Тебе лучше знать.
> To quote her A.M. Turing Award citation:
> 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
Какого в пень юникс-вея, похеру всем был вей.
Юниск стал популярен потому что малолетние долбоебы, которые сейчас играют в NodeJS, тогда до серьезных компьютеров не допускались. Все во что они могли играться это в тормозные недокофеварки типа PDP, куда они радостно и ставили Unix, потому что нормальная ОС на этом недожелезе во-первых, тормозила, во-вторых с ней надо было разбираться. С Юниксой разбираться было нечего, потому что в этой недосистеме и сейчас-то нихрена нет, а тогда не было совсем ничего.
WinRT уже, посмотри на календарь.
На Си его тоже можно программировать, тот же COM, только в профиль.
теперь у IBM просто куча оптимизирующих конпеляторов, тетя типичный йоба-рисечер-кукаретик.
Компилятор Фортрана до сих пор охуенен.
Компилятор APL тоже.
На сишечке ты для мейнфрейма много не напрограммируешь.
С языками программирования у IBM всегда было неплохо. Например, PowerShell списывали с https://en.wikipedia.org/wiki/IBM_i_Control_Language
>типичный йоба-рисечер-кукаретик
IBM сейчас ведущая компьютерная корпорация. Ничем не уступает гуглу по финансовым показателям. А по разработкам дает ему пососать на 10 лет вперед.
>Ничем не уступает гуглу
Сорта пузерей. Прыщавый задрот из какого то там гаражного микрософта не напрягаясь дал пасасать всему IBM.
> Фортрана
> лютейшее говно мамонта
Школьник плиз. Фортран ЛУЧШИЙ язык программирования на данный момент. Но поработать с ним дают только тем, кто имеет phd.
Продолжай писать ножиком в перфокарты.
гладиолус же
Фортран - язык программирования, конечно, отвратительный. Но речь была не о нем, а о качестве его трансляторов. До которого всем - как до Луны.
>сервера от IBM синоним лютейшего пиздеца
Сберу не забудь рассказать, у них процессинг на них крутится.
Правда, на нормальные машины денег не хватило, наскребли только на 795. Но справляются и они.
Маневрирование?
Началось вот с чего
> теперь у IBM просто куча оптимизирующих конпеляторов
В ответ пришлось напомнить о качестве IBM-овских трансляторов, которыми и занималась анти-С программистка Allen.
полугосконторам в приказном порядке навязывают ИБМ, инфа 150%
>Но речь была не о нем, а о качестве его трансляторов. До которого всем - как до Луны.
он сосет с проглотом когда транслирует или что?
>>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.
>>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.
Фортран конпелируется в быстрый код только за счет того, что язык очень бедный, оптимизации простые, компилятору много думать не надо.
Именно по этой, вероятно, причине гнутый фортран сливает фортрану от IBM в разы. И умеет компилировать в архитектуры отличные от говнопекашечек.
powershell именно как шелл уделывает баш
проблема в том что под винду никогда не было годных эмуляторов терминала
но ведь шелл и эмуль - разные вещи
> сервера от IBM синоним лютейшего пиздеца
блядь, ты ебанутый, не пиши в том что не разбираешься
на них была и есть охуенная аппаратная виртуализация
просто несколько лет назад костылями прикрутили аппаратную виртуализацию и в x86, после этого стало выгодно везде пользовать x86 машины
Lotus Domino на момент своего появления была невъебенно прорывной системой. Это был интранетный интернет когда в мире еще не было того интернета как мы его сейчас знаем.
Про LPAR же ты знаешь ровным счетом ничего, как видно из твоего аргументированнейшего ответа.
>на момент своего появления была невъебенно прорывной системой
1989? но нахуя это убожество в 2000?
>LPAR
нет не знаю, но я знаю, что админы в госконторах настолько днище, что они просто накатят виндовз на сервер и сверху поставят скюл и им поебать на все эти LRAP
Ты до сих пор продолжаешь под словом "сервер IBM" понимать "ПеКа-сервер", несмотря на то что уже много лет назад IBM весь бизнес по производству этих "ПеКа-серверов" для голодранцев продала Lenovo?
>>772148
Если клиентам нравится и они платят деньги, зачем же им отказывать? Это тебе не нодэжээсочка, где время жизни фреймворка измеряется в секундах, и пердолься с ним дальше как хочешь, если тебя по неопытности удосужило на нем что-то построить
Это Пека-"серверы", которые давно проданы китайцам, причем здесь они? В этом треде о ПеКа-"серверах" никто не упоминал кроме тебя. Информацию о 795, которые упоминались, и других серверах IBM ты можешь нагуглить самостоятельно (я в этом уже немного сомневаюсь, судя по тому что ты не смог этого сделать до сих пор, но вряд ли чем-то смогу тебе помочь если так). Могу уверить тебя в одном - Windows на них поставить невозможно.
void WriteFormatted(const char *format, ...){
}
Собственно, как правильно эти три точки называются, а то я даже загуглить не могу.
>Могу уверить тебя в одном - Windows на них поставить невозможно.
значит им не место в госконторах
спасибо
В провинциальных отделениях - может быть. Хотя когда-то стояли и в отделениях одной госконторы Alpha-серверы от Digital, и крутился на них MUMPS.
А в головном офисе - отчего же, и мейнфреймы бывают.
>нодэжээсочка, где время жизни фреймворка измеряется в секундах
Ай не пизди. Ни один крупный фреймворк на ноджс не умер.
Знаю, как работает си, знаю всякие операторы, функции, структуры и другую поеботу, но не могу решать задачки за первый курс универа
Просто смотрю на задание, и не могу представить себе алгоритм решения. Пиздец, блядь, я вылечу нахуй из шараги если не сдам
Например, есть задачка такая
Проверить, есть ли в строке комбинации из двух букв. Учитывая, что эти буквы могут быть разных регистров.
Вот, когда я это читаю у меня в голове вообще нихуя не появляется, сука.
ну, записать строк, а потом что, сука? Просто нету идей
----------------------------------------------------------------------
strstr --
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.
----------------------------------------------------------------------
https://www.google.ru/search?q=strstr.c+source+code
Если на реализацию тебе насрать, то ПРОСТО подключаешь и используешь.
> на них была и есть охуенная аппаратная виртуализация
Для это есть SPARC: https://en.wikipedia.org/wiki/Oracle_VM_Server_for_SPARC
вот именно поэтому лучше не надо начинать с сишки. Писал бы на лиспе/питоне, не было бы таких глупых вопросов.
>не надо начинать с сишки
Нет надо! Один раз выучил си и спокоен всю оставшуюся жизнь. А выучишь лисп, так все равно потом поинтеры учить.
> посмотри на календарь
Внутри WinRT классический Windows API, поменялись только имена DLL. Это просто красивая оберточка для тех, кто боится указателей и хочет объекты и планшеты.
Точки называются ellipsis, а функция называется variadic function.
если это учебная задача то
делаешь функцию, которая приводит букву в нижний регистр
дальше бежишь по строке, как только нашел букву из тех двух (сравнивая не напрямую, а испльзуя ту функцию), значит нужно сравнить следующий символ - если он второй оставшийся, значит, опа, ты нашел комбинацию
если это учебная задача то
делаешь функцию, которая приводит букву в нижний регистр
дальше бежишь по строке, как только нашел букву из тех двух (сравнивая не напрямую, а испльзуя ту функцию), значит нужно сравнить следующий символ - если он второй оставшийся, значит, опа, ты нашел комбинацию
бля, я щас за неделю выучу
> x86 assembler in Bash
> 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.
> http://lists.gnu.org/archive/html/bug-bash/2001-02/msg00054.html
Теперь SBCL
https://lbolla.wordpress.com/2010/12/05/sbcl-quicker-than-c/
Что там? Факториал на лиспе считается быстрее?
https://benchmarksgame.alioth.debian.org/u64q/lisp.html
Какой смысл этих бенчмарков, если на реальном софте Джава всегда самое тормозное, что только бывает. Написать быстрый факториал можно и на бейсике.
Зато на лиспе почему-то никто не сумел, что как бы намекает (лол).
>ситред
>изучение скорости факториала
DB2 Oracle никак не повредил, он работал и продолжает уметь работать только на низкобюджетном хламе.
Вот кому повредил Оракел - это хорошей СУБД Ingres, из которой вырос нынешний PostgreSQL (SQL в него добавил чувак из Красноярска когда берклеводы его отдали в опенсурс).
В Ingres был язык намного более прямой, назывался QUEL.
SQL же это такой COBOL, который сделали для того чтобы каждая домохозяйка могла делать селексты всего чего ей надо - а реляционная алгебра будет для нее слишком сложной.
В результате имеет то что имеем.
дим, ты дурачек
кагда нужна производительность, ни кто не юзает сишную стандартную библиотеку
под такой проект запиливают что-нибудь по духу apr library
Полезный модуль для nginx
c++
точно тряпл )
>Даже баба может научиться программировать, не нужно быть гением, чтобы понять, как программировать, однако не каждый блещет оригинальностью.
Смотрите кароч
Как мне определить, сколько раз в строке появляется слово\комбинация букв? стрстр ищет только первое вхождение ведь
Есть тема, что надо стртоком поделить все на лексемы, а потом по них проходить стрстром но я хз как это делат
А циклы тебе на что даны? Сначала strtok в цикле, пока NULL не вернет, потом так же strstr:
for (const char ∗ptr = haystack; ((ptr = strstr(ptr, "needle")) != NULL; ++ptr, ++counter);
> int counter = 0;
> String string = "12343151341231231235134123";
> Matcher matcher = Pattern.compile("123").matcher(string);
> while (matcher.find()) {
> counter++;
> }
Мимо катился джавасударь
Засунь размер этого вебм в средний объем доступной памяти при написании C программ.
влезет
>>773692
Знаешь сколько строчек кода ты напишешь, пока у меня загрузится IDE и я объявлю две переменные с указанием их типов?
Это значит, что твой код ничего не делает и в нем нет смысла. Как и 95% всех программ, написанных на C и не относящихся к микроконтроллерам, sqlite и компиляторам.
Сидаун проебал запятую, а она теперь не влазит в переменную. Каков конфуз!
Почему?
Блядь, иди в жопу
>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.
лол
Нет.
https://github.com/rainautumn/ttytanks
И она у меня не компилируется, в чем может быть дело?
Вот мейкфайл:
CC = gcc -std=c99
OBJS = main.o utils.o kernel.o
CFLAGS = -march=native -O2 -pipe
LDFLAGS =
LIBS = -lpthread -lncurses
TARGET = ttytanks
$(TARGET): $(OBJS)
gcc $(OBJS) $(CFLAGS) $(LDFLAGS) $(LIBS) -o $(TARGET)
all: $(TARGET)
clean:
rm $(OBJS)
Ну а на пикрилейтеде ошибки.
Я считаю ну хуй его знает.
Дебажить через это говно нереально, код тоже абы-какой высрет.
Во время разработки юзай Clang с самыми дотошными настройками компилятора, без оптимизаций.
Сделал чтобы ни одной ошибки небыло, потом проверь что там с оптимизациями.
А готовый пакет собирай с GCC 6.1
gcc main.o utils.o kernel.o -lpthread -lncurses -std=c11 -O2 -march=native -pipe -o ttytanks
/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: main.o: undefined reference to symbol 'halfdelay'
/lib64/libtinfo.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: * [Makefile:9: ttytanks] Error 1
Теперь срет этим онли.
gcc -std=c11 -O2 -march=native -pipe -c -o kernel.o kernel.c
gcc main.o utils.o kernel.o -std=c11 -O2 -march=native -pipe -lpthread -lncurses -o ttytanks
/usr/lib/gcc/x86_64-pc-linux-gnu/5.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: main.o: undefined reference to symbol 'halfdelay'
Перенес, не помогло, курсес вроде со стандатными флагами собрана, не пони маю в чем дело.
По-моему в ней то и дело, только не понятно в какой модуль библиотеки вкючена функция halfdelay
Я скинул выше мейкфайл, которым я смог собрать.
Дело не только в мейк-файле, да и сним все норм было, ощибку одну и ту-же сыпит.
не может достучатся до функции halfdelay
Я так не могу мне наиболиее удобочитаемым кажется вариант
function (args,arg2)
{
govnocode;
govnocode++;
govno= ++govno + ++mocha;
}
GNU - style
make clean перед каждой пересборкой делаю, не в этом дело, вот к функции доступ получить не может, блядь, сейчас наверно в интернете найду ее и добавлю непосредственно в код.
Ничего добавлять не надо, это из ncurses функция.
У тебя какие-то пакеты не доставлены, возможно. ncurses-dev там, всё такое.
И чего еще может не хватать?
Я конечно еще тот неосилятор, но с этим пакетом вроде все в норме.
OBJS = main.o utils.o kernel.o
CFLAGS = -std=c11 -O2 -march=native -pipe
LIBS = -lpthread -lncurses -lm -ltinfo
TARGET = ttytanks
$(TARGET): $(OBJS)
$(CC) $(OBJS) -o $(TARGET) $(LIBS)
all: $(TARGET)
clean:
rm $(OBJS) $(TARGET)
Поебался с ним, а он все верещит. Пусть верещит, хоть выхлоп понятный будет.
CC = gcc
OBJS = main.o utils.o kernel.o
CFLAGS = -std=c11 -O2 -march=native -pipe
LDLIBS = -lpthread -lncurses -lm -ltinfo
TARGET = ttytanks
$(TARGET): $(OBJS)
$(CC) $(OBJS) $(CFLAGS) $(LDLIBS) -o $(TARGET)
all: $(TARGET)
clean:
rm $(TARGET) $(OBJS}
Вы ошиблись тредом.
тебе предстоит долгий путь...
>Как сделать, чтобы при включении пеки она отображалась
все просто, тебе нужно поместить его в определенный сектор диска который считывается биосом при загрузке, потом просто скопируешь строку в видиопамять и все
Каждому из клиентов нужно отсылать каждую сек пакеты с обновленными координатами соперников и все такое.
Вот только я не пойму, по идее для каждого клиента нужно иметь свой поток? Или же как в данном случае поступают?
Либо же просто выделить отправку пакетов и прием в тред, отстраненный от остального игрового цикла?
Если тебе заведомо хватает производительности одного ядра, то лучше вообще с потоками не заморачиваться. Почти любую хуйню проще сделать в одном потоке. Но даже если писать с потоками, то по потоку на клиента это в любом случае хуита.
Понятно. Пожалуй, просто сделаю один поток на всех, чтобы получение/отправка не шароебилось среди остального говна.
жрет много, ну и если другие сделали ход, а с тисипи еще в процессе подтверждения? это типа риалтайм же?
ну бля, тисипи тебе не гарантирует время доставки, нужно время принятия решения, вообщем подумай над этим
на тисипи и юдипи, глупыш
зочем?
Что файлов нет, когда их нет)
нужно быть педагогом, короче начни с Праты
да
Чего ж glibc manuals не почитать, в мануалах много полезного пишут. Дреппер про память годно рассказывал http://lwn.net/Articles/250967/
Что человек он нелегкий - то кто из нас сахар
Пратту прочитал? Линдена прочитал?
Стёб в смысле отсылать учиться по этим двум источникам.
А когда ты уже не нуб, то и learnthehardway почитать невредно.
Когда ты уже не нуб, тебя от Зеда уже давно тошнит еще с его рельсоизрыганий.
Раньше учились по манам, когда энторнетов не было, получалось лучше чем сейчас.
Почему функции принимают аргументы типа в "void звездочка", только для того чтобы привести их потом к нужному типу? 88 строка, например.
http://pastebin.com/79ZNZJpx
> Почему функции принимают аргументы типа в "void звездочка"
Потому что event_new() требует колбэка с такой сигнатурой.
Почему он требует колбэка с такой сигнатурой если первой же строчкой приводит его тип к указателю на одну конкретную структуру, без вариантов?
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);
Потому что хз зачем он там.
Интересно, у меня ни gcc -Wall -pedantic ни clang -Weverything -pedantic в таких случаях не ругаются.
vim
Многие писатели линтов и валграйндов, не говоря уж о коммерческих статических анализаторах кода, понимают свою задачу не в том чтобы послать нахер, потому что стандарту не противоречит, а в том чтобы указать на все места, где может быть программист допустил ошибку, потому что это место похоже на типичные ошибки, которые программисты допускают.
Все это так, но в чем же типичная ошибка при передаче типизированного указателя вместо указателя на void?
Напиши смс-центр.
Купи ардуину и дрочи в присядку.
В C преобразование любого указателя к указателю на void и обратно допустимо без всяких кастов.
Но, кстати, при этом преобразование указателя на функцию, скажем такого:
int (∗f1)(struct xy ∗arg)
к такому:
int (∗f2)(void ∗arg)
недопустимо вообще.
Вопрос: разве это не бага в языке? Зачем так сделано? Раз уж разрешили неявное преобразование (void ∗) в другие указатели, то почему не разрешили преобразование таких указателей на функции?
Тогда поясни пожалуйста, для чего так сделано? В чем практический смысл? А то уже давно меня мучает этот вопрос.
Что сделано? Неявное преобразование? Чтобы malloc-ом пользоваться и прочими memcpy
Отсутствие преобразования (хоть явного, хоть неявного) такого указателя int (∗f1)(struct xy ∗arg) к такому int (∗f2)(void ∗arg). Учитывая тот факт, что преобразование struct xy ∗arg к void ∗arg разрешено, и даже может производиться неявно.
Этот язык вообще один большой баг. Один только алиасинг чего стоит. Ты еще спроси, почему функции f1 и f2 несовместимы, если у одной параметр - указатель на struct foo { int a; }, а у другой - указатель на struct bar { int a; }.
>Ты еще спроси, почему функции f1 и f2 несовместимы, если у одной параметр - указатель на struct foo { int a; }, а у другой - указатель на struct bar { int a; }.
Очевидно, потому что у структур разные теги.
>int (∗f1)(struct xy ∗arg) к такому int (∗f2)(void ∗arg)
Потому что функция хочет принимать именно указатель на struct xy, а не что-то другое.
Ты отрицаешь очевидное. Например,
>>775147
А вот и нихуя. Если определения структурок видны полностью на момент вызова - функции совместимы, можно объявлять указатель int (∗ptr)(struct bar ∗) и вызывать по нему обе функции. А вот если на момент вызова одну из структурок не видно, функции уже магически перестают быть совместимыми, скастить f1 к ptr можно, а вызывать уже нельзя.
В стандарте сказано, что не могут. Я больше верю стандарту, чем анонимному хуйлу с бредом реформаторства.
> в стандарте сказано
Сказано. 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
> ...
Угу. А перед этим предложение
> If one is declared with a tag, the other shall be declared with the same tag
>Ты еще спроси, почему функции 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 является частью типа указателя на функцию, это исключение уже не работает. Особого практического смысла я в этом пока не вижу, а вот минусы есть: например, менее удобно реализовывать подобие интерфейсов из ООП. Так вот, почему бы это в очередном стандарте не исправить, разрешив преобразование указателей на функции, если типы всех их аргументов друг в друга преобразуются? Ведь даже с обратной совместимостью никаких проблем не будет.
> тут для void сделано исключение.
Для него не делали исключение. Указатель но void специально ввели, чтобы возвращать из malloc-а или принимать в memcpy.
Ну, при принятии очередного стандарта, когда что-то (не) изменяют в языке, какой-то логикой наверно при этом руководствуются? Я надеюсь.
>>775198
Но почему бы тогда таким же образом не ввести правило, чтобы можно было без проблем присваивать указатели на функции, если списки аргументов у них отличаются только тем, что в одном случае аргумент указатель на void, а в другом – указатель на какой-то полный тип? Все равно ведь это ограничение легко обходится с помощью функции-обертки (и при этом по стандарту, не вызывая UB), так почему бы не избавить программистов от лишнего бойлерплейта?
И вообще, зачем ты полез в раздел про определения типов в различных translation unit. В стандарте есть место, где совсем явно сказано, что если разные теги — то это разные типы.
Я не знаю, где ты тут видишь троллинг или тупость. Вызов функции, принимающей (по факту) указатель на некий тип, через указатель на функцию, принимающую указатель на void является повсеместной практикой (те же коллбэки, ООП), без которой нормальное программирование на C было бы невозможным. Я задался вопросом, по какой именно причине связанные с этими практиками неудобства еще не пофикшены в стандарте? Эти причины пока никто толком не смог объяснить.
http://www.open-std.org/jtc1/sc22/wg14/
Ну накатай им свои претензии. Будто цель твоих постов не троллинг
Ладно, ты меня раскусил.
Смотрите, что нашел только что:
http://loci-lang.org/LanguageGoals.html
Кто-нибудь что-нибудь знает про эту хуйню?
приведение переменной к void
uint32_t temp =0;
(void)(temp);
освободит ее место?
Если у тебя в программе есть переменная, но по каким-то причинам ты временно её не используешь, компилятор будет выдавать warning'и, что типа у тебя лишняя переменная. Если кастануть такую неиспользуемую переменную в void, то компилятор заткнется. А во время компиляции оптимизатор может потом ее и выкинуть в общем-то.
А уже есть люди, которые уже перекатились на С11?
Мне казалось, что как ни крути рулетку, дрочка на С89 никуда не денется.
Что значит "перекатились"?
"Программистов на одном языке" было мало, теперь еще и "программисты на одной версии одного языка" появились?
Не, в смысле используют новые фичи. Анонимные структуры там, многопоточность в стандартной поставке, более фичастный юникод. Хотя многим приложениям нафиг многопоточность не нужна. Да и в гуестроении своя атмосфера.
В общем энивей MS в этом документе усложняет язык, делая этакий С++ Lite, а это нафиг не нужно.
По сравнению с тем сколько MS всего с С++ сделала, сишникам еще повезло.
С++ Managed, C++ CLI, что там еще было?
Одно, но не совсем, иначе это был бы не MS
> Новый набор изменений называется C++/CLI и полностью поддерживается Visual Studio 2005. Таким образом Managed C++ считается устаревшей спецификацией, и код, написанный таким образом, рекомендуется переписать.
То что я сразу не вспомнил называется C++ CX
Все равно, что новомодный CX, что CLI, почти не используются, для C/С++ сейчас все используют Qt
Я не слежу, что там в инфраструктуре C++ разработки под винду происходит.
Вот в сишке все просто. Есть autotools, есть cmake, есть meson из систем сборки. Из gui gtk и efl. Ну и до кучи либ для тестирования, производительных серверов, различные бд, вот это вот все.
> А уже есть люди, которые уже перекатились на С11?
Да. У нас на работе новые проекты на C11, старые на C99, а на C89 только форкнутый опенсорс.
> Анонимные структуры
Как расширение GNU, все, кому надо было, использовали задолго до C11
> многопоточность в стандартной поставке
По стандарту опциональна. И никто не поставляет, ни MS, ни GNU. Да и нахуй не нужны C11-треды при живых pthreads.
> более фичастный юникод
Хуичастый. Нормализация есть хоть в твоём "фичастом"?
http://ideone.com/sNY8Da
Сказать-то что хотел?
> Что вписать
https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
Там много читать. Лучше скажи как узнать правильное значение а при котором иф будет работать.
Вижу. Сажи как исправить
В общем случае ты не можешь сравнить два float, но ты можешь удостовериться, что они отличаются не более чем на некоторое число. Это число зависит от задачи. Вспоминай школу - округление, приближенные вычисления, погрешность - вот это все. И втыкай, ну хотя бы if (fabs(b - 3.141593) < 1.0f) printf("В военное время значение пи может достигать четырех\n");
сейчас есть расширение с++ для более удобной работы с winrt и uwp
Так это ж не мои прожекты.
Да
while (1) {
if (a||b||c) break;
}
получаю
while (!(a||b||c)) {
}
так вот, в первом случае, если а истино, то условие остальной части не проверяется, а вот во вторм случае, чета не пойму...
Вполне оптимально (только &&, а не &, чтобы лениво было). Скорее всего, даже скомпилится в тот же самый код, как и с if (...) break.
>>777159
очепятка, но с логическим И нужна проверка всех условий, а в случае с ИЛИ не всех. и да, на конпелятор не хочу надеятся, нужно что бы логика была наглядной
Это ты тут недавно switch() оптимизировал?
> с логическим И нужна проверка всех условий
Чушь собачья. Первое же встреченное ненулевое значение превратится в нулевое, и справа && уже ничего вычислять не будет.
Алсо, да, я был прав. Даже древний компилятор из Visual Studio 6.0 собирает из этих двух вариантов абсолютно идентичный (совпадает до последнего бита!) код.
Перевожу проект на vcc14, столкнулся с проблемой. Есть функция, которая считает количество использованной приложением памяти. Вот часть кода:
http://pastebin.com/qHBEcKQZ
По итогу, оно входит в infinite loop на HeapWalk, и каждый раз записывает одно и то же значение в heapinfo. Может, кто знает, в чем может быть проблема?
>древний компилятор из Visual Studio 6.0
Он уже был очень хороший.
Вот Microsoft QuickC 2.x тебе бы наоптимизировал.
Максимум была бы разница в JZ/JNZ.
>>777176
На реальном проекте тестируешь? Повреждение кучи уже исключил?
не трать, можешь даже сходить нахуй.
На реальном.
Пытаюсь разобраться. Знаю, что скорее всего, повреждение будет из-за того, что указатель где-то приводится не к uintptr_t, а к int, но хз, где именно.
Вообще, легаси - говно. Хуй знает, как обнаружить повреждение.
Собрать гцц c -fsanitize=address нереально? Тогда остается gflags. Какие галки ставить, сам разберешься.
Нахуй кому-то делать ради тебя что-то? Ватком развивался мелкой командой и давно заброшен, GCC живёт и развивается гигантским коммунити, и там уже не первый год идёт рефакторинг – код не ухудшается день ото дня как ты предполагаешь.
>Нахуй кому-то делать ради тебя что-то
ты же должен признать, что обосрался. ватком заброшен верно, но и даже такое старье не проигрывает живущему и развивающемуся гигантским коммунити гцц, выволд - гцц делают уебаны
инвалид поинтер инициалазер
>GPIO_TypeDef *port;
Звездочка ни на что тебе не намекает?
> #define DISP_D4_PORT GPIOC
Теперь тоже самое для GPIOC
В чем оно не проигрывает-то? Не поддерживает и 10-й части платформ GCC? Не имеет выборной поддержки любого стандарта, причём даже с расширениями? Сасай по оптимизации?
Блять, ну лол, он выигрывает только в твоём слабоумном мозгу.
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOC_BASE (uint16_t)0x500A
>>777542
STVD+Cosmic
Если бы я еще был бы программистом, то сам бы разобрался, а так как я криворукий уебан - приходится вот вас мучить.
Давай лучше ты. Я вот не верю что твоё засохшее говно выиграет топовый компилятор в таком сражении.
я уже выкладывал, ходя там есть интересные недочеты
>>pthreads
>Которые в Линупсе через Дреппера сделаны.
Как будто C11-threads не поверх pthreads будут сделаны.
Ага, она родимая. Разобрался, файл с дефайнами забыл включить. Спасибо всем ответившим.
Ну-ка быстро объяснили мне! Правильно так
#define YOBA 1
или так
const int YOBA = 1;
?
Я слышал, что типа во втором случае может быть выделена память и создана переменная, поэтому он сосет. Так ли это?
А тут какие-то петуханы говорили, что #define для констант использовать нельзя. Почему?
В первом случае препроцессор на этапе компиляции подставит вместо йобы литерал, и его использование будет бесплатным (ничего нигде не надо выделять). Во втором случае, если не брать в расчёт оптимизации компилятора, то на стеке появится переменная i, равная 1.
В десятке называется "подсистема Linux" и включается так:
https://habrahabr.ru/company/eset/blog/281418/
Компиляторы очень вольно обращаются с модификатором register.
Кстати, там есть GCC и Make. Получается, что Microsoft вертит Штульмана на хую? Ведь по GPL нельзя использовать GPL софт в качестве компонента для несвободной системы.
Он там есть. Еще make, vi, возможно еще какие-то утилиты из Линукса.
Однохуйственно. register лишь даёт рекомендацию компиляторам (которые, тащем-та, давно уже задрочились класть хуй на рекомендации и делать заебись автоматически) хранить переменную в одном из регистров. Напротив, если она не хранится в регистре, значит, она (или указатель на неё) хранится на стеке, а указатель на вершину стека -- в регистре.
"ШВАБОДКА!" раздался пронзительный голос со стороны FSF...
но как... ращве гпл питухи не отстаивают свою права в суде? развели бы мелкопидоров на кучу лямов
Никто им не мешает выложить исходники линуховой подсистемы, что они и сделают. Она не слинкована статично с вендой, так что все ок.
Просто неоднократно слышал, что #define это ТИП НИПРАВИЛЬНА и нужно через const. Почему - не объясняют. Я всегда константы объявлял дефайном, не вижу в этом ничего плохого.
тебе уже объяснили преимущество дефайнов, всегда есть адеты и хейтеры
Двойная лицензия, как раньшу у Qt: GPL/коммерческая. Проприетарщикам придется отстегивать бабло либо открывать свой собственный код.
>Вот и непонятно, куда они смотрят
может мелкософт занесла котлету главарям гпл, а макакам как всегда
но кьют вроде же статическую линковку не позволяет в комерческих проектах. и да, есть ли шаблон лицензии? я один хуй ее с нуля не напишу
Разве дедушка Штульман может продаться проприетарщикам? Он же не такой!
Кьют идет по LGPL, что значит - ты обязан обеспечить возможность ковырять/изменять/изучать кьют в проге. Проще всего это добивается динамической линковкой - кьют это dll/so шки, но в принципе - ты можешь сделать и статику, но тогда сам ебись с механизмом, которым ты сможешь обеспечить это требование.
За бабло позволяет. У них двойная лицензия, либо покупаешь, либо LGPL (раньше была GPL).
>>777896
https://en.wikipedia.org/wiki/Qt_(software)
https://www.qt.io/licensing/
ну за бабло то понятно, вот в линковке там вся и разница, как я понял
там помойму все открытые лицензии нихуя пропреитарщиков ничем не обязывают, для этого гитхаб и придумали, что бы залез, скопипастил половину, вставил в свой проект и продал, а авторам гитохуй
ну я том, что не зря этот гитхаб так навязывают
Нагуглил уже - на 4.5 добавили, в 2009м. Короче, 8 лет назад.
Вот тогда Qt то и взлетел, чтоб за пределами линупса и кед.
> Ведь по GPL нельзя использовать GPL софт в качестве компонента для несвободной системы.
Это какая-то GPL из твоего манямирка.
Ну, тащемто он прав, не?
GPL обязывает открывать сорцы проги, которые изают GPL-код. Она же вирусная.
Ну так там ставится софт из убунту-репозиториев, для которого все исходники есть.
А драйверы в ядре и проч. для поддержки запуска этого софта GPL-сырцов не используют.
Ты не понел. Ты не можешь написать прогу и не открыть ее код, если она использует GPL либу.
(То есть конечно можешь, но это будет нзаконно). И насрать, на то что чужие исходники ты приложил - ты обязан выложить и свои, или не использовать. В этом вся суть GPL.
Не устраивает - покупай проприетарь, линкуй динамически с LGPL, или ищи BSD (в которой хоть дрочи вприсядку - никаких ограничений)
И к чему ты это всё написал? Где нарушение GPL при запуске линуксовых прог под виндой?
Хуи, блять.
Винда запускает БИНАРЬ, и КОД никаким образом их не использует.
А вот выдрать кусок ядра линукса - например сетевой стек - и вставить в код винды - ты не можешь.
(Поэтому в винде сетевой стек спиздили из BSD)
Пиздец ты долбоёб. Нахуй ты мне объясняешь, что нарушения GPL нет, когда я с этим не спорю.
Т.е. нарушений GPL нет.
> Компания 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+.
Анонище, расскажи, что ты пишешь на сишке? Или хочешь написать?
У цугвина способ другой. Там перекомпиляция требуется специально под cygwin, а в десяточке сделали трансляцию системных вызовов, что позволяет просто брать бинарь с его окружением и запускать, не рассказывая, что ядро не его родное.
Ну, например на прошлой неделе написал несложное ESME для использования в одном проекте на работе (работаю не программистом, но иногда что-то такое пилю), в свободное время потихоньку пишу свой игровой движок.
Что писать мне без разницы, главное, чтобы у этого в итоге было хоть какое-нибудь применение.
> Ведь по GPL нельзя использовать GPL софт в качестве компонента для несвободной системы.
Ты не понял, что в GPL подразумевается под "компонентом системы". Программы, которые ты ставишь на винду — это не компоненты винды.
Тем более, что microsoft не распространяет софт. Он подтягивается из убунтовых репов.
Лол. Красношляпые поняли, что их платная цацка теперь нафиг не нужна с появлением подсистемы Linux в Windows. И стали раздавать её бесплатно всем, а не только опенсорсу.
>Что писать мне без разницы, главное, чтобы у этого в итоге было хоть какое-нибудь применение.
два чаю
Всё никак не могу догнать эту разницу между LGPL и GPL.
Есть библиотека. Распространяется по LGPL. Можно мне её использовать в своём платном приложении с закрытым исходным кодом и если можно то как?
наверное так же как и все остальные поступают, линкуешь и молчишь
Delphi один раз выучил, и за вечер клепаешь автоматизацию автосервиса, получаешь бабло.
А к Си тебе придется еще учить C++, потом Qt, потом SQLite, потом месяц с этим всем пердолиться, а результат такой же.
Для этого Си не надо знать. Битшифтики, ножку 11 поднял, два байта в порт 22 переслал.
Ардуинщик наверное.
У меня есть значение цвета в виде INT. У меня есть значение сдвига цвета, тоже в виде INT. Т.е. загружая палитру, я выполняю такой кусок кода:
for (i = 0; i < palette_size; i++) vram_palette = rom_palette + shift;
Как сделать так, чтобы цвет с нулевым значением так и оставался нулевым, без сдвига? Обыкновенный IF мне кажется слишком медленным, как и такая хуита:
sign = (color > 0) — (color < 0);
color = color + shift * sign;
Думаешь он будет DSP программировать и встроенные в кристалл мини-FPGA ловко вертеть на хую, устраивая в них dynamic offloading критических частей сложнейших алгоримтов?
Хрен там, будет байтики между портами возить на тележке и закатывать солнце вручную.
Прямая Память-Тележка Двойной Емкости - это ведь совсем не тележка!
Драйвер вибратора твоей мамки.
Ты билд делал?
Он нормально забилдился?
Прошлый запущенный процесс отладки завершен?
Почему у меня капча из хуйцов?
Нет, это ты сосешь.
Второй случай нужен, чтобы держать данные ридонли-секции.
Это может быть полезно, если ты хочешь разместить конфигурацию портов микроконтроллера в виде массива структур во флешь-памяти и конфигурировать их циклом, в котором обходится каждая структура.
Работать будет чуть медленнее (что практически не важно, ибо подобная операция выполняется не часто), но и места займет меньше.
Аналогично можно делать таблицы виртуальных методов, конечные автоматы и прочие ABI с размещением во флеш.
Ну, убунта же делала linux.sys...
И никто тебе не запрещает поставить швабодный gcc на венду....
Так что вся эта подсистема - тупо пакет швабодки, который можно поставить на венду.
покормил
Что мне теперь делать? Как запустить программу? В гугле пишут нажать "начать отладку", но у меня она серая.
Но нахуя это делать в каждом приложении? Пусть, например, эксплорер достает все приложения из системной очереди и передает их нужным оконным процедурам.
Наследие Windows 3.1, когда не было тредов и была кооперативная многозадачность.
>>780268
> проектов: 0
Хм, да. Что-то ты не то сделал. Закрой это нахуй и создай новый проект (Консольное приложение). В проекте добавь новый элемент, файл C++ и назови его main.c. Там уже набирай (или вставляй) код и компилируй.
Этот цикл нужен для ожидания\обработки действий пользователя. GetMessage - точка блокировки (без блокировки цикл сожрет все процессорное не выполняя полезной работы). Не ну ты конечно можешь их не обрабатывать (например так всякие консольные утилитки делают), но тогда и твой процесс завершиться очень быстро.
И это не только в винде, это во всех системах, где ожидают действий от юзера. Эксплорер виндовой это самое обычное приложение, а ты просто ленивая скотина.
Но можно было просто одной функцией Run(); сделать (вместо 3-х, GetMessage, TranslateMessage и DispatchMessage), а сообщения обрабатывать в отдельных потоках.
А основная нитка что тогда по твоему делать?
В Qt в общем то одним вызовом и запускается все это (а внутри уже и крутится цикл обработки эвентов)
А, такой вопрос. Что-то посвежее КиР есть? Там не было ничего про return 0 и int перед main тоже не было
В Run просто вызывать Sleep(1), чтобы не было блокировки. И проверять, не было ли получено сообщение WM_QUIT.
Да, он из интернетов
> Но можно было просто одной функцией Run(); сделать
Нельзя. Из тройки GetMessage/TranslateMessage/DispatchMessage обязателен только GetMessage - дождаться уведомления о выключении компа, например. Остальные нужны не всегда. Еще в цикле обработки событий могут быть IsDialogMessage и TranslateAccelerator, они тоже не всегда нужны. А в играх делают цикл без блокировок, что-то типа if (PeekMessage()) { ...dispatch... } else { render(); }. Поэтому одного Run даже с кучей флагов нифига не достаточно, чтобы покрыть все случаи использования.
>>780357
Прата из шапки. На крайний случай Кочан. Но лучше сначала K&R дочитай.
Да ты просто гений программирования. Очень замечательный интерфейс получается. Ты правда думаешь, что если тебе не хочется делать цикл приема сообщений, то юзеры должны ждать секунду пока твой код сообразит обработать сообщения?
Это классика. К тому же, второе издание знает о C89 третьего издания вообще не существует - хуй знает, что за говно у тебя >>780371 тут, а множество консерваторов до сих пор пишет именно на C89.
>>780388
Ну вообще-то хотя бы один из тредов программы, слинкованной с /SUBSYSTEM:GUI, обязан обрабатывать сообщения, или винда сочтет, что программа зависла.
Странно, это уже после выхода стандарта. Везде советуют использовать именно int main и возвращать 0:
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284376&answer=1044841143
https://www.ty-penguin.org.uk/~auj/voidmain/
Либо там авторы просто не заморачивались возвращаемым значением.
В разных скриптах считается, что при успешном выполнении программа должна возвращать 0, иначе код ошибки.
> проектов: 0
Проект создай, епт.
>>780411
Нахуй иди. Ну напишет он cl /c main.c && link main.obj, и что, это такое адски необходимое на начальных этапах знание? Или про это так сложно прочитать, когда оно понадобится?
Это паттерн существовавший ещё до си, просто широкую распространённость получил только после ноды с её асинхронностью на каждый пук.
Реализовывается везде одинаково – передаёшь указател на ф-цию как аргумент и вызываешь когда окончишь работу/по опр. событию и тд.
>Есть какой-нибудь авторитетный источник с описанием что это такое и как правильно реализовать?
Лямбда-исчисление.
Разберись лучше с корутинами, это более общая абстракция https://www.youtube.com/watch?v=_fu0gx-xseY
> Для настоящего третьего русского издания перевод заново сверен с оригиналом, в него внесены некоторые поправки, учитывающие устоявшиеся за прошедшие годы изменения в терминологии, а так же учтены замечания
В общем, они его придумали. По сути это второе издание перевода второго издания K&R.
>Это паттерн существовавший ещё до си, просто широкую распространённость получил только после ноды с её асинхронностью на каждый пук.
Проиграл с этого хипстера. Он был широко распространён ещё во времена Windows NT, где был коллбек на каждое событие в интерфейсе.
Проиграл с этого проигравшего. Какое слово во фразе "еще до си" тебе непонятно?
Олдфажный хакер порвался)))
Пиздуй вирусы пиши и не выйобуцся
У пистушков и раби-даунов так печет, что они несут свой баттхерт в тред к старикам. Сделай плиз сайт вот такой как этот.
А я-то думал, я здесь самый старый. Хватит. Если не залезать в дебри, язык простой. Месяц на изучение синтаксиса, год на изучение либ и тонкостей типа неопределенного поведения. Умножь на два, если ты уже не тот, что прежде.
> не тот, что прежде
Давно уже не тот. В 93 хуярил на Ростовской областной олимпиаде по информатике. Места занимал. А сейчас туплю над структурой по пол дня.
Осиляторство языка - это еще не главное. Может оказаться, что тебе просто писать нечего, потому что все уже написано, а то, что не написано, неподъемно для одного человека. Тогда, наверно, только реверс и дрочение класических алгоритмов может сохранить интерес к кодингу.
как связаны сопрограммы и коллбек-функции
коллбек функции в си - это способ параметризировать поведение (а не данные)
в разных языках и разных либах по разному решается
это могут быть делегаты встроенные в язык в шарпике и явке, интерфейсы встроенные в язык, либо делегаты и интерфейсы реализованные на уровне либ, либо тупые коллбеки, либо тру лямбды (не синт сахар) и другая экзотерика в функциональщине
А что если только это и интересно, а вот писать самому-не очень?
ах, да, там если лезть в функциональщину, то еще и есть замыкания, функции высших порядков
альтернатива в опп - это полиморфизм
>>780630 (OP)
>>780630 (OP)
>>780630 (OP)
>>780630 (OP)
>>780630 (OP)
Вы видите копию треда, сохраненную 14 июля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.