LINUX.ORG.RU

Квалификатор volatile в c и c++

 , ,


0

2

Вот здесь есть один интересный момент, а именно: автор утверждает, что volatile имеет эффект только при объявлении/определении объекта, но не имеет эффекта в случае обращения через указатель, получаемый в результате операции вида const_cast<volatile T*>(t)(в предположении что t объявлен как T* t = ...;). В комментариях срач, и не слишком ясно как обстоит дело на самом деле. Что вы думаете по этому поводу?

Deleted
Ответ на: комментарий от Deleted

Трепло совсем поплыло.

В том числе из-за этого разыменовывать void* запрещено.

Неверно.

А так для этого есть тип(вполне определённого размера)

Ахинея. Я тебе уже сказал. Не пытайся мне нести ахинею - ты обделаешься.

И теперь вопрос, является ли (void *)&i, (char *)&i и прочее указателем на i? Ведь они имеют тот же адрес.

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

No sir! Указатель является переменной, содержащей адрес

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

Второе - ты своей ахиней проигнорировал всю суть того, что тебе писал я. Это типично для любого балабола.

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

Переменной содержащей адрес является void *, для которой не определена основная операция. Свойство его ты можешь загуглить в интернете. Почему он не подходит для случай с ip - ты осилишь понять.

А когда ты это поймёшь, ты осознаешь, что указатель это не только адрес.

vcerloman
()
Ответ на: комментарий от vcerloman

разыменовывать void* запрещено

Неверно

На остальное можно даже не отвечать. Пруф давай :-) И тип, возвращаемый разыменованием не забудь :-)

ламерок

кукарекал

Хм... Я думал ты исключил их из своего словаря, давно не слышал :-)

Deleted
()
Ответ на: комментарий от Deleted

Если ты про то, почему они идиоты -

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

И теперь вопрос, нахрена в стандарте существует понятие UB, которое идиоты трактуют как «нельзя», почему бы не написать сразу «нельзя»? Именно этот вопрос и задаст себе любой вменяемый человек. Если ты его не задал - ты идиот.

Если про то, почему они решили? Потому что идиоты. Идиот на то и идиот, что его действия не имеют под собою осознанности.

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

Зачем тебе анализировать код, выявлять состоятельность использования того или иного УБ, либо иного «не может», ведь можно просто принять это за аксиому.

Шланг заразил это ахинеей и ГЦЦ, ведь у нас модно стало рассказывать об УБ и том, как они опасны.

И почему «люди» захотели сломать компиляторы? Есть два варианта. Они идиоты, и некая теория заговора. Много вендоров, которые напрямую имеют отношение к развитию/финансированию компиляторов - пытаются продвигать свои надоязыки( тут есть свои причины. Основная из которых - деградировать мир), а значит им выгодна эта UB-истерия.

vcerloman
()
Ответ на: комментарий от anonymous

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

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

vcerloman
()
Ответ на: комментарий от vcerloman

написать сразу «нельзя»

Там, по сути, так и написано, но с уточнением: хз что будет, если попытаться

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

Ты сейчас всё правильно сказал. Теперь выполняй при чтении s/UB/нельзя/Ig :-)

Deleted
()
Ответ на: комментарий от Deleted

Вот смотрите. Это трепло полностью раздавлено, но это и не самое важное.

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

Вам может казаться, что я просто так стал называть этого пациента треплом - нет. И я вам это докажу.

Я уже показывал примеры - покажу ещё раз.

Трепло пастит:

разыменовывать void* запрещено

Неверно

На остальное можно даже не отвечать. Пруф давай :-) И тип, возвращаемый разыменованием не забудь :-)

При том, что изначальная цитата выглядела так:

В том числе из-за этого разыменовывать void* запрещено.

Куда делось то, на что именно я и отвечал? Правильно - исчезло. И вот у меня возникает вопрос. На что рассчитывает этот балабол? Он рассчитывает на то, что он самый умный. Что я и вы - идиоты? Да, именно в это его проблема.

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

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

vcerloman
()
Ответ на: комментарий от Deleted

Там, по сути, так и написано, но с уточнением: хз что будет, если попытаться

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

