Перейти к содержанию
    

Дочерние функции в простом Си

Хочется внутри одной большой функции создавать мелкие, которые бы видели переменные родительской функции как глобальные. Как я понимаю, при вызове функции с параметрами компилятор предварительно копирует эти параметры в отдельные переменные, которые вместе с переменными, обьявленными внутри той функции, образуют ее стек. Это долго и жирно. Хочется создать функцию, при вызове которой в стек заносился бы только адрес места вызова, а переменные брались бы из внешней функции.

 

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

 

Как я понимаю, при обращении через указатель, его значение также копируется в стек, такчто это не вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Maddy

Вложенных функций с С IMHO нет( и правильно). Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл, а нужне переменные сделать глобальными и статическими ... Хотя это может породить массу глюков ... Лучше скомпоновать нужные переменные в структуру и тягать через указатель на нее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вложенных функций с С IMHO нет

В некоторых реализациях, например, GCC - бывает. В IAR - нет.

Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл...

Обычно лучше совсем наоборот - сделать их inline. Если "мелкие", то и код особо и не разбухнет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, некоторые не настолько мелкие чтоб их делать inline. Хотя при наличии достаточного количества свободно места помешать может только жадность программиста. :)

 

Благодарю за идею со структурами!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вложенных функций с С IMHO нет( и правильно).

А чем они вам не нравятся? Исходя из опыта программирования в дельфях - ИМХО, очень удобная штука.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Благодарю за идею со структурами!

Эта идея практически один к одному описывает реализацию класса в С++. Если ваш компилятор поддерживает плюсы, то используйте классы и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Эта идея практически один к одному описывает реализацию класса в С++. Если ваш компилятор поддерживает плюсы, то используйте классы и все.

+1. Поддерживаю. При использовании плюсов таких вопросов даже не возникает. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вложенных функций с С IMHO нет( и правильно). Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл, а нужне переменные сделать глобальными и статическими ... Хотя это может породить массу глюков ... Лучше скомпоновать нужные переменные в структуру и тягать через указатель на нее

 

Если использовать статические переменные модуля правильно - то никаких глюков не будет...

И структуры не нужны... Статические переменные видны всем функциям модуля.

Собственно - это реальная аналогия переменных класса в плоском С.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...