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

Модератор: Модераторы разделов

promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

Друзья! Буду вам очень благодарен, если поможете мне разобраться в этом вопросе. Смотрите: я написал функцию a

Код: Выделить всё

void a () {
}


Теперь я написал функцию b, использующую функцию a

Код: Выделить всё

void b () {
  void a () {
  }
  a ()
}


А теперь я написал функцию с, использующую как функцию а, так и функцию b

Код: Выделить всё

void c () {
  void a () {
  }
  void b () {
   void a () {
   }
   a ()
  }
  a ();
  b ();
}


Получается, что в функции с текст функции a повторяется два раза. Пока на этом остановимся. Такой подход к делу правилен- все функции работают. Но грамотен ли он? Профессионален ли? Допустит ли специалист, чтобы текст какой-оибо функции повторялся в его программе несколько раз?- Я только учусь программировать и хочу сразу правильно научиться, чтобы потом от приобреённых привычек не отвыкать.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

Это вообще неправильно. Ты не понял отличия вызова функции от объявления функции. Объявить функцию надо всего один раз, затем ты уже будешь вызывать ее без повторного объявления. То, что ты сделал, называется вложенным объявлением, которое используется крайне редко и в основном в хитрых хаках (как замена lambda-функциям, например).
Правильно будат так:

Код: Выделить всё

void a()
{
}
void b()
{
    a(); // вызов функции
}
void c()
{
    a();
    b();
}


Советую еще раз внимательно перечитать главу о функциях с самого начала.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Zeus »

С ума сойти...

promov
У тебя цель-то какая? Что от функций требуется?
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

Да, да, да. Примерно так я и думал. А теперь следующий вопрос: смотри, функция b у меня используется во многих программах и я её туда вставляю. И всякий раз перед тем, как её использовать (cм. название темы) я должен пересмотреть её текст и убедиться в том, что функция b не содержит в себе вызовов других разработанных мной функций. Так ведь? Потому, что если функция b содержит в себе такие вызовы, значит, я должен и эти функции перенести в новую программу вместе с функцией b.
"Перенос" (не знаю правильно или нет употребляю слово)сам по себе не неудобен. А вот пересматривать всякий раз функции перед их использованием- это мне не нравится. А как другие поступают в таких ситуациях?

Если кому-то трудно абстрагироваться, я могу привести реальные примеры небольших понятных рабочих программ, где возникла такая ситуация.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

А, я понял. Ты еще дочитаешь до этого момента - это называется многофайловые программы и условная компиляция. Не заморачивайся пока, пиши, что есть, а как дойдешь - сразу станет понятно.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

Хорошо, спасибо.

Liksys писал(а):
18.11.2007 17:48
многофайловые программы и условная компиляция.
Я запомнил!
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
s0urce
Сообщения: 321
ОС: Arch Linux + WinXP

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение s0urce »

promov, ты что решил не ограничиваться своей концепцией буферизации и придумать всё программирование самостоятельно? флаг - в руки.
Нормальные люди всё же читают книги прежде чем программировать, чего и тебе желаю! глядишь узнаешь что такое инкапсуляция, заголовочные файлы, пространства имён, etc.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

s0urce писал(а):
18.11.2007 17:51
promov, ты что решил не ограничиваться своей концепцией буферизации и придумать всё программирование самостоятельно? флаг - в руки.
Нормальные люди всё же читают книги прежде чем программировать, чего и тебе желаю! глядишь узнаешь что такое инкапсуляция, заголовочные файлы, пространства имён, etc.

А у меня получается, хе-хе, несмотря на Ваше ёрничанье- программы-то рабочие. Да, рабочие... И не громоздкие ничуть. А книги мы разные читаем, наверное, да. У меня в двух книгах подобные задания и ни слова ни полслова о заголовочных файлах и пространстве имён до этих заданий.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
s0urce
Сообщения: 321
ОС: Arch Linux + WinXP

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение s0urce »

