LINUX.ORG.RU

Что-то я малость не вкурил. А a, b и c тут вообще зачем?

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

Да ладно тебе цепляться. Если попасть в его струю(лол), то довольно часто можно нечто полезное почерпнуть!

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

то , что в вызове констрантного имени функции допустимо разименование ( то что допустимо взятия адреса - будем считать однородностью с работой с массивами )

ок

для массива прокатит

int a[100]

a[4];

(&a)[4];

но не прокатит :

(*a)[4]

а почему для функции прокатывает ?

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

Потому что (*a) — это первый элемент массива, а (*a)[4] — это попытка взятия пятого элемента из первого элемента массива?

Deleted
()
Последнее исправление: ecko (всего исправлений: 1)
Ответ на: комментарий от qulinxao

для массива прокатит a[4]; (&a)[4];

но только синтаксически. это не эквивалентные конструкции.

printf(«%p %p %p\n», &f, f, *f);

0x80484e0 0x80484e0 0x80484e0

капец...

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

ещё забавней.

(******************f)(); нормально

а для (& & f)() естественно ошибка компиляции.

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

Возможно, что я тебя попросту не понимаю, но ведь указатели на функции используются в сях!

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

Ну, у указателей на функции есть и другое применение.

Но согласен, да. Какое-то странное поведение при (******************f)();, например.

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

для начала

-int (*pf)()=f;
+int (*pf)()=&f;

разрешено (*f)();

Чё тебе не нравится? Это указатель функции на саму себя.

ещё забавней.
(******************f)(); нормально

И чё цепочка указателей на последний указатель на функцию, чё не так?

а для (& & f)() естественно ошибка компиляции.

А ты что хотел, возврат адреса на адрес?

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

Некрофилия ни при чём. Я вот Си учил по K&R, мне просто привычнее писать на ANSI C.

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

ну нет та цепочки указателей.

и случай (***********pf)() ; прокатывает именно потому что

разыменнование указателя на функцию не просто даёт функцию

а даёт функцию , чьё значение в выражении сразу же конвертиться в указатель на функцию

т.е для функций /и для указателей на функцию ( но не для указателей на указатель на ( и так определённое число раз)) операция разименнования (*) пуста(nop)

ибо

для

int (*pf)=f;

int (**ppf)()=&pf;

смысл (**pf)() и (**ppf)() разный хоть и даёт в итоге одно и тоже.

qulinxao ★★☆
() автор топика
Ответ на: комментарий от wakuwaku

То, что оно не вызывает ошибку компиляции, как при (&&f)();, например? Почему можно выполнять такое многократное разыменование функции?

Deleted
()

Ты, конечно, молодец, что суёшь нос так глубоко в Си, но я тебе расскажу как сишник с почти 10-летним стажем — твой листинг не Си, а дерьмо. И годен лишь для использования мудаками-преподавателями для издевательств над студентами:)

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

амперсанд не обязателен , так что «для начала» ненужно.

qulinxao ★★☆
() автор топика
Ответ на: комментарий от Stahl

Надеюсь, в продакшен он пишет всё-таки по-другому :)

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

ioccc и прчее компиляторотестирование.

очевидно не для продакшена примера

qulinxao ★★☆
() автор топика

Традиционно, тред в полном составе познает мир...

arturpub ★★
()

Когдаж ты, кукарекушка нулёвая, осилишь сишку.

Поясню для даунов:

Ладно ты, существо нулёвое, узнало, что тип и сишке можно не писать - молодец. Только ты об этом уже 10тем создал, нахрен ты это, удотище, из темы в тему копипастишь, твои abc?

Но хотя бы осиль тот факт, что функция без аргументов - это f(void). А то скоро твоя жопа нащупает новые возможности:

(&f)("qulinxao", "nulevoe", "dnishe");

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

Есть дауны, которые пишут: &f, либо &mas - специально для даунов сделано. Либо есть дауны, которые получая указатель, пытаются его вызвать (*f)(), а не f().

Далее, днище пишет в путсе «\n» - т.е. даже не осилило хеадер открыть и прочитать. Я уж не говорю о мане.

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

anonymous
()

Я такой хунёй баловался параллельно с прочтением k&r в выпускных классах.

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

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

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

Там я начал - вышло только вступление и философствования на 10скролов. Вот щас мне надо как-то придумать как описать это компактно и как не поленится. Очень трудно писать и не объяснять почему все питухи.

Как будет не лень - накатаю.

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

Нет, всё как раз наоборот. Чистое с89 фекалия неюзабельная, максимум что на которой можно написать - кусок говна. Я уж не говорю о том, что ниже.

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

Я уж не говорю о том, что ниже.

А где надыбать стандарты на более ранние версии? Чисто ради интереса. Я находил на гитхабе компилятор чуть ли не первой версии сишки, но это перебор. Хотелось бы знать функционал, с котором первый юникс писали.

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

Ну вообще-то был недавно

про float? да, неплохо.

а дальше? :)

Rastafarra ★★★★
()

Только хотел призвать царя в тред, а он уже здесь

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

http://minnie.tuhs.org/cgi-bin/utree.pl

между 3 и 4 версиями

там нету for нету break(вроде) но есть continue(наряду с return и goto)

когда (к 6 версии у Леона в комментах и ща доступном сырце v6)

используется struct то оно и как union(которого всё ещё не было) используется ибо например обьявление struct { int int;};

позволяло затем p->int эдакое автоприведение , где p произвольный указатель.

ну а поля общее же пространство имён.

qulinxao ★★☆
() автор топика
Ответ на: комментарий от aedeph_

у http://en.wikipedia.org/wiki/C_Traps_and_Pitfalls

есть годная секция почему нужно [*l,*r) где l указатель на начало , а r указатель на элемент за пределами ( ну который по стандарту можно именовать, но нельзя разименовывать (в случае когда не подвектор)) , а не иные варианты у Степанова этому очень подробно в его в 1ом плейлисте .

:)

qulinxao ★★☆
() автор топика
Ответ на: комментарий от aedeph_

3.6 counting and asymmetric bounds

считаю очень полезным всем.

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

Ну и что ты этим мне хотел сказать, типа пацан говорит, что изначально было (*f)() - ну даун тот, кто это придумал и правильно, что добавили второй вариант, ибо наверное был кто-то более вменяемый.

Остальное было так, как я сказал. Запомни одну вещь, и линус там ниже правильно написал - «защита от выстрела в ногу» - это не защита, это просто усечение возможностей у ЯП.

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

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

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

Зачем ты жертва пропаганды? Зачем ты несёшь всякую херню? А всё потому, что осилить, а потом кукарекать - сложно, а просто кукарекать проще паренной репы. Переставай.

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