темные закоулки языка C
Mar. 9th, 2013 02:48 pmSome dark corners of C
Набор забавных малоизвестных особенностей C. Самый интересный пример там, на мой взгляд - следующие две функции:
Если хотите - подумайте сами, почему компилятор генерирует более эффективный код для второй из них, foo2, перед тем, как прочитать ответ.
Правильный ответ:в первом случае компилятор не может исключить возможность того, что x==z.
Я также не знал, что в C99 есть ключевое слово restrict, которое решает эту проблему.
Набор забавных малоизвестных особенностей 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, перед тем, как прочитать ответ.
Правильный ответ:
Я также не знал, что в C99 есть ключевое слово restrict, которое решает эту проблему.