Аргументи функції в c

аргументи функції

посилальні аргументи

Для зберігання аргументів і локальних змінних зазвичай використовується спеціальна область пам'яті - стек. Так як операції з нею досить повільні, великі дані краще передавати через посилання або покажчики, а для локальних змінних використовувати динамічну пам'ять.

функція як аргумент

Так як ім'я функції саме по собі є покажчиком. то можна визначати і функції, які приймають в якості аргументу інші функції.

аргументи з атрибутом const

Потрібно пам'ятати, що передаючи аргументи за посиланням або вказівником, ми даємо можливість змінити об'єкти всередині функції. В одних випадках це потрібно, в інших немає. Для запобігання зміни аргументу використовується атрибут const.

значення за замовчуванням

C ++ дозволяє задати аргументів функції значення за замовчуванням. Такі аргументи повинні бути в кінці списку. Як значення може бути будь-яка коректне для ініціалізації вираз цього ж типу.

перевантаження функцій

Функцій можна ставити одне і теж ім'я, якщо вони мають різне число аргументів або різні типи аргументів. Це називається перевантаженням функцій. Іноді спільне використання перевантаження і значень аргументів за замовчуванням може привести до конфлікту імен.

Реалізується перевантаження генерацією нового імені функції на основі числа і типів аргументів. У кожного компілятора власний алгоритм генерації імен. Тому при розробки бібліотек для їх переносимості використовують тільки C функції. А по стандарту мови С, до імен функції додається тільки символ підкреслення. Нижче наведено імена функцій, які згенерував компілятор MinGw. Подивитися імена можна в об'єктних файлах (* .obj або * .o)

змінне число аргументів

В С ++ дозволені функції зі змінним числом аргументів. Наприклад, бібліотечна функція консольного виведення printf. Для вказівки змінного числа аргументів служить три крапки. При цьому повинен бути хоча б один іменований аргумент, звичайно визначає число різних неназваних аргументів.

По-друге, для більшості компіляторів спосіб передачі аргументів не можна змінювати (тобто невикористаний атрибути функції подібні __fastcall). Для доступу до неіменованого аргументів служать макроси певні в stdarg.h.

Схожі статті