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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2010, 18:22   #11
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я то вижу, но не ясно как транслятор допускает со скобками объявлять, смысл скобок не ясен теперь
p.s. все таки было сказано верно, С++ - это язык который надо знать, чтобы не допускать ошибки в других языках )
BOBAH13 вне форума Ответить с цитированием
Старый 15.03.2010, 18:24   #12
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2BOBAH13
ты не понимаешь, что такое
char* malloc(); ?
уже ведь все на виду)

Цитата:
p.s. все таки было сказано верно, С++ - это язык который надо знать, чтобы не допускать ошибки в других языках )
к с++ мы еще перейдем, обещаю) это пока что си)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.03.2010, 18:26   #13
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

с -Wall выдает предупреждение что malloc() и strcpy() не объявлены, но все равно работает =))

Добавлено:
Я кажись понял что должно было произойти =)) Мы сами объявили прототип malloc, а компилятор должен найти ее реализация в стандартной библиотеке.
Только malloc должна возвращать void =))
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 15.03.2010 в 18:28.
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 18:30   #14
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
ну древний гцц.... маллок давно уже не билд ин..
чорд. там сверху не могут увидеть объявление функции, а я открываю все карты....
ладно, вопрос такой. почему, объявив свою функцию маллок, как char* malloc(); мы все равно можем использовать ее, как char* a = malloc(128)? считайте, что объявление обязательно
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.03.2010, 18:38   #15
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

А почему не должны моч? =)
В нашем варианте malloc возвращает указатель на char и мы записываем его в переменную a, которая тоже является указателем на char, т.е. обычной Си-строкой. Это эквивалентно тому, как делают обычно:
Код:
char* a = (char*)malloc(128 * sizeof(char));
тут имеется ввиду стандартная malloc()
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 18:47   #16
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
потому что стандартная функция malloc возвращает void*, и имеет входящий параметр. и чтобы использовать стандартную функцию маллок, нужно подключить хидер с ее объявлением. (попробуй на четвертом гцц например, пошлет далеко и надолго. просто имеется ряд либсишных функций, о которых компиль знает, и не требует их объявления до использования. маллок более не является такой функцией, поэтому я ее и выбрал в качестве примера).
а мы же объявили свой прототип маллока, но так же вызываем его с параметром. почему это компилируется?)
если не нравится маллок, могу привести пример с user-defined функцией, неважно. просто думал она никогда не была build-in
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.03.2010, 18:59   #17
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Ну если мы объявляем функцию без входных параметров, по стандарту Си это значит что о параметрах этой функции ничего не известно и мы можем передать ей любые параметры (на сколько я помню).
Для меня теперь остался один вопрос, как компилятор находит реализацию malloc, ведь память как-то выделяется, да и если мы попытаемся использовать функцию для которой есть прототип, но нет реализации - получим ошибку линковки
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 19:02   #18
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
Цитата:
по стандарту Си это значит что о параметрах этой функции ничего не известно и мы можем передать ей любые параметры (на сколько я помню).
именно) для меня всегда была тонкая грань между void foo() и void foo(void)
а почему это работает. с точки зрения компилятора мы ничего не нарушили. лишний параметр не проблема. и тут вступает линковщик, которому абсолютно пофиг на наши параметры и тип возвращаемого значения, но т.к libc линкуется по умолчанию, он находит ее реализацию в данной библиотеке по имени)
а вот если смотреть на все это в самом первом примере, то и не сразу дойдет (я на второй день только осилил. препод по сям сходу тож не смог)

пс. если кому-то интересно, откуда я это взял - http://www.cise.ufl.edu/~manuel/obfuscate/intrp.c. have a fun)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 15.03.2010 в 19:05.
pproger вне форума Ответить с цитированием
Старый 15.03.2010, 19:12   #19
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Угу, именно поэтому я всегда говорю что не хорошо писать
Код:
int main()
{...}
Нужно обязательно дописывать void.
Кстати по стандарту C++ эта конструкция абсолютно верна, т.к. там подразумевается void, если отсутствует список аргументов.
Различия весьма тонкие, за то интересные =))
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 20:28   #20
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2BOBAH13
ты не понимаешь, что такое
char* malloc(); ?
уже ведь все на виду)

к с++ мы еще перейдем, обещаю) это пока что си)
1. объявление функции char* malloc(); - без параметров
2. malloc(128); - как видим передается один аргумент типа int наверняка.

Спрашивается, где проверки синтаксиса в таком случае ?
BOBAH13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
...... и опять С++ Chaynik011091 Помощь студентам 5 24.06.2009 20:46
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08
опять кодировка) mager JavaScript, Ajax 1 22.05.2008 16:41
Опять Chart BigBB Помощь студентам 32 29.04.2008 22:41
Опять ListBox Rahim1993 Общие вопросы Delphi 3 15.01.2008 20:21