![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Процессор по не понятным мне причинам не работает с функцией
если ее задекларировать так:
а записать в .h файл static и в .c файл компиллятор не дает - ругается... Какие мысли? Спасибо. Это сообщение отредактировал(а) cardinal - 31.10.2005, 18:26 -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
| setq |
|
|||
|
Unregistered |
кажется статическая функция - это та, которую не видно из других файлов .c.
до сих пор пытаюсь найти отличия. :-D |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Стормозил.
p.s. Сверху подправил... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
setq
О да))) Статическая может быть членом класса, но из статической ф-ции нельзя получить объект который вызвал её, так как ей не передается указатель this; static объявляется при объявлении а не определении. Это сообщение отредактировал(а) Neitron - 31.10.2005, 18:29 -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Ну у меня в .h (и больше нигде) сидит
Это что не определение? И так работает, а по другому ни в какую. У меня Си (никаких классов и this не испольсзую)... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
не знаю, как у других, а у меня серьезные проблемы с пониманием этой фразы...
что именно записывается в эти файлы, что вызывает ругательства компилятора? и еще один вопрос: что именно нужно? т.к. вполне может оказаться, что static здесь совсем не нужен... -------------------- qqq |
||||
|
|||||
| cardinal |
|
||||||||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Процессор не стартует и все...
Хочу чтобы в .h файле сидело
а в .с
Вышеописанное и вызывает ошибки... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||||||||
|
|||||||||||
| maxim1000 |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ага... пока писал, появилось... директива #include работает очень просто: вставляет содержимое указанного файла туда, где написана к чему это приводит: в каждом c-файле, в котором написано #include "qqq.h" появляется своя функция PAInit, т.е. куча функций с одинаковыми именами... для того, чтобы разрешить конфликт этих имен, можно написать static перед определением, это приведет к тому, что область видимости каждой такой функции сузится (изначально она - весь проект) до исходного файла, в котором она определена (т.е. в котором был написан #include) в большинстве ситуаций это - не то, что нужно... это приводит к жуткому и ненужному разрастанию кода+перекомпиляция всех c-файлов, использующих эту функцию более подходящий и общепринятый подход такой: функция определяется в одном из c-файлов (без всяких static) в тех файлах, в которых она нужна, она объявляется - т.е. просто void PAInit(); обычно это даже выносят в h-файл и подключают его... Добавлено @ 18:44
ну, в принципе, так и должно быть извиняюсь за нескромный вопрос: а зачем static? какие есть причины для его использования? -------------------- qqq |
||||||
|
|||||||
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
в .h файле
а в .с
не проходит. То есть компилируется, но не работает. Почему на знаю... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
А ты ф-цию вызываешь?
-------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
static функции можно использовать только в тех единицах трансляции, где они определены. Если ты хочешь вызывать такую функцию из более чем из одного *.c файла помести ее в хедер вместе с определением и подключай во все .c файлы.
PS В том и смысл static, что у них внутренняя линковка, и из других единиц трансляции их вызывать нельзя. --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| cardinal |
|
||||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Кто-то меня написал. Я пытаюсь тоже понять зачем. Один чел тут сказанул что-то типа этот static в данном месте означает нечто иное чем то что писано в ANSI. Добавлено @ 18:51
В этом и загвоздка. Так и было сделано. Я решил поделить по разным файлам и проц перестал запускаться вообще Neitron, на глупые вопросы не отвечаю... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Сам сейчас мучаюсь с этими долбанными AVR --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 12 |
Проверьте, вызывается ли эта функция. Просто в ней инфертируйте какую-нибудь ножку порта, и гляньте осциллографом. Вполне возможно, что дело вовсе не в этой функции.
Может быть, что-то другое жить мешает. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
ннда... уже повод погрустить... тогда несколько вопросов: 1. в скольких файлах используется эта функция? 2. какие отличия в ассемблерном листинге? в принципе, когда все подходит настолько близко к процессору, всплывают разные вопросы: например, в каком месте памяти находится static и доступен ли этот блок во время старта а то при расположении функции в h-файле со static она появляется в каждом c-файле, и кто бы не вызывал ее из этого файла, будет использовать "родную" для этого файла копию этой функции, а значит, скорее всего, она будет располагаться в том же блоке памяти, в котором исполняемый в данный момент код, а значит, этот блок памяти доступен... -------------------- qqq |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |