темные закоулки языка 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, которое решает эту проблему.
no subject
Date: 2013-03-10 04:36 pm (UTC)no subject
Date: 2013-03-10 04:54 pm (UTC)Другой вопрос, что, опять-таки, для меня основной критерий — это не тупость компилятора, а "некрасиво".