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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Глупые вопросы по типам данных
Spider
сообщение Apr 25 2007, 20:51
Сообщение #1


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Тока не смейтесь smile.gif
А что означает static & violate (или как-то так) объявление переменных в WinAVR?
И что ещё бывает?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Apr 25 2007, 21:58
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Ой ужос!!!
И куда ж в эмбеддеры без этого? Фундамент блин.
volatile - говорит о том, что данные могут изменится в любой момент и следовательно данная переменная не подлежит оптимизации (например не выносится за пределы цикла, или ее многократный вызов не сокращается до однократного)ю Незаменимо в описании железа - всяческих портов и регистров статуса.

static сложнее.

Если применяется к локальной переменной в функции - значит ее значение сохраняется после выхода из функции. Очень хорош например для счетчиков событий в прерываниях.

Еслли применяется к переменной за пределами функции или к функции - значит область видимости ограничевается данным файлом.
Очень часто встречается связка static inline - для определения инлайновых функций прямо в хидер файле. Получается единственное определение функции при многократном включении файла в проект.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Apr 25 2007, 23:23
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



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


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 26 2007, 00:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(beer_warrior @ Apr 25 2007, 22:58) *
Очень часто встречается связка static inline - для определения инлайновых функций прямо в хидер файле. Получается единственное определение функции при многократном включении файла в проект.


static inline - это уже плюсы. inline подставляемый статический метод класса. Для глобальных функций использовать очень даже не нужно. Получится совсем наоборот: в каждм модуле будет сгенерирована своя независимая копия inline функции smile.gif


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 26 2007, 07:20
Сообщение #5


Adept
******

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



Цитата(Oldring @ Apr 26 2007, 04:10) *
static inline - это уже плюсы.

В GCC, к которому относится упомянутый выше WinAVR, имется расширение для С в виде inline, т.ч. это слово там валидно и в С режиме.

Цитата(Oldring @ Apr 26 2007, 04:10) *
inline подставляемый статический метод класса.

Насколько можно судить из:

Цитата
Очень часто встречается связка static inline - для определения инлайновых функций прямо в хидер файле. Получается единственное определение функции при многократном включении файла в проект.


речи тут ни о каких классах вообще нет. Статические функции-члены классов - это несколько из другой оперы.

Кстати, в С++ не бывает статических методов класса. Методы всегда нестатические.

Цитата(Oldring @ Apr 26 2007, 04:10) *
Для глобальных функций использовать очень даже не нужно. Получится совсем наоборот: в каждм модуле будет сгенерирована своя независимая копия inline функции smile.gif

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


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


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(dxp @ Apr 26 2007, 10:20) *
Кстати, в С++ не бывает статических методов класса. Методы всегда нестатические.

А что в C++ появились методы класса ?
Или речь идет о каком либо расширении языка
как в C++ Builder ?
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 26 2007, 09:53
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Shamil @ Apr 26 2007, 09:45) *
А что в C++ появились методы класса ?
Или речь идет о каком либо расширении языка
как в C++ Builder ?


Всегда были.
http://en.wikipedia.org/wiki/Method_(computer_science)


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
Shamil
сообщение Apr 26 2007, 10:18
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(Oldring @ Apr 26 2007, 12:53) *

Если под методами подразумевались функции-члены класса,
то с чего бы это им не быть статическими ?
Статические функции (члены классы) используются довольно часто.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Apr 26 2007, 10:19
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
static inline - это уже плюсы. inline подставляемый статический метод класса.


Цитата
В GCC, к которому относится упомянутый выше WinAVR, имется расширение для С в виде inline, т.ч. это слово там валидно и в С режиме.


Если быть точным inline описан в стандарте С99, вмеcте с другими заимствованиями из плюсов.

C99 introduced several new features, many of which had already been implemented as extensions in several compilers:
-Inline functions
-Variables can be declared anywhere (as in C++), rather than only after another declaration or the start of a compound statement
-Several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers
-Variable-length arrays
-Support for one-line comments beginning with //, as in BCPL or C++


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 26 2007, 10:24
Сообщение #10


Adept
******

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



Цитата(beer_warrior @ Apr 26 2007, 14:19) *
Если быть точным inline описан в стандарте С99, вмеcте с другими заимствованиями из плюсов.

Я к том, что в GCC это расширение (как и некоторые другие) было до С99. Вроде так.


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


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Shamil @ Apr 26 2007, 11:18) *
Если под методами подразумевались функции-члены класса,
то с чего бы это им не быть статическими ?
Статические функции (члены классы) используются довольно часто.


Ну так в плюсах традиционно слова "член" и "метод" полные синонимы. Если же претендовать на формальную точность, конечно, нужно говорить про методы объекта и методы класса. В этом смысле статические члены класса являются методами самого класса, а нестатические - методами объектов этого класса. Так как в плюсах вообще говоря нет динамически создаваемых классов, и классы синтаксически не эквивалентны объектам, такая интерпретация не может вызвать противоречия.

Цитата(beer_warrior @ Apr 26 2007, 11:19) *
Если быть точным inline описан в стандарте С99, вмеcте с другими заимствованиями из плюсов.


Признаюсь, я никогда не пользовал C99, считая, что если уж использовать нововведения по сравнению с первым ANSI C стандартом - то плюсы ничем не хуже. Не думаю, что в C99 интерпретация static inline префикса у функции будет чем-то отличаться от плюсов. То есть inline-подставляемая статическая функция. При определении функции в хедере вещь бесполезная и даже вредная. Ну а в модуле, конечно, можно использовать, учитывая особенности традиционных стилей кодирования в C.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 26 2007, 10:39
Сообщение #12


Adept
******

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



Цитата(Shamil @ Apr 26 2007, 12:45) *
А что в C++ появились методы класса ?
Или речь идет о каком либо расширении языка
как в C++ Builder ?

Никаких расширений. Методы в С++ - это чисто терминология ООП, т.е. методы в нем - это функции-члены, которые могут быть переопределены в классах-потомках в контексте полиморфизма. Иными словами, в С++ методы - это виртуальные фукнции. Т.е. нестатические функции-члены классов делятся на обычные и виртуальные - вот эти виртуальные и являются методами. А все остальные - не методы.

Статические функции-члены классов - это вообще отдельная песня. Эти функции к самим объектам класса отношение имеют весьма опосредованное (для того, чтобы из статической функции-члена класса получить доступ к полям класса, надо явно указывать конкретный объект, к которому производится обращение). Фактически, это обычные глобальные фукнции, у которых область видимости ограничена классом, к которому они принадлежат, и которые имеют доступ к закрытым (и защищенным) членам своего класса. Виртуальными эти функции никак не могут быть, следовательно в С++ термин "статический метод" есть нонсенс.


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


Частый гость
**

Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(dxp @ Apr 26 2007, 13:39) *
Никаких расширений. Методы в С++ - это чисто терминология ООП, т.е. методы в нем - это функции-члены, которые могут быть переопределены в классах-потомках в контексте полиморфизма. Иными словами, в С++ методы - это виртуальные фукнции. Т.е. нестатические функции-члены классов делятся на обычные и виртуальные - вот эти виртуальные и являются методами. А все остальные - не методы.

Теперь понятно, спасибо.
Go to the top of the page
 
+Quote Post
Oldring
сообщение Apr 26 2007, 10:50
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



Цитата(Shamil @ Apr 26 2007, 11:43) *
Теперь понятно, спасибо.


Не верьте этому разделению.


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 26 2007, 11:23
Сообщение #15


Adept
******

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



Цитата(Oldring @ Apr 26 2007, 14:37) *
Ну так в плюсах традиционно слова "член" и "метод" полные синонимы.

Это согласно какой же традиции С++? Огласите.

Цитата(Oldring @ Apr 26 2007, 14:37) *
Если же претендовать на формальную точность, конечно, нужно говорить про методы объекта и методы класса.

Фунции-члены класса != методы класса. См пост выше.

Цитата(Oldring @ Apr 26 2007, 14:37) *
В этом смысле статические члены класса являются методами самого класса, а нестатические - методами объектов этого класса.

Код
class A
{
public:
    ...
    static f();
};

A a;
...
a.f();  // вызвали статическую функцию-член класса путем обращения к объекту


Как же так, статическую функцию-член применили не к классу, а к объекту?! Она же, типа, следуя "формальной точности", принадлежит классу, а не к объекту.


Цитата(Oldring @ Apr 26 2007, 14:37) *
То есть inline-подставляемая статическая функция. При определении функции в хедере вещь бесполезная и даже вредная. Ну а в модуле, конечно, можно использовать, учитывая особенности традиционных стилей кодирования в C.

inline функция должна быть полностью определена перед ее использованием. Удобнее всего ее определение поместить в заголовочный файл, что и является общепринятой практикой в С++.

P.S. В С++ используется термин "единица компиляции", а не модуль. Модуль - это из других языков.


Цитата(Oldring @ Apr 26 2007, 14:50) *
Не верьте этому разделению.

Bjarne Stroustrup - The C++ Programming Language 3rd Edition:

Цитата
12.2.6 Virtual Functions [derived.virtual]
...
A virtual member function is sometimes called a method.

Теперь сами решите кому верить - Бьерну Страустурпу (автору языка С++) или отдельным самоуверенным товарисчам.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


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


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