программы-то рабочие. Да, рабочие... И не громоздкие ничуть.
Ну так всё впереди, с Вашими талантами Вы возможно станете первым человеком, которому удастся написать громоздкую, не работающую _учебную_ программу...

А книги мы разные читаем, наверное, да.
Это точно, то ли Вы книги не те выбираете, то ли они у Вас для мебели используются... Вы же говорили, что уже 3-ю книгу по С++ читаете, так вот: "Не верю!"
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

s0urce, человек учится, будь снисходительнее.
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

s0urce писал(а):
18.11.2007 18:46
программы-то рабочие. Да, рабочие... И не громоздкие ничуть.
Ну так всё впереди, с Вашими талантами Вы возможно станете первым человеком, которому удастся написать громоздкую, не работающую _учебную_ программу...

А книги мы разные читаем, наверное, да.
Это точно, то ли Вы книги не те выбираете, то ли они у Вас для мебели используются... Вы же говорили, что уже 3-ю книгу по С++ читаете, так вот: "Не верю!"

...Просмеявшись
Да не уже третью прочёл, а уже третью купил. А читаю я их так: читаю, читаю- раз- непонятно что-то. Я её и так и эдак верчу- непонятно. Над головой потрясу- ничего нового. Тогда я другую книгу беру, там начинаю искать информацию. И так от одной книги другой шарахаюсь. Но ничего, всё равно вперёд двигаюсь. А не то, что я прочёл сперва одну книгу, потом другую, а потом третью, нет , конечно. Ну и форум, конечно же (cейчас чувствую, придётся мне свои появления на форуме обосновывать). Потом: где это я употреблял C++? C только... Эдакий Вы смешной... Цепляетесь ко всему, право...

P. S. А книги я не те выбираю- это естественно... Ещё бы, я те книги выбирал- тут бы Земля с небом местами поменялись!
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
s0urce
Сообщения: 321
ОС: Arch Linux + WinXP

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение s0urce »

Liksys писал(а):
18.11.2007 18:59
s0urce, человек учится, будь снисходительнее.
ладно, но его вопросы это жесть, почитайте, оч.забавно...

А не то, что я прочёл сперва одну книгу, потом другую, а потом третью, нет , конечно.
А зря!
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение sergio »

promov писал(а):
18.11.2007 19:29
А читаю я их так: читаю, читаю- раз- непонятно что-то. Я её и так и эдак верчу- непонятно. Над головой потрясу- ничего нового. Тогда я другую книгу беру, там начинаю искать информацию. И так от одной книги другой шарахаюсь. Но ничего, всё равно вперёд двигаюсь.

Правильный подход. "Совсем полных" книг не встречал. Да и повторение - мать учения, как известно. С разных сторон тоже полезно посмотреть, подход у всех авторов разный. Так, глядишь, пробелы заполняются, основы повторяются. )))
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

sergio писал(а):
18.11.2007 20:32
Правильный подход. "Совсем полных" книг не встречал.

неправильный, имхо. promov, я уж не знаю на чём ты пишешь, но если на си - прочитай K&R, полностью, с примерами и задачками. А если не на си - пиши в сабже на чём.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение v04bvs »

sergio писал(а):
18.11.2007 20:32
Правильный подход. "Совсем полных" книг не встречал. Да и повторение - мать учения, как известно. С разных сторон тоже полезно посмотреть, подход у всех авторов разный. Так, глядишь, пробелы заполняются, основы повторяются. )))

+1
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

drBatty писал(а):
23.11.2007 23:08
sergio писал(а):
18.11.2007 20:32
Правильный подход. "Совсем полных" книг не встречал.

неправильный, имхо. promov, я уж не знаю на чём ты пишешь, но если на си - прочитай K&R, полностью, с примерами и задачками. А если не на си - пиши в сабже на чём.

