Anatoly Vorobey (avva) wrote,
Anatoly Vorobey
avva

Category:

темные закоулки языка C

Some dark corners of C

Набор забавных малоизвестных особенностей C. Самый интересный пример там, на мой взгляд - следующие две функции:
void foo1(int *x, int *y, int *z) {
  *x += *z;
  *y += *z;
}

void foo2(int *x, int *y, int *z) {
  int w = *z;
  *x += w;
  *y += w;
}


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

Правильный ответ: [Spoiler (click to open)]в первом случае компилятор не может исключить возможность того, что x==z.

Я также не знал, что в C99 есть ключевое слово restrict, которое решает эту проблему.
Subscribe

  • книги: опосредованно

    Алексей Сальников, "Опосредованно" (2019) В десяти эпизодах описана жизнь Лены, в начале книги заканчивающей школу в Нижнем Тагиле, в конце - она…

  • лабиринт

    Моя любимая метафора сегодня — "Эдипа кивнула. Она не могла оторвать взгляда от его глаз. Яркие черные глаза в невероятной сети морщинок, словно…

  • джеймс хэрриот и перевод

    Смотрим новый сериал "О всех созданиях, больших и малых" по книгам Джеймса Хэрриота. Эти книги я очень любил в подростковом возрасте, в конце 80-х.…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 44 comments

  • книги: опосредованно

    Алексей Сальников, "Опосредованно" (2019) В десяти эпизодах описана жизнь Лены, в начале книги заканчивающей школу в Нижнем Тагиле, в конце - она…

  • лабиринт

    Моя любимая метафора сегодня — "Эдипа кивнула. Она не могла оторвать взгляда от его глаз. Яркие черные глаза в невероятной сети морщинок, словно…

  • джеймс хэрриот и перевод

    Смотрим новый сериал "О всех созданиях, больших и малых" по книгам Джеймса Хэрриота. Эти книги я очень любил в подростковом возрасте, в конце 80-х.…