Интересантност о којој до данас нисам мислио. Колега ми је отворио очи. Наиме, ради се овоме: колега је послао фајл са Ц кодом на преглед. Његов код је имао функције које су изгледале отприлико овако:
/* Primer const argumenta u definiciji. */
static int foo(const int bar)
{
if (bar > 7)
global_bar = bar - 7;
}
На то сам ја коментарисао да обично не "губим" време декларишући формални аргумент конст, на шта ми је одговорио (потпуно исправно) да је у дефиницији конст врло корисна, за разлику од декларације.
Конст формални аргумент у декларацији сам коментарисао, али ја лично никада нисам размишљао о томе да дефиниција може да дода модификатор конст формалном аргументу, а да тиме не дефинише неку нову функцију.
На пример, нека је у заглављу оваква декларација:
/* Deklaracija funkcije. */
int funkcija(const char *);
А имплементација може овако:
/* Definicija funkcije. */
int funkcija(const char * const ime)
{
// ...
}
Заиста, овако се кориснику функције (који обично гледа прототип декларисан у заглављу) не намеће имплементациони детаљ за њега (корисника) небитан, док се читаоцу имплементације одмах даје до знања да се вредност формалног аргумента "ime" неће мењати у телу функције. Дакле, даје читаоцу сличну информацију као и конст модификатор на локалној варијабли.
Даље је интересантно приметити да додавање конст модификатора формалном аргументу у декларацији у суштини не мења декларацију. На пример, ове две декларације декларишу исту функцију.
/* Ekvivalentne deklaracije funkcije. */
int funkcija(const char *);
int funkcija(const char *const);
Oва друга је очигледно рогобатнија и представља једну од оних декларација у којима сам причао и у претходном чланку.
Нема коментара:
Постави коментар