Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Дочерние функции в простом Си
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Waso
Хочется внутри одной большой функции создавать мелкие, которые бы видели переменные родительской функции как глобальные. Как я понимаю, при вызове функции с параметрами компилятор предварительно копирует эти параметры в отдельные переменные, которые вместе с переменными, обьявленными внутри той функции, образуют ее стек. Это долго и жирно. Хочется создать функцию, при вызове которой в стек заносился бы только адрес места вызова, а переменные брались бы из внешней функции.

Как это сделать?

Как я понимаю, при обращении через указатель, его значение также копируется в стек, такчто это не вариант.
Maddy
Вложенных функций с С IMHO нет( и правильно). Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл, а нужне переменные сделать глобальными и статическими ... Хотя это может породить массу глюков ... Лучше скомпоновать нужные переменные в структуру и тягать через указатель на нее
zltigo
Цитата(Maddy @ Nov 25 2007, 13:28) *
Вложенных функций с С IMHO нет

В некоторых реализациях, например, GCC - бывает. В IAR - нет.
Цитата
Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл...

Обычно лучше совсем наоборот - сделать их inline. Если "мелкие", то и код особо и не разбухнет...
Waso
Ну, некоторые не настолько мелкие чтоб их делать inline. Хотя при наличии достаточного количества свободно места помешать может только жадность программиста. smile.gif

Благодарю за идею со структурами!
Непомнящий Евгений
Цитата(Maddy @ Nov 25 2007, 14:28) *
Вложенных функций с С IMHO нет( и правильно).

А чем они вам не нравятся? Исходя из опыта программирования в дельфях - ИМХО, очень удобная штука.
dxp
Цитата(Waso @ Nov 25 2007, 20:41) *
Благодарю за идею со структурами!

Эта идея практически один к одному описывает реализацию класса в С++. Если ваш компилятор поддерживает плюсы, то используйте классы и все.
alexander55
Цитата(dxp @ Nov 26 2007, 13:05) *
Эта идея практически один к одному описывает реализацию класса в С++. Если ваш компилятор поддерживает плюсы, то используйте классы и все.

+1. Поддерживаю. При использовании плюсов таких вопросов даже не возникает. smile.gif
Николай Z
Цитата(Maddy @ Nov 25 2007, 14:28) *
Вложенных функций с С IMHO нет( и правильно). Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл, а нужне переменные сделать глобальными и статическими ... Хотя это может породить массу глюков ... Лучше скомпоновать нужные переменные в структуру и тягать через указатель на нее


Если использовать статические переменные модуля правильно - то никаких глюков не будет...
И структуры не нужны... Статические переменные видны всем функциям модуля.
Собственно - это реальная аналогия переменных класса в плоском С.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.