Но почему-то стандарт поведение не определил, а пациенты его определили. Зачем?

vcerloman
()
Ответ на: комментарий от vcerloman

Слив засчитан. Этот балабол пытается уйти от ответа. Пруфы, царь, пруфы давай! Не халтурь, иначе ты выглядишь как анскильная лалка

Deleted
()
Ответ на: комментарий от anonymous

В этом вся природа трепла. Оно попросту не может осознать того, что просто так трепаться о чём-то нельзя. Нужно иметь хоть какое-то обоснование.

Есть ли оно у данного трепла? Нет. Именно поэтому оно и трепло. Он попытался что-то там родить, но перданул в лужу. То же самое будет и дальше, именно поэтому трепло решили по тихому слиться, ведь можно пердануть ещё сильнее.

vcerloman
()
Ответ на: комментарий от vcerloman

у нельзя результатов быть не может

нельзя != невозможно, поэтому результаты вполне могут быть. Да и речь не о них

пациенты его определили

Нет. Вызов херни - частный случай UB, они не об этом заботились

Deleted
()
Ответ на: комментарий от Deleted

Заметим. Как у меня есть основания для каждого моего слова и обвинения. Как уличил и доказал наличие подлога в его потуги что-то с меня спросить.

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

Сейчас это малоразвитой трепло так и будет нести рандомную ахинею, что-то требовать, но при этом игнорировать то, что пишут ей.

vcerloman
()
Ответ на: комментарий от Deleted

нельзя != невозможно, поэтому результаты вполне могут быть. Да и речь не о них

Не могут. Иди мне покажи результат результата *((void *)ptr) - ведь нельзя же, а результат есть.

Нет. Вызов херни - частный случай UB, они не об этом заботились

Неверно. Вызов херни следствие конкретного определения. Есть логика, которая основана на трактовке «УБ == нельзя», именно поэтому и происходит вызов херни.

vcerloman
()
Ответ на: комментарий от anonymous

В `type * ptr` - типом является `type`. `type` даже переводится «тип». Лол.

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

vcerloman
()
Ответ на: комментарий от vcerloman

у меня есть основания для каждого моего слова и обвинения

Срочно в суд!

anonymous
()
Ответ на: комментарий от vcerloman

И снова слив засчитан.

конкретном

void* p; *p; //ill-formed

^^^
Неверно

у меня есть основания для каждого моего слова и обвинения

Кстати, ещё одно: ни одной строки кода царя в природе не найдено :-) Вот какие тут могут быть основания :-)

Deleted
()
Ответ на: комментарий от vcerloman

*((void *)ptr) - ведь нельзя же, а результат есть

Если ты об матюках компилятора - мы не об этом сейчас.

результат результата

Как это понимать?

Deleted
()
Ответ на: комментарий от Deleted

Если ты об матюках компилятора - мы не об этом сейчас.

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

Ты попытался болтать о том, что «нельзя != невозможно», но тебе привели пример нельзя и ты поплыл. Ты в состоянии вообще мыслить? Или ты просто заспамливаешь меня рандомными фразами?

Как это понимать?

Я вот не могу этого понять. Почему малоразвитым идиотам так хочется пастить куски враз и пытаться что-то попёрдывать? Ты в состоянии цитировать фразу полностью?

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

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

vcerloman
()
Ответ на: комментарий от EXL

Это не код, куда моему коду до:

int main()
{
    int listen_fd = listen_to(INADDR_LOOPBACK, 8883);
    const int n=10;

    worker( listen_fd, 0 ); return 0; /// строка для однопоточного теста; для тредов -- закомментить

    std::thread threads[n];

    for(int id=0; id<n; ++id )
    {
        threads[id] = std::thread( worker, listen_fd, id );
    }

    return 0;
}

ПС

Я всё же всем советую перечитать ветку. Это типичный пример ламерской солидарности, и это так мило. Может кто до сих пор мне не верит, либо не видел подобных явлений.

vcerloman
()

В 2018 году у всех обострилась шизофрения?

Смайлофаг зарегистрировался и зовёт сам себя в тред.

Царь начал агрится на свои же скопипащенные посты.

Лавсан хочет уничтожить каждый C++ проект.

https://www.youtube.com/watch?v=KTITw8X2368

anonymous
()
Ответ на: комментарий от EXL

Я так понял, его код даже не собирался(кто-то там говорит, что сам допилил)

Deleted
()
Ответ на: комментарий от vcerloman

Лол :-) Самокритичность - это, говорят, хорошо :-) Но не при всех же :-) Лол :-)

Deleted
()
Ответ на: комментарий от vcerloman

привели пример нельзя

Лол :-) Это где это там пример нельзя :-? Ты настолько загадил штанишки, что уже не можешь отличить два понятия друг от друга :-) Хотя в этом же посте далее:

если ты видишь два слова - они могут значить разное

результат результата

Как это понимать?

Я вот не могу этого понять

Вот почему я не удивлён? Очередной неосилятор пытается вещать сидя в глубокой луже. Слив засчитан

Deleted
()
Ответ на: комментарий от anonymous

Смайлофаг зарегистрировался и зовёт сам себя в тред

Можно ссылку на профиль?

Deleted
()

А еще вот хорошая статья, кстати: https://eax.me/c-vs-cpp/

Цитата оттуда:

Итак, основная идея, пожалуй, состоит в следующем. Если вы решаете задачу, где действительно очень важна скорость (определение см далее), вы все равно не сможете использовать C++. Вы, вероятно, сможете писать на так называемом «C с классами» или «C с шаблонами». Эти диалекты языка C, бесспорно, имеют право на жизнь. И если вы называете «языком C++» эти диалекты, то я, пожалуй, с вами даже соглашусь — для задачи надо брать «язык C++», срочно! Только нужно при этом быть очень уверенным, что через год вы не выйдите за рамки «C с шаблонами». Эта действительно большая проблема на практике и она более детально описана далее.

Однако большинство людей под С++ понимают так называемый «современный C++», со счетчиками ссылок, классами, исключениями, шаблонами, лямбдами, STL, Boost, и так далее. То есть, тот C++, на котором вы пишите, почти как на Java, в котором никогда не встречаются обычные указатели, и вот это все. Если вам очень важна скорость, то писать на таком C++ вы не сможете. Если же он вам подходит, то лучше взять Java, Go или любой другой высокоуровневый язык по вкусу. В них все те же возможности реализованы намного лучше. А узкие места при необходимости, которой, впрочем, может и не возникнуть, вы всегда сможете переписать на C.

Но ессно поехавшим на сиплацплац это все как об стенку горох.

lovesan ★★★
()
Ответ на: комментарий от lovesan

std::хуй скорее.

Уровень аргументации прям доставляет.

А еще вот хорошая статья, кстати: https://eax.me/c-vs-cpp/

Если для вас это хорошая статья, то про свои знания C++ в приличном обществе вам лучше ничего не говорить.

eao197 ★★★★★
()
Ответ на: комментарий от lovesan

поехавшим на сиплацплац

Но ведь ты тоже поехавший, просто в другую сторону.

PS Грамотные сиплюсплюсники есть, хоть и очень мало. Но их в любом продакшн-языке мало.

anonymous
()
Ответ на: комментарий от anonymous

PS Грамотные сиплюсплюсники есть, хоть и очень мало. Но их в любом продакшн-языке мало.

Лол :-) Что такое «грамотные сиплюсплюсники»? :-) Программист на цепепе - это хороший зубрилко, прежде всего :-) Он уже выучил за долгие-долгие годы идиомы RAII и даже понял как их применять на практике :-) Теперь этот хорошо заученный приём, грамотей применяет и тут и здесь :-) Везде ему мерещатся летящие исключения, и он ведёт с этим бесконечную борьбу, ибо он знает как написать деструктор и даже понимает что такое область видимости :-) Всё, специалист обучен грамоте и почти готов к нагрузкам :-) Почему почти? :-) Потому что впереди его ждут замечательные бусты, отличный легаси, километровые гайдлайны и всевозможные стандарты, а также бесконечные думки о том что же круче, подчёркивания или кэмелкейс в именах, или же m_member против member_, ну и т.д. :-) Лол :-)

