Mr.KTO blog

Первая запись в рубрике C++

Пожалуй, пока я не буду открывать отдельный блог для записей по теме программирования на языке C++. Посмотрим что из этого выйдет. А пока можете подписаться на рубрику c++.

Я начал программировать на СИ до увлечения веб-программированием и собственно PHP. Собственно, и php мне практически не пришлось изучать из-за похожести языков, достаточно было только мануала.

В качестве среды разработки сейчас я использую Borland C++ Builder 6.0.

Сегодня хочу привести пример, насколько стало велико желание красоту кода php перенести в программы на c++. Допустим есть некая функция, которая возвращает какое-то число результов.

int c() {
    return 3;
}

И мы хотим проверить, есть ли рельтаты (c()!=0) при этом записав это число в переменной (d=c()). В php это выглядело бы так: if ($d = c()). В c++ это вызовет Warning: Possibly incorrect assignment. И правильным решением было бы просто в Project/Options/Compiller/Warnings отключить уведомление об этом ворнинге (как многие). Но мы ведь идеалисты, чёрты бы их всех побрал, и для нас нет простых путей. Мы напишем: if (true == (d = c())). И всё будет верно, пока ф-ция c() возвращает 1 или 0. Но для return 3; это условие окажется ложным. Всё потому, что при сравнения int-овского типа с bool-евским в СИ (по крайней мере в компиляторе BCB) bool преобразуется в int. Получается if (1 == (3)). Значит, нам следовало писать: if (true == (bool)(d = c())).
Соответственно, более простой вариант:

if ((d = c()) > 0)
if (0 != (d = c())) // или:
if ((bool)(d = c()))

Для PHP тоже надо быть внимательными. В то время, как if (true == $d = c()) (скобки можно убрать из-за приоритета операторов) даст ожидаемое true == true. Если мы хотим сравнить какию-то числовую константу с переменной, потенциально содержащей bool-значение: if (true == 2) // if ($mode == AUTO). То для получения нужного нам результата сравнения (2==2) нужно не забыть преобразовать тип к int (if ((int)$mode == AUTO)).

-------------------------------------------------

Из моего Twitter последнее по теме #cpp:

# Чтобы указывать версию приложения только в одном файле, а использовать и в другом: extern char Application__Version[] = "1.0.0";

-------------------------------------------------

Ссылки по C++/Builer:

C++Builder Русское Сообщество Разработчиков

C++Builder на codenet – FAQ Список наиболее часто задаваемых вопросов

АЛЁНА C++

-------------------------------------------------

Книги. Единственная книга, которую я бы порекомендовал, как для начинающих, так и уже знающих основы:

Павловская - «C/C++. Программирование на языке высокого уровня» (+Практикум, Структурное программирование: Практикум)

-------------------------------------------------

Понравился пост? – Поделитесь ссылкой:

Комментарии (5) на “Первая запись в рубрике C++”

  1. mrkto пишет:

    inline virtual абсолютно бесполезен, т.к. virtual заставляет компилятор использовать механизм позднего связывания, соответственно подстановки inline не будет

  2. Сёма пишет:

    А когда будут еще записи новые?

  3. mrkto пишет:

    Надеюсь что скоро.

  4. Matt пишет:

    Эх, хотел изучить С, да всё никак не соберусь...

  5. patagen пишет:

    Очень полезная вещ, кстати советую собратся и начать обучение имею много самоучителей, видеоуроков могцу поделится.

Оставить комментарий