- 1
- 2
- 3
- 4
- 5
- 6
#include <iostream>
int main(){
int std = 10;
std::cout << std << std::endl;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+17
#include <iostream>
int main(){
int std = 10;
std::cout << std << std::endl;
}
1024-- 20.01.2014 01:08 # +3
А ведь когда-то давно такие моменты давали сильную встряску, и вырывался изумлённый возглас "И даже так можно?!". Сначала это было знакомство с реентерабельностью, потом - возможность изменения аргументов функции внутри неё, потом тернарный оператор, в выражении в качестве lvalue.
guest6 29.01.2024 03:27 # 0
Ты имеешь ввиду рекурсивные функции?
> возможность изменения аргументов функции внутри не
Так себе паттерн: лучше так не делать. Если конечно тебе явно не передали их по указателю или ссылке.
Но правда это зависит от языка.
> потом тернарный оператор, в выражении в качестве lvalue.
А помнишь свои ощущения, когда понял, что в С++ можно так:
?
guest6 29.01.2024 08:57 # 0
3Doomer 20.01.2014 07:12 # 0
bormand 20.01.2014 07:52 # +10
В крестах каждый день что-то новое можно узнавать, даже если с ними работаешь уже лет 5-10.
О сколько нам открытий чудных
Готовит крестоблядский код.
3Doomer 20.01.2014 08:21 # +3
bormand 20.01.2014 09:28 # +1
krypt 20.01.2014 17:46 # 0
kegdan 20.01.2014 17:50 # +2
Stertor 20.01.2014 17:52 # +2
kegdan 20.01.2014 17:54 # +1
Stertor 20.01.2014 18:11 # 0
krypt 20.01.2014 18:40 # 0
govnomonad 20.01.2014 19:29 # +1
kegdan 20.01.2014 19:39 # 0
guest6 29.01.2024 23:01 # 0
Понимаете?
Десять лет я слышу, что плюсы не нужны, а они всё еще нужны.
Пройдут года, прибой времени смоет помойную пену -- всех этих опотных программистов на "джаваскрипт" вкотившихся в ойтишечку за длинным рублем, а стоящие программисты на настоящих языках типа "C" и "C++" этого и не заметят.
Они будут читать в новостях "Хуюгл лейэфнул 300 000 программистов на пайтон". Читать, и посылать патч
Desktop 29.01.2024 23:31 # 0
– это у тебя телефон так исправляет? а с какого языка?
guest6 30.01.2024 00:09 # 0
Desktop 30.01.2024 00:15 # 0
kegdan 20.01.2014 08:38 # +4
crastinus 20.01.2014 13:03 # −2
такой ереси от тебя не ожидал ;)
Компилятор это позволяет, потому, что для него неймспайс, это что написано после слова неймспайс, или стоящее перед ::.
namespace nmsp;
nmsp::var..
А код ниже уже работать не будет, тк структура для компилятора это тоже набор символов, как и неймспейс.
#include <iostream>
struct std{
static int m;
};
int std::m=10;
int main {
std::cout << std::m << std::endl;
}
roman-kashitsyn 20.01.2014 13:06 # +3
> такой ереси от тебя не ожидал ;)
всё борманд правильно сказал.
crastinus 20.01.2014 13:13 # −1
roman-kashitsyn 20.01.2014 13:16 # +5
defecate-plusplus 20.01.2014 13:31 # +12
roman-kashitsyn 20.01.2014 13:45 # +1
guest6 29.01.2024 23:11 # 0
roman-kashitsyn 20.01.2014 13:10 # +5
crastinus 20.01.2014 13:14 # −1
Как это противоречит тому, что написал я?
roman-kashitsyn 20.01.2014 13:17 # +3
bormand 20.01.2014 13:32 # +4
Кстати забавно, но пространство имен типов и пространство имен namespace'ов пересекаются - компилятор не даст назвать тип и неймспейс одинаково.
crastinus 20.01.2014 13:35 # 0
roman-kashitsyn 20.01.2014 13:36 # +4
наверное, можно говорить "таблица символов", чтобы не создавать коллизий
> пространство имен типов и пространство имен namespace'ов пересекаются
Да мне кажется, корни растут из того факта, что раньше пространсва имён реализовывали через создание пустого класса со статическими методами и вложенными классами.
crastinus 20.01.2014 13:43 # +1
а не из-за того, что они могут использоваться подобным образом?
roman-kashitsyn 20.01.2014 13:50 # +2
И поэтому тоже. Борманд чуть ниже пояснил.
Правда, есть и отличия: в классах все члены видны всем остальным, т.е. можно использовать методы до их объявления. В нэймспейсах это не работает.
bormand 20.01.2014 13:43 # +2
Ragulinho 28.07.2021 00:27 # 0
defecate-plusplus 20.01.2014 10:52 # +9
а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>
kipar 20.01.2014 13:27 # 0
roman-kashitsyn 20.01.2014 13:28 # +1
kipar 20.01.2014 14:31 # −1
roman-kashitsyn 20.01.2014 14:33 # +1
> счетчик цикла
Не выспался?
kipar 20.01.2014 15:23 # 0
roman-kashitsyn 20.01.2014 16:08 # +1
Но автор поста как раз удивляется, что локальные переменные и "глобальные" нэймспейсы можно называть одинаково и использовать одновременно. Если бы это не выполнялось, то сценарий, описанный @defecate-++, был бы вполне реальным.
Если бы Петя использовал локальную структуру std, у него бы тоже было бы всё ок: его структура скрывала бы пространство имён std внутри его кода (правда, внутри вложенных в функцию структур не может быть статических членов). Но тогда нельзя было бы написать код, подобный коду в топике, без явной квантификации . Если Петя вложил структуру в неймспейс, то всё тоже ок, можно квалифицировать.
Если же Петя назвал глобальный тип также, как Вася назвал свой нэймспейс, вот тут беда.
bormand 20.01.2014 16:15 # 0
... то оно просто не скомпилится ;)
gcc выдавало что-то типа error: redefining to another kind of symbol
roman-kashitsyn 20.01.2014 16:18 # 0
Да, Акакий Дододжонович будет очень огорчён. Хотя у него и сейчас есть выход:
bormand 20.01.2014 16:22 # +1
roman-kashitsyn 20.01.2014 16:24 # +1
roman-kashitsyn 20.01.2014 16:31 # +2
crastinus 20.01.2014 18:51 # 0
как удивительно, что в языке с полнотой по тьюрингу времени компиляции творятся такие удивительные вещи с именами.
bormand 20.01.2014 18:55 # +1
kegdan 20.01.2014 18:57 # 0
crastinus 20.01.2014 18:58 # +2
Так и знал, что нужно зеленым писать.
bormand 20.01.2014 19:00 # 0
Stertor 20.01.2014 19:09 # +2
[trollface.jpg]
Vasiliy 20.01.2014 13:35 # 0
И другой вопрос в неймспейсе моджнили обявлять вложенные неймспейсы ?
roman-kashitsyn 20.01.2014 13:39 # +1
моя не панимать. Работают нормальные области видимости. Всё, что внутри функции, снаружи не видно. Стек же.
Если хочется глобальные для модуля переменные (не видимые другим модулям), есть волшебное слово static или анонимный неймспейс.
> в неймспейсе моджнили обявлять вложенные неймспейсы?
моджни.
bormand 20.01.2014 13:46 # 0
Но тем не менее, иерархии неймспейсов нет. Есть только линейное пространство имен пространств имен.
Или я сегодня туплю?
defecate-plusplus 20.01.2014 13:50 # +1
bormand 20.01.2014 13:57 # 0
А в крестах мало того что вверх умеет идти, так еще и после using namespace foo можно будет вместо foo::bar::test писать просто bar::test... Все-таки иерархия есть.
Vasiliy 20.01.2014 14:53 # 0
а Петя - свою, в которой ничего не зная про Васю, использовал слово awesome как счетчик цикла.
И вот тут Акакий Дододжонович берёт эти обе библиотеки и пытается ском... ЧИТАТЬ ДАЛЕЕ >>>
Ну тогда это вообще не возможная ситуация. Каждый разработчик либ фигачет свой неймспейс и в нем ебется конем как ему хочется, всякие счетчики цикла и фигушки которые должны умереть внутри умирают внутри модуля, все, что должны выйти наружу выходит в неймспейсе. И тогда никаких пересечений с именами не будет.
1024-- 20.01.2014 13:39 # 0
вроде бы можно заключить в безымянный namespace
> в неймспейсе моджнили обявлять вложенные неймспейсы ?
судя по бусту, можно
roman-kashitsyn 20.01.2014 13:44 # +4
defecate-plusplus 20.01.2014 13:46 # +3
во-вторых, такие проблемы могли бы возникнуть при компиляции именно петиного кода, а не васиного - но такого конфликта даже нет
и в третьих, если у пети есть свой неймспейс, то вообще становится крайне сложно организовать проблемы, о которых стоило бы переживать - было бы неплохо, если бы кто-то смог предложить пример конфликта
а в подтверджении моих слов пока вот: http://ideone.com/9517zU
и про второй вопрос - в неймспейсе нет ограничений на вложенные неймспейсы
you::can::shoot::your::legs::as::you::want
j123123 29.07.2021 15:39 # 0
guest6 29.07.2021 15:55 # 0
j123123 29.07.2021 17:45 # 0
recv() с pipe вообще не работает, и в read() никакого "MSG_WAITALL" нет. Из pipe чтение через read() заблокируется, если в пайпе нихуя нет. Если хоть один байтик есть, он и прочтется. Из сокета еще можно получить датаграму нулевого размера, а для pipe это хуйня полная, потому что никаких "датаграм" там нет
https://man7.org/linux/man-pages/man2/recv.2.html#NOTES
bormand 30.07.2021 21:23 # 0
Хм, т.е. прога тупо повиснет навсегда т.к. read() не может избавиться от пустой датаграммы?
j123123 30.07.2021 21:42 # 0
Можешь написать какую-нибудь хуйню на сокетах и проверить.
bormand 30.07.2021 21:56 # 0
read() на UDP сокете тоже вернул 0 при получении пакета нулевой длины. Ну и собственно убрал его из буфера.
j123123 30.07.2021 22:19 # +1
Переделал https://www.geeksforgeeks.org/udp-server-client-implementation-c/
j123123 30.07.2021 22:26 # 0
bormand 30.07.2021 22:28 # 0
З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.
j123123 30.07.2021 22:50 # 0
Такую тонкую питушню надо не в манах, а в каких-то юникс-спецификациях читать. И вообще, лучше не выебываться со всякими read() на сокетах, и использовать специально предназначенные recv() и recvfrom()
https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html#tag_16_474
> How read() handles zero-byte STREAMS messages is determined by the current read mode setting. In byte-stream mode, read() shall accept data until it has read nbyte bytes, or until there is no more data to read, or until a zero-byte message block is encountered. The read() function shall then return the number of bytes read, and place the zero-byte message back on the STREAM to be retrieved by the next read(), getmsg(), or getpmsg(). In message-nondiscard mode or message-discard mode, a zero-byte message shall return 0 and the message shall be removed from the STREAM. When a zero-byte message is read as the first message on a STREAM, the message shall be removed from the STREAM and 0 shall be returned, regardless of the read mode.
> З.Ы. А где в мане написано что это отличие только для size == 0? Там вроде только о длине датаграммы говорят.
Ну хуй знает, вполне возможно, что в мане они написали какую-то хуйню.
j123123 30.07.2021 22:56 # 0
bormand 31.07.2021 00:21 # +1
Я вот сразу подумала, что pending -- это "пришла и лежит в буфере".
Скорее тупо скопипастили ман с другой оси/версии, где read такое не читал, да забыли поправить.
gologub 31.07.2021 02:43 # 0
не за это диды в протокольной войне ваивали!
j123123 31.07.2021 09:24 # 0
WSAGetLastError() какой-то блядь. Я как-то переписывал хуйню на винсоксах в обычные беркли сокеты
PolinaAksenova 31.07.2021 09:40 # +3
WindowsGovno 31.07.2021 10:34 # +2
PolinaAksenova 31.07.2021 10:39 # +3
Soul_re@ver 31.07.2021 11:01 # +1
WindowsGovno 31.07.2021 11:09 # 0
Soul_re@ver 31.07.2021 11:17 # +1
j123123 31.07.2021 11:43 # +1
Soul_re@ver 31.07.2021 12:05 # 0
gologub 31.07.2021 16:36 # 0
их в стаи сгоняет прошивка
https://www.youtube.com/watch?v=86iQiV3-3IA
gologub 31.07.2021 16:45 # 0
и вероятно дохуя, томущо A это асинхронные
j123123 31.07.2021 17:33 # 0
WSA это "Windows Sockets API", где там "асинхронные"?
guest6 24.01.2024 05:59 # 0
guest6 28.01.2024 21:41 # 0
Смотри: во времена Win16 многозадачность была кооперативной. Чтение из файла блочило весь мир, но файлы были близко.
Чтение из клавы не было по сути IO, потому что поступало как сообщение в event loop.
А как быть с сетью? Нельзя лочить же (сеть далеко) и потому сделали асинхронный API.
А вот потом уже на всю винду распостранили
guest6 28.01.2024 22:20 # 0
guest6 28.01.2024 22:26 # 0
Там еще была смешная API: пока WinSock ждёт -- он мог крутить события, и вызывать твою функциб для прогрес-бара
короче, асинхронное программирование это всегда шарик-лизун с налипшими на него волосами
Ей богу, корутины это relief
guest6 28.01.2024 22:35 # 0
guest6 28.01.2024 22:52 # 0
Пропоёт о том, что любовь прошла.
guest6 28.01.2024 23:51 # 0
j123123 31.07.2021 17:45 # 0
https://habr.com/ru/post/105918/
Ну и еще есть какая-то чисто виндоспецифичная говнина с overlapped I/O, но в том коде этой говнины не было.
j123123 29.07.2021 17:58 # 0
Я относительно давно с этими сокетами связывался, но там есть такая хуйня, что если UDP (SOCK_DGRAM) то ты прочитаешь один пакет. Т.е. если тебе прилетело два пакета по 10 байт, и они там где-то хранятся во внутреннем буфере ОС, то даже если ты дохуя хочешь прочесть, ты первым recv() прочитаешь 10 байт, вторым recv() прочитаешь еще 10 байт.
К тому же "MSG_WAITALL" тоже не гарантирует, что у тебя столько прочитается, сколько ты запросил. См https://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html
>MSG_WAITALL
> On SOCK_STREAM sockets this requests that the function block until the full amount of data can be returned. The function may return the smaller amount of data if the socket is a message-based socket, if a signal is caught, if the connection is terminated, if MSG_PEEK was specified, or if an error is pending for the socket.
j123123 29.07.2021 18:04 # 0
https://stackoverflow.com/a/2862176
What happens if recv gets a packet larger than the buffer?
SOCK_STREAM: The question doesn't really make sense as put, because stream sockets don't have a concept of packets - they're just a continuous stream of bytes. If there's more bytes available to read than your buffer has room for, then they'll be queued by the OS and available for your next call to recv.
SOCK_DGRAM: The excess bytes are discarded.
JloJle4Ka 04.07.2021 19:05 # 0
HEu3BECTHblu_nemyx 05.07.2021 16:06 # 0
JloJle4Ka 05.07.2021 16:07 # 0
HEu3BECTHblu_nemyx 05.07.2021 16:11 # 0
JloJle4Ka 05.07.2021 16:24 # +4
- Э-э, дружище Ватсон, могу с уверенностью сказать, что вон за тем углом вам ввалят хороших п%%дюлей.
Доходят до того угла и, дейтвительно Ватсону там хорошо достается от двух здоровых лбов.
- Как Вы узнали про это, Холмс?
- Элементарно, Ватсон, я здесь вчера в вашем пальто вы%%ывался...
Coq 05.07.2021 17:20 # 0
crastinus 05.07.2021 17:12 # +3
Coq 05.07.2021 17:18 # 0
guest6 29.07.2021 15:42 # +1
Недавно пересмотрел "черная роза -- эмблема печали", кстати. Какой всё таки охуенный фильм. Толик-с-прибором мой герой
guest6 29.01.2024 03:41 # 0
guest6 29.01.2024 05:51 # 0
https://www.youtube.com/watch?v=aqHxIuTyHt4
guest6 29.01.2024 00:29 # 0
guest6 29.01.2024 00:31 # 0
Понял только зонненблум.
guest6 29.01.2024 02:38 # 0
guest6 29.01.2024 03:24 # 0
guest6 29.01.2024 05:50 # 0