Предлагаю раз (первый ли?) и навсегда определиться с этим вопросом и больше его не поднимать. Итак: добросовестное изучение какого-литбо предмета предполагает штутдирование не (одной книги одновременно). Применительно к К&R: я споткунулся на
Второй шаг в программировании на С
а теперь понял. Но понял почитав другую книгу: Стивен Прата. Пограммирование на языке C.

...По прошествии некоторого времени пересматриваю K&R. Цитата:
"КАждый раз при вызове getchar эта функция считывает следующий символ текстового потока ввода и возвращает его в качестве своего значения. Таким образом, после выполнения приведённого ниже оператора переменная с будет содержаь следующий симвло входного потока".
Да. И не объяснено (доэтого, по крайней мере) что есть "считывать" и что есть "возвращать". А я не мыслю этих понятий, понимаете? Я их не знаю. Как же мне обойтись без дополнительных объяснений (книги)? никак.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

promov писал(а):
24.11.2007 19:27
Предлагаю раз (первый ли?) и навсегда определиться с этим вопросом и больше его не поднимать. Итак: добросовестное изучение какого-литбо предмета предполагает штутдирование не (одной книги одновременно). Применительно к К&R: я споткунулся на
Второй шаг в программировании на С
а теперь понял.
Там в самом начале сказано, что книга расчитана на людей, знакомых со своей ОС, и со своим терминалом, если возникнут трудности авторы рекомендовали обратится к ближайшему гуру. Ты(на тот момент), плохо понимал работу своего терминала, и местные гуру тебе сразу указали на ошибку. Причём тут С? Перенаправь ввод из файла и вывод в файл - всё заработает(этот совет мне дал ближайший гуру, когда я с ним стал спорить, прям как ты). Программа ведь копирует потоки, а не клавиши. Кроме того, эта книга написана в расчёте на человека поверхностно знающего(но знающего!) что такое алгоритм, и умеющего его составить. Т.е. на программиста(пусть даже он всего лишь в школе на васике hello world написал, и всё). Ты что, решил что в одной этой книге тебя научат всему??? Нет, это только введение в Си, и то не для "домохозяек".
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

Читай Прату и не парься, у него лучше все разжевано.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

promov писал(а):
18.11.2007 17:21

Код: Выделить всё

void b () {
  void a () {
  }
  a ()
}

Друзья! Я знаю, что это возможно, и даже представляю, как это работает. Кто-нибудь может показать мне пример кода, в котором есть смысл так делать? Напрямер, хороший тон ругать goto, но я знаю что здесь:

Код: Выделить всё

for(j = 0; j < 100; j++)
   for(k = 0; k < 100; k++)
      for(i = 0; i < 100; i++)
      {
         if((c = fgetc(fff)) == EOF) goto end_loop;
         <...>
      }
end_loop:
есть смысл применить goto, можно и без неё, но получится громоздко и дорого. Есть похожее для вложеных функций?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

drBatty, goto это оч полезная штука вот как раз в таких местах, как ты привел.
Для вложенных функций я честно говоря затрудняюсь пример привести, если только подобие lambda-функциям :)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение diesel »

drBatty писал(а):
25.11.2007 14:52
Друзья! Я знаю, что это возможно, и даже представляю, как это работает. Кто-нибудь может показать мне пример кода, в котором есть смысл так делать? Напрямер, хороший тон ругать goto, но я знаю что здесь:

Код: Выделить всё

for(j = 0; j < 100; j++)
   for(k = 0; k < 100; k++)
      for(i = 0; i < 100; i++)
      {
         if((c = fgetc(fff)) == EOF) goto end_loop;
         <...>
      }
end_loop:
есть смысл применить goto, можно и без неё, но получится громоздко и дорого. Есть похожее для вложеных функций?

эм? break чем не угодил?

