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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2010, 17:44   #1
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию опять язык Си

на днях разбирал кой какую программулину (обфусцированный си код), встретил одну очень интересную технику.

Код:
typedef char* A;

A a, malloc();

int main()
{
	a = malloc(128);
	strcpy(a, "hello world");
	return 0;
}
код именно такой, никаких инклудов и т.п. вопрос. почему это работает?) до меня суть не сразу дошла, решил, что кому нить тут это будет интересно. стандарт - ANSI C. (насчет студии чур даже не заикаться)

пс. код немного был подправлен
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 в 17:59.
pproger вне форума Ответить с цитированием
Старый 15.03.2010, 17:54   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Все ясно. Но не ясен смысл этой вставки
Код:
, malloc()
Даже если синтаксис это допускает, все равно не вижу скрытого смысла
BOBAH13 вне форума Ответить с цитированием
Старый 15.03.2010, 18:01   #3
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2BOBAH13
ну скомпиль в компиляторе, поддерживающем ansi c, смысл вставки станет ясным) я не могу напрямую сказать, иначе все ясно станет. а когда поймешь, зачем эта вставка (вставкой ли это называть), подумай, почему это работает)
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:02   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Судя по всему, в этой строчке
Код:
a = malloc(128);
компилятор все-таки вызывает стандартную функцию malloc(), хоть библиотека stdlib и не подключена, т.к. такой код тоже работает:
Код:
typedef char* A;

int main()
{
	A a;
	a = malloc(128);
	strcpy(a, "hello world");
	return 0;
}
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 18:03   #5
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
в студии компилил?
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:06   #6
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

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

на такой код
Код:
typedef char* A;

int main()
{
	A a;
	a = malloc(128);
	strcpy(a, "hello world");
	return 0;
}
gcc должен был ругнуться) сказав, что malloc не объявлена. А какая версия гццов?
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:17   #8
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Да, по идеи должен, но не ругается =) Даже с флагом -ansi пробовал - все нормально. GCC версия 3.4.5
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 15.03.2010, 18:18   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
A a, malloc();
Был не ясен этот код.
Можете сообщить что он делает ? я просто совершенно не вижу логики в этом.
BOBAH13 вне форума Ответить с цитированием
Старый 15.03.2010, 18:19   #10
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
древняя) скомпиль с опцией -Wall. скорее всего маллок тут тоже build-in.

2BOBAH13
ну а так?)
Код:
char* a;
char* malloc();
?
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:22.
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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