anonymous
()
Ответ на: комментарий от lovesan

Это всё верно, только вот выводы убогие:

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

Каким бы убожеством «современный С++» ни был, он в любом случае быстрее и лучше жавы, а уж такой параши как го и подавно.

А узкие места при необходимости, которой, впрочем, может и не возникнуть, вы всегда сможете переписать на C.

Это мантра колхозников, которые нихрена не понимают в оптимизации. Явные узкие места есть только в лабах, которые в основном и пишут жабисты, которые носятся с мантрой «преждевременная оптимизация». Реально же - все подобные места закрываются сразу.

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

vcerloman
()
Ответ на: комментарий от eao197

Если для вас это хорошая статья, то про свои знания C++ в приличном обществе вам лучше ничего не говорить.

Ламерок, который нихрена не знает кресты, и который «уже давно не программист» вещает о знаниях С++? Это сильно.

Вы, ламерки, позорите мир С/С++. И после этого и появляются подобные пасты. И эта паста полностью правильная - ей нечего возразить, ведь то дерьмо, что рождаете вы ничем не отличается от дерьма на пхп. Единственное на чём ты можешь выехать - это на более сильном рантайме, но подобное не имеет смысла. Принимая подобное - ты соглашаешься с тезисом «жс такой же как кресты», а так же весь этот рантайм написан не на твоём колхозном С++.

vcerloman
()
Ответ на: комментарий от Deleted

Лол :-) Это где это там пример нельзя :-? Ты настолько загадил штанишки, что уже не можешь отличить два понятия друг от друга :-) Хотя в этом же посте далее:

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

Вот почему я не удивлён? Очередной неосилятор пытается вещать сидя в глубокой луже. Слив засчитан

Как же сложно разговаривать с подобными идиотами. Я бы тебе всё популярно объяснил - кто ты, что ты и почему. Но мне не дают.

В любом случае, ладно. Я помножу на ноль потуги данного клоуна.

vcerloman
()
Ответ на: комментарий от Deleted

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

Она пишет это:

разыменовывать void* запрещено

Неверно

На остальное можно даже не отвечать. Пруф давай :-) И тип, возвращаемый разыменованием не забудь :-)

И на что она рассчитывает, она рассчитывает на то, что вы прочитав это - подумаете «царь говорил о том, что „разыменовывать void* запрещено“. И в этот момент вас поймали. Ведь вы надеетесь на то, что никакой вменяемый человек не будет врать в цитатах, но - вы ошибаетесь.

Именно на этом и играет подобный мусор, который и считает вас за идиотов.

На самом же деле реальная цитата, на которую я отвечал - выглядит так:

В том числе из-за этого разыменовывать void* запрещено.

Неожиданно правда, оказывается царь говорил не про разыменование void *, а про „в том числе из-за этого“.

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

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

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

vcerloman
()
Ответ на: комментарий от vcerloman

Ну дак расскажи мне об этих двух понятиях

Извини, царь, но значния этих слов ты можешь в гугле узнать. Ничего специфического в них нет.

Я бы тебе всё популярно объяснил - кто ты, что ты и почему

Лол :-) А надо объяснить где я прав или нет :-)

Deleted
()
Ответ на: комментарий от vcerloman

На самом же деле реальная цитата, на которую я отвечал - отличается

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

Deleted
()
Ответ на: комментарий от vcerloman

Какой срач развели уже на три страницы. А все от того что авторы сей сделали volatile квалификатором. Вот в нормальных языках, таких как LLVM IR например, это не свойство самой переменной, а только конкретных операций доступа к ней. load и store могут быть volatile, а не кусок памяти.

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

#define READ_ONCE(x) (*(volatile typeof(x) *)&(x))

pftBest ★★★★
()
Ответ на: комментарий от pftBest

Ты бы лучше почитал, что я писал этим балаболам. Ты опять же попал в туже самую лужу.

Ты обвиняешь си в том, что квалификатор свойство переменной, но почему? Потому что ты нихрена не понимаешь в си, и в этом проблема всех экспертов.

