реклама на сайте
подробности

 
 
> Дочерние функции в простом Си, Работа с переменными без передачи в отдельный стек
Waso
сообщение Nov 25 2007, 10:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



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

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

Как я понимаю, при обращении через указатель, его значение также копируется в стек, такчто это не вариант.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Maddy
сообщение Nov 25 2007, 11:28
Сообщение #2


Участник
*

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335



Вложенных функций с С IMHO нет( и правильно). Как _тупое решение в лоб_ покидать все мелкие функции в отдельный файл, а нужне переменные сделать глобальными и статическими ... Хотя это может породить массу глюков ... Лучше скомпоновать нужные переменные в структуру и тягать через указатель на нее
Go to the top of the page
 
+Quote Post
zltigo
сообщение Nov 25 2007, 11:51
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Maddy @ Nov 25 2007, 13:28) *
Вложенных функций с С IMHO нет

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

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Waso
сообщение Nov 25 2007, 14:41
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



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

Благодарю за идею со структурами!
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Nov 26 2007, 07:46
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Maddy @ Nov 25 2007, 14:28) *
Вложенных функций с С IMHO нет( и правильно).

А чем они вам не нравятся? Исходя из опыта программирования в дельфях - ИМХО, очень удобная штука.
Go to the top of the page
 
+Quote Post
dxp
сообщение Nov 26 2007, 10:05
Сообщение #6


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Waso @ Nov 25 2007, 20:41) *
Благодарю за идею со структурами!

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alexander55
сообщение Nov 26 2007, 10:35
Сообщение #7


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



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

+1. Поддерживаю. При использовании плюсов таких вопросов даже не возникает. smile.gif
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Nov 26 2007, 10:35
Сообщение #8


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



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


Если использовать статические переменные модуля правильно - то никаких глюков не будет...
И структуры не нужны... Статические переменные видны всем функциям модуля.
Собственно - это реальная аналогия переменных класса в плоском С.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 08:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016