Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 12:00   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию Функции си в с++

Допустим у меня есть сишная функция, которая нормально компилируется компилятором си.
Код:
void foo() {
  auto void bar() {
    printf("work");
  }
  bar();
}

int main() {
  foo();
  return 0;
}
А если я хочу скомпилировать этот код как программу с++. Компилятор говорит что это фигня:
D:\projects\Untitled1.cpp:2: error: a function-definition is not allowed here before '{' token
D:\projects\Untitled1.cpp:5: error: 'bar' was not declared in this scope
the_deer_one вне форума Ответить с цитированием
Старый 05.03.2011, 12:03   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну, точно не знаю, но вот по текущим стандартам С++ ключевое слово auto имеет совершенно другое значение - автоматическое определение типа, т.е.
Код:
int main()
{
     auto myVar = 10; //myVar будет иметь тип int
     auto dVar = 10.0; //dVar будет иметь тип double
     // и т.д.
     return 0;
}
_-Re@l-_ вне форума Ответить с цитированием
Старый 05.03.2011, 13:47   #3
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

не знаток тонкостей с, но в ++ нельзя объявлять вложенные функции
alex_x_x вне форума Ответить с цитированием
Старый 05.03.2011, 15:17   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

она даже как extern не компилируется
error C2601: 'bar' : local function definitions are illegal
onewho вне форума Ответить с цитированием
Старый 05.03.2011, 17:31   #5
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

_-Re@l-_ это в новом стандарте так можно делать. Так как он пока не сильно широко распространен не запутывай человека. the_deer_one зачем функцию сделали auto? Не сильно понял.
profi вне форума Ответить с цитированием
Старый 05.03.2011, 18:42   #6
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

profi
Цитата:
the_deer_one зачем функцию сделали auto? Не сильно понял.
Она так в исходниках груба определена, как auto. Вот я и написал её так. А что даёт слово auto, написанное перед функцией?
the_deer_one вне форума Ответить с цитированием
Старый 05.03.2011, 19:05   #7
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Переменные с auto объявляются только внутри функции или блока. Их нельзя объявить вне блока. Переменные с этим спецификатором автоматически создаются и уничтожатся. Для функций - первый раз такое вижу .
Цитата:
Она так в исходниках груба определена
Можно ссылку?

Последний раз редактировалось profi; 05.03.2011 в 19:08.
profi вне форума Ответить с цитированием
Старый 05.03.2011, 19:42   #8
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

profi
Цитата:
Можно ссылку?
Можно сразу исходник.

функции:
auto int iterate_disk (const char *disk_name);
auto int iterate_partition (grub_disk_t disk, const grub_partition_t partition);
Вложения
Тип файла: txt device.c.txt (3.3 Кб, 128 просмотров)
the_deer_one вне форума Ответить с цитированием
Старый 05.03.2011, 19:54   #9
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

profi, auto не меняет смысла в си компилится, в ++ нет
так и не должно ведь
alex_x_x вне форума Ответить с цитированием
Старый 05.03.2011, 19:54   #10
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

profi, этот стандарт поддерживают почти все компиляторы, и, если вы используете компилятор сновым стандартом, в нём auto имеет абсолютно другое значение.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Программа на СИ++, используя функции работы с файлами и функции <string.h> Аня Popova Фриланс 9 13.09.2010 15:52
Функции в си. Вывод двумерного массива из функции. Evgen51 Общие вопросы C/C++ 9 13.05.2010 03:59
Чем отличается описание функции от определения функции в С++? Go6a Помощь студентам 4 18.07.2009 18:07
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57