Квалификатор не является свойством переменной, а является свойством операции.

(*(volatile typeof(x) *)&(x))

Вот тут volatile typeof(x) - является свойством операции, а не переменной. Тип переменной лишь определяет операцию. И это сделано для того, чтобы не вводить 10разных типов операций и не писать это каждый раз.

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

Именно поэтому этот код для ядра следует читать так - мы переопределяем операцию *, которую тут же применяем.

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

vcerloman
()
Ответ на: комментарий от Deleted

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

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

vcerloman
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от pftBest

сделали volatile квалификатором

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

Deleted
()
Ответ на: комментарий от anonymous

как всегда, занимательно

На ЛОРе истина рождается в срачах)

Deleted
()
Ответ на: комментарий от Deleted

Потому что ты должен отвечать за свои потуги. Хотя нет, трепло и не должно.

В любом случае - ты знаешь, что там написано. Если нет - я могу повторить.

vcerloman
()
Ответ на: комментарий от vcerloman

Если ты поймёшь что такое type * ptr, и поймёшь, что типом является *, а так же то, что void - не является типом. Хотя этот факт написан в стандарте, но в любом случае.

Тут два утверждения, что типом является *, и что void не тип. Что именно написано в стандарте? Энивей, запомним оба утверждения.

То, что стоит слева от * является типом для результата операции *, а теперь подумай - имеет ли отношение квалификатор доступа к операции доступа? И ответ ты получишь.
Именно поэтому колхозники и ноют, что они не понимают того, почему там два конста(и других квалификаторов). Почему const type * ptr - не имеет никакого отношения к ptr.

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

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

Это утверждение сужает круг ответов, но все еще бессмысленно. Ну допустим «это», «поэтому» было про * = тип.

За этим даже далеко ходить не надо - ведь функция обладает той же логикой.

Функция обладает той же логикой, что * = тип?

Понимая это - тебе станет понятно как и почему работает то, что ты спастил с констом.

.....

выражения: i и *ip представляют собой обращение к одной и той же ячейке памяти

У тебя явные проблемы с логикой. Если i и *ip указывают на одну «ячейку»( опять же, колхозное понимание - ни на какую ячейку ничего не указывает),

Не указывают, а представляют собой обращение к объекту, будучи в вычисляемом выражении. x=i - обращение, x=*ip - обращение. i не указывает, а «символизирует», потому что это символ. Ты смешал указатели и символы и начал строить выводы, заранее бессмысленные. Дальше над тобой просто смеются, независимо от ума и скилла.

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

то каким образом из этого следует то, что * ip является указателем на i?

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

Если предположить, что * перед ip - опечатка и не нужна, ответ прост: ip хранит адрес i, это и есть отношение указания.

Неверно. Адрес не имеет никакого отношения к i - примеры тебе уже дали. Ты их заигнорил.

1. Где эти примеры, кто их дал?

2. Этот адрес - адрес i, до тех пор, пока его скоп существует. Смысл &i четко определен. Но ты не видишь отношения, и это твоя проблема.

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

Как он у тебя имеет конец, если указатель - *, как ты утверждаешь? Чтобы знать конец, он должен быть type *, где type - не void и не функ.тип.

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

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

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

anonymous
()
Ответ на: комментарий от anonymous

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

Первое. Искать дыры в логике у человека, который на порядок сильнее тебя - это глупая затея. Ведь вероятность того, что ты её не осилил несоизмеримо выше вероятность её(логики) отсутствия.

Второе. Уличив любое трепло в манипуляции один раз - я множу на ноль все его потуги, ведь это трепло попросту не мотивированно на объективность, а значит все его потуги - бредни.

Доказывается это очень просто, а именно: он, отвечая на сообщения, приводит цитаты( и на самом деле отвечает) на совершенно левое сообщение. Для чего эта табуретка это делает? Правильно, что-бы вы не прочли первоисточник.

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

vcerloman
()
Ответ на: комментарий от anonymous

Тут два утверждения, что типом является *, и что void не тип. Что именно написано в стандарте? Энивей, запомним оба утверждения.

