44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
1 | |
Функция объявлена с внешним связыванием10.04.2013, 09:33. Показов 1201. Ответов 9
Метки нет (Все метки)
Здравствуйте!
Дело в том, что в одном модуле несколько объявленных функций. Насколько я помню, если программа многофайловая, то функция объявленная (без static) доступна в других файлах. Но почему-то именно эти объявленные функции недоступны. Пришлось прописывать их прототипы. main.c stream и sym это typedef объявления: В чем может быть дело? Читаю Прата у него про это не написано.....
0
|
10.04.2013, 09:33 | |
Ответы с готовыми решениями:
9
Cтатическая функция объявлена, но не определена Функция не объявлена в этой области Функция не объявлена в этой области Каким образом объявлена и определена функция на С |
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
|
10.04.2013, 10:28 | 2 |
Любая переменная для компилятора не видна, пока ее не объявить.
Поэтому и нужно объявлять функции описанные в других файлах.
1
|
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
10.04.2013, 14:20 [ТС] | 3 |
Я же вам говорю. Хорошо, есть два модуля (два файла .c)
Один содержит main, другой какие-то функции Так вот если в другом модуле эти функции объявить, то они в модуле где main будут видны. А у меня вот именно для этой одной функции нет Добавлено через 3 часа 37 минут stream sym ЭТО НЕ ПЕРЕМЕНННЫЕ
0
|
6 / 6 / 6
Регистрация: 19.03.2013
Сообщений: 50
|
|||||||||||
10.04.2013, 15:21 | 4 | ||||||||||
Если вспомним незабвенные уроки по C, то там есть замечательный раздел: "классы памяти", когда вы определяете функцию вне блоков в одном файле многофайловой программы не указав явно класс памяти, ему неявно приписывается класс памяти extrern, что позволяет обращаться к нему из других файлов, но для корректности обращения в файле из которого планируется обращение необходимо написать объявление функции которую вы планируете использовать, а так как функция находится в другом файле т.е. внешняя, к ней надо приписать спецификатор класса памяти extern
к примеру это у нас лежит в util.c
1
|
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
10.04.2013, 18:34 [ТС] | 5 |
Нет, я это понимаю, но почему-то только с одной одной функции не работает, а с остальными работает..
почему ей нужно писать extern а остальным нет.... Добавлено через 2 часа 22 минуты козлы...
0
|
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
|
10.04.2013, 22:14 | 6 |
Такого быть не может!
Объявления функций нужны все. Надо поискать повнимательнее и объявления остальных функций найдутся тоже.
0
|
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
16.04.2013, 06:28 [ТС] | 7 |
zss, смотрите
Использую мингв. В модуле main.c я обращаю к функции print_text, которой находится в модуле func.c Он печатает текст. Я прикрепил проект, не верите, смотрите.
0
|
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
16.04.2013, 06:32 [ТС] | 8 |
ну и что?
в керригане ритчи, ничего про ваше не написано в прата не написано у страуструпа не написано, что вы теперь скажете?
0
|
Модератор
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
|
|
16.04.2013, 06:47 | 9 |
Действительно, компилятор Си, сам придумывает объявление функции,
когда видит ее вызов. В С++ такого нет: поменяйте расширение файлов с "с" на "cpp".
1
|
44 / 44 / 17
Регистрация: 13.09.2012
Сообщений: 196
|
|
16.04.2013, 06:53 [ТС] | 10 |
zss, фуууух, наконец-то все в моей голове уложилось.
Знал бы я эту долбанную деталь раньше, не возникали вопросы. Просто до этого я очень много писал на С++, а потом перешел на Си (хотя обычно у людей происходит наоборот)....
0
|
16.04.2013, 06:53 | |
16.04.2013, 06:53 | |
Помогаю со студенческими работами здесь
10
Как определить, в какой .dll объявлена функция? Ошибка: error C2129: статическая функция объявлена, но не определена Пусть объявлена функция void f(int i,int &j){.}. Параметр j является параметром В каком хедере объявлена функция system/std::system? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |