1

Тема: Складні оголошення, правило "право-ліво"

В котрий раз перечитував главу "Складні оголошення" в K&R.. згадав про чудову замітку, яка свого часу спростила мені розуміння цих заплутаних речей. Вирішив її перекласти для нашої спільноти.

А як взагалі формується основний принцип розбіру складних синтаксичних конструкцій мови, типу "вказівник на функцію, що повертає вказівник на масив із трьох вказівників на функції, що повертають int"?

Давно і чітко формалізовано у вигляді правила "право-ліво". Все просто. Маємо:

  • () - функція, що повертає...

  • [] - масив із...

  • * - вказівник на...

Процес розбіру ітеративний:

  • Першим ділом знаходимо ім'я, від котрого і будем починати. Пляски починаються зі слів "Ім'я є..."

  • Наступний крок - крок вправо. Що там у нас справа? Якщо (), то говоримо, що "Ім'я є функція, що повертає...". (якщо між дужок щось є, то "Ім'я є функція, приймаюча те, що між дужок, що повертає...")
    Якщо там [], то "Ім'я є масив із...". І таким ось чином ми йдемо вправо до тих пір, доки не дійдем до кінця оголошення чи правої ) дужки. Тут пригальмуємо...

  • ...і починаємо танцювати вліво. Що у нас зліва? Якщо це щось не з наведеної вище таблиці (тобто не (), [], *), то просто додаємо до вже наявної розшифровки. Якщо ж там щось з цих трьох символів, то додаємо те, що написано в таблиці. І так танцюємо до тих пір, доки не дійдемо до кінця (точніше - початку оголошення) або лівої ( дужки. Якщо дійшли до початку, то все готово. А якщо дійшли до (, то по вже зазначеній ітеративності переходимо до кроку 2 - пляски вправо продовжуємо.

Приклад:

int (*(*(*fptr)())[3])();
          ^^^^

1. Знаходимо ім'я та записуємо "fptr є..."
2. Крок вправо, але там ), тому ідемо вліво

int (*(*(*fptr)())[3])();
         ^

і отримуємо "fptr є вказівник на..."

3. Продовжуємо їхати вліво, але тут (. Ідем вправо

int (*(*(*fptr)())[3])();
               ^^

отримуємо "fptr є вказівник на функцію, що повертає...". Знову ), знову вліво.

4. Отримуємо

int (*(*(*fptr)())[3])();
       ^

"fptr є вказівник на функцію, що повертає вказівник на..." Зліва знову (, ідем вправо.

5. Отримуємо

int (*(*(*fptr)())[3])();
                  ^^^

"fptr є вказівник на функцію, що повертає вказівник на масив із трьох..." І знову справа ), вирушаємо вліво

6. Отримуємо

int (*(*(*fptr)())[3])();
     ^

"fptr є вказівник на функцію, що повертає вказівник на масив із трьох вказівників на..." Знову поворот вправо з причини (

7. Отримуємо

int (*(*(*fptr)())[3])();
                      ^^

"fptr є вказівник на функцію, що повертає вказівник на масив із трьох вказівників на функції , що повертають..." Тут кінець опису, поїхали вліво та отримали кінцеву розшифровку цієї каракулі

8.

int (*(*(*fptr)())[3])();
^^^

"fptr є вказівник на функцію, що повертає вказівник на масив із трьох вказівників на функції, що повертають int"

Саме те, чого ти й хотів. Просто?

Першоджерело: http://www.kalinin.ru/programming/cpp/17_07_00.shtml

Подякували: 0xDADA11C7, YurkoFlisk, Yola, Replace, leofun01, sensei6

2

Re: Складні оголошення, правило "право-ліво"

Раптом комусь так зручніше:

int (*(*(*fptr)())[3])();


          fptr              -- fptr
         *fptr              -- є вказівником
        (*fptr)()           -- на функцію
       *(*fptr)()           -- що повертає вказівник
      (*(*fptr)())[3]       -- на масив з трьох елементів
     *(*(*fptr)())[3]       -- кожен з яких є вказівником
    (*(*(*fptr)())[3])()    -- на функцію
int (*(*(*fptr)())[3])()    -- що повертає int

@Kane, може започаткуєте блог?

ukrainian.stackexchange.com - це питання-відповіді з української мови
Подякували: Kane, leofun01, LoganRoss3

3

Re: Складні оголошення, правило "право-ліво"

Мої вміння та навички, поки що, занадто скромні, аби для них створювати блог.

4

Re: Складні оголошення, правило "право-ліво"

З навичками у вас все добре, але для того, аби бути помітною медійною хвигурою потрібно створювати або руйнувати сенси, а над цим вам ще працювати і працювати.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

5

Re: Складні оголошення, правило "право-ліво"

0xDADA11C7 написав:

аби бути помітною медійною хвигурою потрібно створювати або руйнувати сенси, а над цим вам ще працювати і працювати.

Ну було задовбався трохи (маленька криза у житті), а ви мені й досі згадуєте. Руки/ноги/голова цілі, нафіг потрібна та філософія із сенсами. Все норм ;)

6

Re: Складні оголошення, правило "право-ліво"

Я не про ваші особисті проблеми, це все зрозуміло і я також мав не одну кризу в житті. Я про здатність зацікавити/спровокувати читача чи створити якийсь рух. POSIX`оподібних систем було хоч греблю гати до Linux, навіть в СРСР створювали таке, а рух започаткував Торвальдс. Вегани не бачать (і не кажуть)"омлет з ветчиною", а скоріше "розчленований труп свині запечений в курячому ембріоні"

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: leofun011

7

Re: Складні оголошення, правило "право-ліво"

Ініціативність це дуже добре, приклад: якби не ваші думки на тему криптора/вм - мене б тут не було. Здатність "зацікавити/спровокувати" повинна чимось підігріватися, мати мету (наприклад, заявити про себе). Щодо моєї мети, то задля її досягнення цього всього дуже замало, та й мислити іншими категоріями потрібно, ось тому і відчувається в'ялість у праці в сфері кодингу, а альтернативи реально не видно. Сколотити рух/банду? У мене був досвід колективної праці - лебідь, щука і рак, не сподобалося. Іноді беруть сумніви, але я завжди згадую про АТО, і сумнівів як не було. Єдине що важко робити, так це передбачувати, розуміти соціальні настрої - це навіть важливіше за саму працю. Я не ідеаліст.
От зацікавте мене: як заробити дуже багато грошей? Класичні теми, чи щось нереальне потрібно зробити (низькорівнева всячина), або ж "терпение и труд все перетрут"?

8

Re: Складні оголошення, правило "право-ліво"

У мене був досвід колективної праці - лебідь, щука і рак, не сподобалося.

Ви тут ділитеся досвідом (за що я вам вдячний), можете побачити цю замітку в розділі "Статті", тому в колективній праці ви берете безпосередню участь :P якби вам не подобалося, то ви б тут і не балакали б

Єдине що важко робити, так це передбачувати, розуміти соціальні настрої - це навіть важливіше за саму працю.

пророцтва 2013 року од Різдва Христового користувача очі.завидющі і Hanter

Bartash написав:
Очі.завидющі написав:

Тоді вже хизуватись треба російськими літерами варто, як трофеями. :)
Згадався мені рух фофудді!

Ізвініте что вьінужден пісать гадкімі малоросійскімі(ябьі сказал мікроросійскімі) буквамі но злобньіе жидобандервци вирвалі все клавіши с русскімі буквамі плоскорубцамі і сожглі іх.
Вьі даже не представляете на какіе страданія оні обрекают нас русскоязичних.В городе невозможно купіть водкі! Только іх бандеровская горілка! Єто ужастно, я боюсь ее піть она действітельно горіт, прічем сінім пламенем. Совершенно нет редькі і каваса, оні запрещеньі. Ми винуждени варіть і піть брагу, другіх ісконно русскіх напітков просто нет. От недостатка алкоголя многіе болеют і умірают. Нас насільно заставляют есть єті ужастньіе врньікьі!

Іноді відчуваю, що я за свої юні роки вже пропустив багато цікавого у суспільних баталіях...

Не сумуйте, бо все тільки починається ;)

Тема "Мультфільми про російську дійсність :)"

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: Kane, leofun012

9

Re: Складні оголошення, правило "право-ліво"

От зацікавте мене: як заробити дуже багато грошей? Класичні теми, чи щось нереальне потрібно зробити (низькорівнева всячина), або ж "терпение и труд все перетрут"?

Якби ви мені розповіли про те, як гроші допоможуть досягнути мені моєї мрії - побачити розмотані партноменклатурні кишки (та їхніх сраколизів) на огорожі їхніх же осель, то я б посилено з ранку до ночі думав би про гроші, спав би думав і їв би думав  *YES*

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

10

Re: Складні оголошення, правило "право-ліво"

0xDADA11C7 написав:

якби вам не подобалося, то ви б тут і не балакали б

"створити якийсь рух" - в моєму розумінні це "коло за інтересами", так ось таке коло було, при чому приймалися різні рішення і думки часто не сходилися, і через це ти постійно відчував дискомфорт. Мабуть фігова була організація дійства, хз. А тут я добровільно вбиваю нудьгу: хочу - роблю, не хочу - ні, мені це й справді подобається.

0xDADA11C7 написав:

Якби ви мені розповіли про те, як гроші допоможуть досягнути мені моєї мрії - побачити розмотані партноменклатурні кишки (та їхніх сраколизів) на огорожі їхніх же осель, то я б посилено з ранку до ночі думав би про гроші, спав би думав і їв би думав  *YES*

То ви що, ідейний?) Мені іноді важко вас зрозуміти.

11

Re: Складні оголошення, правило "право-ліво"

То ви що, ідейний?) Мені іноді важко вас зрозуміти.

Так, але ви також ідейний деякою мірою(нижче ваша цитата це доводить), проте не бачите (або соромитеся бачити) добрі прецеденти-протиотруту на пострадянському просторі.

Іноді беруть сумніви, але я завжди згадую про АТО, і сумнівів як не було.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

12

Re: Складні оголошення, правило "право-ліво"

Я мав на увазі мотивацію, що якщо я не буду працювати - я туди попаду. А я туди не хочу. Де тут ідея?

Подякували: leofun011

13

Re: Складні оголошення, правило "право-ліво"

Я мав на увазі мотивацію, що якщо я не буду працювати - я туди попаду. А я туди не хочу. Де тут ідея?

Те що я далі казатиму це не демагогія, просто подумайте над цим, як би дивно вам це не здалося:

Ми живемо в епоху постмодерну, де уявне нас змушують вважати справжнім, в той час як справжнє намагаються знищити, але спочатку їх урівнюють в правах, потім справжнє замовчують і знецінюють, а тоді вже знищують, щоби й згадки про справжнє не залишилося. Світова політика на постмодерні держиться, а оскільки українці не мають великого зиску з тієї політики, то доведеться або руйнувати постмодерн, або бути його архітектором.

Приклади постмодерну - найсвіжішій це україно-російська війна, яку вголос так називати не можна, хоча існує мобілізація (нагадаю, що мобілізація це завжди війна), хоча воєнний стан чомусь ніхто не оголошує, бо тоді Кончу-Заспу доведеться віддавати під бомбосховища і владу одержать військові, а не близькі до державного бюрократичного тіла бариги. Також існує міф про тоталітарність 3-го Райху, хоча за економічними свободами він набагато випереджав не те що 80-і роки СРСР (існував вільний ринок, а в СРСР в ті часи існували підпільні "цеховики") а й сучасну Україну.

Тому ваші прості бажання в наших умовах це вже люта ідейність. Щоби мати шанс на світовому ринку праці і балакати з білими людьми ви маєте (принаймні про себе) назвати свій "освітній заклад" "шматком лайна", інакше залишиться роль пострадянського холуя та піти вклонитися (як це наші журналісти роблять) ґасцям с МаАаскви і десь там же в кращому випадку шукати роботу.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: Kane, leofun012

14

Re: Складні оголошення, правило "право-ліво"

Заперечити нема чого, важко усвідомити.

0xDADA11C7 написав:

або руйнувати постмодерн, або бути його архітектором.

Що вибрали ви?

15

Re: Складні оголошення, правило "право-ліво"

Нейтральне поки, документую і класифікую, невдовзі дам посилання на вікі ресурс про устрій (пост)радянського суспільства.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: leofun011