Это выводится из множества мест. Первое - уточнение написано после «void не тип», а значит в любом случае касается последнего( если не указано иного, а иное не указано).

Второе, тут уже нам нужна та фраза, которую табуретка вырезала, а именно:

Колхозники никогда себе не задавали вопроса - как частью типа может быть void, который не тип? И тогда бы им ничего не мешало бы понять то, что в type * ptr - типом является *.

Что мы тут видим? «Типом является *» - есть следствие из «void - не тип». Из этого следует то, что в рамках моей логики - для первого утверждения даётся обоснование, а для второго нет. А где же у нас обоснование второго?

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

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

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

Там даны чёткие свойства, а вернее дыры в понимании колхозников, а раз определены дыры и выведено следствие, то это следствие напрямую относится к свойствам колхозников.

Это утверждение сужает круг ответов, но все еще бессмысленно. Ну допустим «это», «поэтому» было про * = тип.

Заметим, как малоразвитое трепло пытается кидаться «бессмысленно», но оно показало - как именно это следует из моей цитаты? Нет. Потому что это из неё не следует.

Функция обладает той же логикой, что * = тип?

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

И тут мы опять возвращаемся к вырезанной фразе.

Колхозники никогда себе не задавали вопроса - как частью типа может быть void, который не тип? И тогда бы им ничего не мешало бы понять то, что в type * ptr - типом является *.
То, что стоит слева от * является типом для результата операции *,

Что у нас может стоять слева и где может быть воид относительно функции в контексте типа. А типом у нас является сигнатура. И далее тут работает чёткая логика:

То, что стоит слева от идентификатора является типом для результата операции () и всё это в контексте сигнатуры функции.

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

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

..x=i - обращение, x=*ip - обращение.

i не указывает, а «символизирует», потому что это символ.

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

Символ - это именованная на уровне аби сущность, которая никакого отношения к переменной не имеет.

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

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

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

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

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

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

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

Нельзя. Меняет. Проверяется это очень просто:

int main() {
    int * p;
    [&]{int i; p = &i;}();
    *p;
}

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

1. Где эти примеры, кто их дал?

Простой пример struct { int i;} a; - на что указывает адрес a/i? Ни на что - он не имеет никакого отношения ни к i, ни к a.

Ну и ещё один выше.

2. Этот адрес - адрес i, до тех пор, пока его скоп существует. Смысл &i четко определен. Но ты не видишь отношения, и это твоя проблема.

Опять убогие потуги. Этот адрес памяти, который никакого отношения к i не имеет.

И заметим, как малоразвитое трепло понимает, что его потуги алогичны, но продолжает ставить какие-то шизофренические условия. Если ip указатель i, то он всегда указатель на i - иного не дано. Хотя зачем я табуретку учу логике.

Да, смысл &i чётко определён, но он никакого отношения к «указателю на i» не имеет. Это указатель на хранилище, в котором хранит значение i. Хранение этого значение ортогонально i. i является заполнителем скопа, а так же интерфейсом доступа к значению.

Как он у тебя имеет конец, если указатель - *, как ты утверждаешь? Чтобы знать конец, он должен быть type *, где type - не void и не функ.тип.

Вот опять, табуретка пытается свою шизофрению выдать за мою логику. Указателю и не нужно знать конец. void * - не знает.

В любом случае, мы опять видим, как табуретка пытается юлить, но даже она понимает, что она в жопе. Она понимает, что её логика дырявая - именно поэтому они и пытается приводить исключения. В моей логике никаких исключений нет, именно поэтому она и является логикой, а потуги идиотов - потугами идиотов.

Указатель как тип значения - это *, указатель как комплекс двух типов - это тип операции * и тип самого значения - *.

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

Вот опять - что мы видим? Малоразвитое трепло пытается мне рассказать о том, что у меня что-то там меняется. И казалось бы - это трепло уже давно должно было показать то, что поменялось. Но оно не показало. Почему?

Там есть цитата, где трепло чётко сказало, что указатель хранит адрес.

опечатка и не нужна, ответ прост: ip хранит адрес i, это и есть отношение указания.

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

vcerloman
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.