avva: (moose)
[personal profile] avva
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, перед тем, как прочитать ответ.

Правильный ответ: в первом случае компилятор не может исключить возможность того, что x==z.

Я также не знал, что в C99 есть ключевое слово restrict, которое решает эту проблему.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Dec. 29th, 2025 03:50 pm
Powered by Dreamwidth Studios