Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 24.11.2006, 08:06  
EVGENIY1962
Гражданин KAZUS.RU
 
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
EVGENIY1962 на пути к лучшему
По умолчанию СИ

Сколь корректным является такая запись при передаче параметров?Мне никогда подобное не встречалось а сделать по другому не получилось.
main()
{
char a,s,d;
func(a,s,d);
}

void func(char &a,char &s,char &d)
{

}
Реклама:
EVGENIY1962 вне форума  
Непрочитано 24.11.2006, 14:22  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: СИ

Сообщение от EVGENIY1962
Сколь корректным является такая запись при передаче параметров?Мне никогда подобное не встречалось а сделать по другому не получилось.
main()
{
char a,s,d;
func(a,s,d);
}

void func(char &a,char &s,char &d)
{

}
Непонятно. Если вам нужно просто передать параметр, объявите функцию как

void func(char a,char s,char d)

Если нужно передать ссылки, то объявите как
void func(char *a,char *s,char *d)
а вызывайте как
func(&a,&s,&d)
nml вне форума  
Непрочитано 24.11.2006, 14:44  
Snixers
Прописка
 
Регистрация: 14.02.2006
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Snixers на пути к лучшему
По умолчанию

Это корректно! В данном случае ты передаёш аргументы по ссылке.
пример:
void fn(int &arg)
{
arg=10;
}
void parent(void)
{
int n=0;
fn(n)
}
Теперь значение n равно 10.
Snixers вне форума  
Непрочитано 25.11.2006, 12:41  
Fallout
Частый гость
 
Регистрация: 14.07.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
Fallout на пути к лучшему
По умолчанию

Сообщение от Snixers
Это корректно! В данном случае ты передаёш аргументы по ссылке.
пример:
...
Такая запись коректна только для Си++ , а не для Си. Правдо не знаю может для автора это одна хрень ,но если он имел ввиду именно Си то не коректно.
Fallout вне форума  
Непрочитано 25.11.2006, 14:09  
Snixers
Прописка
 
Регистрация: 14.02.2006
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
Snixers на пути к лучшему
По умолчанию

Наверное я неправ прошу прощения это действительно С++.Я с него начинал и по инерции считаю Си таким же но без создания обьектов(но со структурами).Открыл справочник Кернигана "Язык программирования Си" стр152 глава5.2 Указатели и аргументы функций там всё написано
Snixers вне форума  
Непрочитано 25.11.2006, 15:54  
Fallout
Частый гость
 
Регистрация: 14.07.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
Fallout на пути к лучшему
По умолчанию

Имел ввиду автора топика +)

Честно сказать не знаю что там на той транички в этой книги но для Си ... коректна запись только вида:


int c = 66;
foo( &c );

foo( int *a){
*a = 44;
}

В Си++ уже можно было как раз как ты и описал делать передачу ссылки на параметр таким от обазом заваулируя для удобства передачи параметра и работы с ним. Так же ак я помню так можно делать в Си компиляторе LCC-WIN32 с опцией которая расширяет синтаксис Си ,но при этом нписаный код нельзя будет откомпилировать в любом другом стандартезированом Си компиляторе.

п.с: дискутировать на пример различия Си и Си++ думаю можно довольнатаки долго отличие только наличием ООП в Си++ тут дело не ограничиться(тежи темплейты, перугрузка функций и операторов, и вот такая вот преславутая передача параметров )... Но это уже мне кажеться за рамками вопроса. Сам лично предпочитаю ANSI C компиляторы.
Fallout вне форума  
Непрочитано 28.11.2006, 07:30  
EVGENIY1962
Гражданин KAZUS.RU
 
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
EVGENIY1962 на пути к лучшему
По умолчанию

1 это CCS-PICC
2 Из-за чего возникла такая запись:

Если нужно передать ссылки, то объявите как
void func(char *a,char *s,char *d)
а вызывайте как

func(&a,&s,&d) все правильно я так и делал
продолжим функцию
func(char *a,char *s,char *d)
{*a=0;*S=0;*d=0;}все будет правильно и функция обнулит
содержимое a,s,d
но мне было надо
#asm
clrf a
clrf s
clrf d
#endasm
а транслятор сотворил из a,s,d чтото похожее на указатель на указатель,и никаким другим способом передать адреса переменных я не смог.
EVGENIY1962 вне форума  
Непрочитано 28.11.2006, 12:56  
Fallout
Частый гость
 
Регистрация: 14.07.2006
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
Fallout на пути к лучшему
По умолчанию

Тут се дело уже в твоем компиляторе =) У разных компиля,торов разное представление о оптимизации ии представления твоего иходника в опкодах.... Это первое второе все таки что хочеться сказать у тебя же не просто код А ФУНКЦИЯ! Значит надо понимать что параметры которые передаешь сохраняеться где либо ещё например стек... и вот код функции работает со значениями из стека... и од функции не может рбаотать напрямую с аргументами которые ты туда передал ибо
1) Мягко говоря логично
2) Функция о них ничего не знает =)


Когда ты передал эти три параметра а именно адреса на переменные в функцю... то в "стеке" (почему пишу в кавычках слово СТЕК ибо в разных компиляторох он по разному делаеться и часто бывает что реальному стеку не имеет никакого отношения например потому что в контроллере его может и не быть под такие вот дела.)
будет три адреса этих переменных..... далее компилятор то делает конечно по логике считавает адрес из стека и помещает по нему в твоем случаи 0... то бишь минимум 2 опкода на операцию.... вот
твоем случаи как ты написал на асме.... если этот код будет в функции он просто напрото указатели указывающие на адрес твоих переменых сдеает нулевыми =) и все


Вот так что у тебя два пути решения:
1) Не удивляться почему коду генериться больше ем ты думал потому что так и длжно быть (можешь попробовать сделать функцию inline и может компилятор тогда подругому сделает)
2) так и написать вставку на АСМе +)) без функций
Fallout вне форума  
Непрочитано 15.02.2008, 00:59  
arkbox
Временная регистрация
 
Регистрация: 05.06.2005
Сообщений: 84
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
arkbox на пути к лучшему
По умолчанию Re: СИ

Сообщение от nml
Сообщение от EVGENIY1962
Сколь корректным является такая запись при передаче параметров?Мне никогда подобное не встречалось а сделать по другому не получилось.
main()
{
char a,s,d;
func(a,s,d);
}

void func(char &a,char &s,char &d)
{

}
Непонятно. Если вам нужно просто передать параметр, объявите функцию как

void func(char a,char s,char d)

Если нужно передать ссылки, то объявите как
void func(char *a,char *s,char *d)
а вызывайте как
func(&a,&s,&d)
А как в функцию передать порт процессора? Теоретически я понимаю, что надо вытащить адрес бита, передать его в функцию и научить функцию по адресу читать нужный бит, т.е. создать указатель на бит. Но вот как это записать??
arkbox вне форума  
Непрочитано 15.02.2008, 04:39  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Запарился искать по страничкам
Вот здесь предлагали https://kazus.ru/forum/topic_7108-0-asc-180.html ,я пробовал в CCS все работает
CERGEI1982 вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 13:33.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot