singlepost

Visual c++- среда разработки,или каг ? о_О << На главную или назад  

решил начать изучать с++,под рукой как-раз оказалась студия..
начал искать учебники к нему и между тем сложилось странное впечатление,что ето каг-бы другой язык,нежели c++
Вразумите товарисчи!!

56 ответов в теме “Visual c++- среда разработки,или каг ? о_О”

  1. 12
    Олег Давыдов ответил:

    #11
    "If the for-init-statement is a declaration, the scope of the name(s) declared extends to the end of the for-statement." — черновик стандарта C++0X

    #12
    > Лучше, в смысле безопаснее
    не исключено

    > Использовать манипуляторы.
    спасибо ^_^

    > Стоит добавить "имхо"
    Да, конечно.

  2. 11
    Павел Потапов ответил:

    > Что значит "лучше юзать"? Да, iostream в microsoft случайно реализовали так, как надо.
    Лучше, в смысле безопаснее. Программа не упадет, если ошибиться в строке форматирования с количеством аргументов.

    > Кстати, как там установить точность вывода вещественного типа,
    количество ведущих нулей и основание системы счисления?
    Использовать манипуляторы.
    //msdn.microsoft.com/en-us/library/daeb650d.aspx

    > А если есть необходимость писать на чистом C?
    На C вариантов нет, но это и другой язык ;)

    > Я уж не говорю, что printf удобнее в использовании.
    Стоит добавить "имхо" ;) С потоками Ваш пример выглядит так:
    cout << "i^2 = " << i++ * i++ << endl;
    Имхо, это понятнее. Если вдруг понадобится убрать или добавить форматируемый аргумент, то делать это надо будет только в одном месте, а не в двух, как в printf (строка форматирования и параметр функции). Плюс, если потребуется перенаправить вывод из консоли, например, в файл, то можно сделать это через методы cout, не модифицируя код. (Недавно натыкался на статью на РСДН, где все выводилось в Output окно в студии.)

    > Если что, __in64 в стандарте нет и никогда не было.
    long long в gcc (в плюсах) появился раньше, чем в стандарте… И если не ошибаюсь, то стандарт не запрещает вводить свои типы данных производителям компиляторов.

  3. 10
    Павел Потапов ответил:

    C99 – стандарт C, а не C++. На счет того, начиная с какой версии MS поддержала long long в C утверждать не берусь.

    > Но чтение в стиле C, насколько мне известно, до сих пор не соответствует. Стандарт я посмотрел – %lld для long long и %Lf для long double

    MSDN говорит о том, что MS стандарт поддерживает:
    //msdn.microsoft.com/en-us/library/tcxf1dw6.aspx
    Правда, опять же, я не знаю, когда они начали это поддерживать.

    > Например, у gnu gcc я не встречал расхождений со стандартом, которые мне бы досаждали. Да и расширения все укладывались во внешние библиотеки.

    По моим ощущениям самые большие различия в компиляторах относятся к реализации шаблонов. Я встречал некоторые шаблоны, верные с точки зрения стандарта, которые отлично компилились студией, но gcc их не ел. Так что проблемы есть не только с MS ;)

    > Есть два вида инкримента(и декремента соответственно) :
    i++ и ++i Они отличаются порядком действий. Откопаю пример хороший, напишу.

    Не стоит. Разговор не об этом, а о значениях выражений вида:
    int i = 1;
    i += i++ + ++i;

    Значение этого выражения неопределено и зависит от реализации компилятора. Сделано это в угоду возможности оптимизации вычислений.

    > Код, приведенный выше работать будет в MVS C++ 6.0
    В 2008 студии – не будет
    Стандартом не оговорена возможность использования такой конструкции:
    for( int i = 0; i < n; i++ );

    Про стандарт врать не буду, не помню, но в наиболее популярных компиляторах переменная объявленная внутри скобок цикла видна только в области видимости тела цикла. MS поддержала это начиная с 2005 студии, чему я был весьма рад. До этого переменная была видна и вне тела цикла. Так что как раз в 2008 студии приведенный выше код работать будет, а вот в 6-ке – нет.

  4. 9
    Павел Потапов ответил:

    вдогонку… MSDN пишет такое:

    "for Loops and the C++ Standard

    The C++ standard says that a variable declared in a for loop shall go out of scope after the for loop ends."

  5. 8
    Антон Водостоев ответил:

    Код, приведенный выше работать будет в MVS C++ 6.0
    В 2008 студии – не будет

    поэтому лучший вариант:
    int i;
    for( i = 0; i < n; i++ );

  6. 7
    Олег Давыдов ответил:

    #7
    Что значит "лучше юзать"? Да, iostream в microsoft случайно реализовали так, как надо. Кстати, как там установить точность вывода вещественного типа, количество ведущих нулей и основание системы счисления? А если есть необходимость писать на чистом C? Я уж не говорю, что printf удобнее в использовании.
    "И вообще, всё что есть в MS VS стандартно" — что Вы имеете в виду?Если что, __in64 в стандарте нет и никогда не было.
    Видимо, что-то вроде
    int i = 7;
    printf("i^2 = %d\n", i++ * i++);
    Ответ — 49 или 56

    #8
    Ой ли не оговорена?
    "Имя, введённое инициализатором цикла for, выходит из области действия в конце этого предложения" ("Дизайн и эволюция C++", Бьёрн Страуструп, перевод ДМК Пресс)

  7. 6
    Артур Булакаев ответил:

    Код приведённый выше будет нормально работать. long long MS VS ест. И 2005-тая тоже, проверено. Для чтения / вывода на экран лучше юзать iostream-овские cin cout.

    И вообще, всё что есть в MS VS стандартно, и работает нормально. *(исключая косяки самой программы)

    ЗЫ

    Есть два вида инкримента(и декремента соответственно) :

    i++ и ++i Они отличаются порядком действий. Откопаю пример хороший, напишу.

  8. 5
    Олег Давыдов ответил:

    long long появился в стандарте C99, вышедшем в 2000 году. То, что visual стал, наконец, его реализовывать, это, безусловно, плюс. Но чтение в стиле C, насколько мне известно, до сих пор не соответствует. Стандарт я посмотрел – %lld для long long и %Lf для long double

    Про ++ согласен. Мне казалось, что стандарт что-то на эту тему говорит, но google меня переспорил. Кажется, какие-то важные моменты ещё есть. А, вот. Стандарт не запрещает использовать несколько раз одну и ту же переменную для циклов, а как с этим у visual?
    for (int i = 0; i < n; i++)
    …;
    for (int i = 0; i < m; i++)
    …;

    Например, у gnu gcc я не встречал расхождений со стандартом, которые мне бы досаждали. Да и расширения все укладывались во внешние библиотеки.

  9. 4
    Павел Потапов ответил:

    #4
    Проверил, VS 2008 успешно хавает long long. В VS 2005 может его и не быть в силу того, что в момент выхода этой версии студии long long еще не входил в стандарт плюсов.

    Поведение — и ++ в больших выражениях неопределено и зависит от компилятора. Это прямо так и написано в стандарте.

    Что касается отличий от стандарта, то те или иные отличия есть в любом компиляторе, так же как и свои собственные расширения.

  10. 3
    Олег Давыдов ответил:

    visual c/c++ сильно отличается от c/c++, принятого по стандарту. Хотя бы чтение данных не то — в стандарте есть тип long long, функции printf и scanf читают/пишут его через %Ld, а в visual какие-то %I64d откуда-то взялись. С операторами ++ и — тоже лажа какая-то — в порядке вычислений.

  11. 2
    Сигурд Ярроу ответил:

    не-не. никаких русских версий. потом при переходена английскую будут возникать неудобства

  12. 1
    Павел Алимпиев ответил:

    ты чё нет!
    это просто среда программирования а язык всё тот же C++ он един.
    Кстати ты новичёк то советую скачать русскую Visual Studio там понятнее будет

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.