вторник, 8 марта 2011 г.

inline-функции и макроподстановки

inline-функции:

При объявлении функции внутри программы C++ позволяет вам предварить имя функции ключевым словом inline. Если компилятор C++ встречает ключевое слово inline, он помещает в выполнимый файл (машинный язык) операторы этой функции в месте каждого ее вызова. Таким образом, можно улучшить читаемость ваших программ на C++, используя функции, и в то же время увеличить производительность, избегая издержек на вызов функций.

макроподстановки:
#define max(A, B) ((A)  > (B) ? (A) : (B))
Хотя внешне он напоминает вызов функции, на самом деле max разворачивается в тексте путём подстановки. Вместо формальных параметров (A или  B) будет подставлены фактические аргументы, обнаруженные в тексте. Возьмем, например, следующий макровызов:
x = max (p+q, r+s);
При компиляции он будет заменён на следующую строку:
x = ( (p+q) > (r+s) ? (p+q) : (r+s));
...
Если внимательно изучить способ подстановки макроса max, можно заметить ряд "ловушек". Так, выражения в развернутой форме макроса вычисляются дважды, и это даст неправильный результат, если в них присутствуют побочные эффекты наподобие инкремента-декремента или ввода вывода. Например, в следующем макровызове большее значение будет инкрементаровано два раза:
max(i++; j++)   
(c)The C Programming Language

Комментариев нет:

Отправить комментарий