/me запостил потом подумал :) не обращайте внимания (:
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение v04bvs »

drBatty писал(а):
25.11.2007 14:52
Друзья! Я знаю, что это возможно, и даже представляю, как это работает. Кто-нибудь может показать мне пример кода, в котором есть смысл так делать? Напрямер, хороший тон ругать goto, но я знаю что здесь:

Код: Выделить всё

for(j = 0; j < 100; j++)
            for(k = 0; k < 100; k++)
               for(i = 0; i < 100; i++)
               {
                  if((c = fgetc(fff)) == EOF) goto end_loop;
                  <...>
               }
         end_loop:
есть смысл применить goto, можно и без неё, но получится громоздко и дорого.

Код: Выделить всё

void doLoops() {
         for(j = 0; j < 100; j++) {
             for(k = 0; k < 100; k++) {
               for(i = 0; i < 100; i++) {
                   if((c = fgetc(fff)) == EOF) {
                           return;
                       }
                         <...>
                 }
                 }
           }
       }

       <...>
       doLoops();
       <...>

PS сорри за отступы, как то странно форум их форматирует..
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

diesel писал(а):
25.11.2007 15:05
эм? break чем не угодил?
Угу, а потом в конце каждого внешнего цикла писать if(c == EOF) break;? Или в начале for(j = 0; c != EOF && j < 100; j++), и перед всеми циклами ещё и не забыть поставить int c = ~EOF;? или вывернуть цикл наизнанку:

Код: Выделить всё

while((c = fgetc(fff)) != EOF)
{
   //а тут ручками крутить j,k,i
}
Ну можно конечно, но я же сказал: громоздко и дорого. Тогда уж внутрь функции обернуть и return вместо goto... Гы, пример без меня v04bvs написал, спасибо. Вот только зачем лишняя сущность? Писал бы на асме, поставил jmp, в си это называется goto.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
promov
Сообщения: 384
Статус: Участник
ОС: Debian GNU/Linux

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение promov »

drBatty писал(а):
25.11.2007 14:52
promov писал(а):
18.11.2007 17:21

Код: Выделить всё

void b () {
  void a () {
  }
  a ()
}

Друзья! Я знаю, что это возможно, и даже представляю, как это работает. Кто-нибудь может показать мне пример кода, в котором есть смысл так делать?

Я могу. И хоть код с множеством пояснений, боюсь, Вам с ходу будет не разобраться, а ковыряться- лень. Поэтому сперва на пальцах.
Программа, которую я написал, учебная и, наверное, никакого практического интереса не представляет, но тем не менее, я учусь всё же, а не работаю программистом. В этой программе разработана функция, которая принимает в качестве аргумента строку, а возвращает значение типа структура, в который входят два элемента: первый элемент типа bool, а второй типа float. Если в принимаемой строке-аргументе в начале есть число, то функция возвращает true и это самое число, приведённое к float. Например, строка -0.4567erty, возвртится число -0.45670000. Если числа в начале строки нет, первое возвращаемое значение будет false, а второе неопределено.
Так вот, в этой функции я разработал две вспомогательные функции, которые очень-очень специфичны и вряд ли я их смогу применить в других моих программах.. А раз так, какой смысл мне делать их внешними, а не вложенными?
Вопрос: а что, без вспомогательных функций нельзя было обойтись? Ответ: можно. Но основная функция такова, что в разных местах делаются одинаковые действия с разными значениями. Грамотно быо бы использовать в этих местах функции. Возможно, без них обойтись было бы проще, но хочется сразу приучивать себя к грамотной работе. В понятие "грамотность" я, среди прочего, вкладываю использование функций, если больше, чем в одном месте выполняется одинаковая последовательность операторов. (Понятное дело, правило не абсолютное. Каждый подобный случай нужно рассматривать отдельно.)
Про goto. Не очень я ему доверяю. Ещё с Pascal недоверие. Навскидку если- он в моей программе не подошёл бы.
Зачем хорёк пошел в ларёк, зачем барсук полез на сук...
Мораль легко уразуметь: зачем на бал пришёл медведь?
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение Liksys »

private-функции можно сделать с областью видимости для одного файла. Это называется static
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

promov писал(а):
26.11.2007 00:01
Так вот, в этой функции я разработал две вспомогательные функции, которые очень-очень специфичны и вряд ли я их смогу применить в других моих программах.. А раз так, какой смысл мне делать их внешними, а не вложенными?
Вопрос: а что, без вспомогательных функций нельзя было обойтись? Ответ: можно. Но основная функция такова, что в разных местах делаются одинаковые действия с разными значениями.
Насчёт грамотности - это правильно. Я, правда, называю это стилем. Часто есть смысл обернуть что-то в функцию, даже если это используется один раз, вот класический пример:

Код: Выделить всё

static void f(int j, char *buffer)
{
   //много-много кода
}

//где-то дальше:
char *buffer = new char[n];//проверка ошибок опущена.
for(j = 0; j < n; j++)
{
   f(j, buffer);
}
delete[] buffer;
Здесь я обернул тело цикла в функцию во первых для того, чтобы видеть весь цикл, а во вторых, что бы было видно где я выделяю память, а где её освобождаю. Так-как функция мне нужна всего раз, я обявил её static(об этом уже писал Liksys). В других частях программы(в других файлах), я могу обявить другую функцию, но имя могу использовать такое-же(хотя это и не рекомендуется). Но вложеные функции здесь(имхо) не к месту.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение KukMan »

Ну...на си++ (на си не знаю) много выглядит не очень "компактно". К примеру, перевод из типа в тип на ##c++ (на freenode.net) мне советовали аж через <sstream> конвертить. Регулярные выражения тоже немножко трудно использовать. Так что, прывыкай...

З.Ы. я лично умные книги закончил читать в конце изучения синтаксиса. И, взависимости от задачи разбираюсь в той, или инной ситуации. Но потом я все таки почитаю умную книгу, чтобы понять многие нюансы (мне не нравится читать и ничего не понимать).
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

KukMan писал(а):
08.12.2007 10:00
Ну...на си++ (на си не знаю) много выглядит не очень "компактно". К примеру, перевод из типа в тип на ##c++ (на freenode.net) мне советовали аж через <sstream> конвертить. Регулярные выражения тоже немножко трудно использовать. Так что, прывыкай...
Это вы мне советуете привыкнуть? Не буду. В С++ (языка ##c++ не знаю), перевод из типа в тип выглядит так:

Код: Выделить всё

x = y;//копирование с переводом
x(y);//инициализация с переводом
f(y);//вызов функции с параметром не того типа
(const my_type*)x;//это если явно захотелось;)

Что может быть проще?
А про выражения - библиотека вам досталась громоздкая(хотя и мощная), прям как бульдозер. Никто не помешает вам найти/написать свою, маленькую и изящную, язык тут не причём.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение KukMan »

##c++ - это IRC канал на фриноде...
char* = "1234"; нада перевести ее в int... - ваш пример... (что может быть проще?)
int = 123; нада перевести ее в char*... - ваш пример...
atoi и itoa - конструкции С. (Хотя лично у меня atoi работает, а на itoa матерится, что нет такой функции)...
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Всякий раз перед использованием функции, её необходимо пересматривать

Сообщение drBatty »

KukMan, Ну про то, что вы С++ знаете - вы заблуждаетесь:
1) В С++ нет типа строка(кроме std::string, но вы про это не писали).
2) char* это указатель на символ.
3) "1234" это константный указатель на константный символ.
4) Если вам нужен тип, который в нужный момент ведёт себя как int, а в другое время как (const char *) - создайте его. Преобразовать указатель на символ в число(atoi()), это типичный си-шный подход.
И всё останется так-же:

Код: Выделить всё

my_type x = 1234;
printf("%d\n", strlen(x));//напечатает 4, x ведёт себя как строка
printf("%d\n", 17 + x);//напечатает 1251, если вы не перезагрузили функцию
//int ::operator+(int, const my_type &);
printf("%s\n", (const char*)x);//а это явное преобразование, необходимо
// из-за того, что сишная printf() сама в типах не разбирается(точнее
//из-за её прототипа int printf(const char *, ...);)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: