#Difine и Int в чём их отличие?

Тема в разделе "Arduino & Shields", создана пользователем Артём Маракшин, 23 фев 2015.

  1. В скетчах arduino используют то #Difine то Int, но в чём их отличие? Читал про них на Вики Амперки там написано, но написано так что я не понял. Объясните по понятней.
     
    Последнее редактирование: 23 фев 2015
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    char, int, short, long - это типы данных. Запись вида "тип_данных название_переменной" объявляет переменную заданного типа.
    А define нужен для тупой подстановки. #define x 5 - компилятор повсюду вставит 5 вместо x.
    Нельзя будет написать x=8, т.к. компилятор поймет это как 5=8.
    Вики читать хорошо, но и книжки по программированию не повредят.
     
    egordorichev нравится это.
  3.  
    vvr нравится это.
  4. А про int в среде arduino IDE можно по подробнее?
     
  5. Arduinщик

    Arduinщик Нерд

    int это переменая которая может хранить всякие цифры 1,2,3,4...345,346,347,....20005.
    например благодаря int и циклу for можно не писать в setup'е очень большое кол-во действующих пинов, а только pinMode (i , OUTPUT). Потом можно благодаря int сделать чтобы светодиод горел набирая яркость (самый бональный пример).
     
  6. А я могу всегда использовать #Difine или всётаки придётся иногда использовать int?
     
  7. vvr

    vvr Инженерище

    Можешь спокойно и int записать
     
  8. Arduinщик

    Arduinщик Нерд

    Какие у вас будут проекты, но скорее всего да. Просто int это переменная а #define это подставка номера пина вместо слова и ещё кои-что const int это переменная которая не может изменяться и нужна она в основном вместо #define.
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    http://citforum.ru/programming/cpp_march/cpp_017.shtml
    И это не имеет никакого отношения к среде Arduino IDE. Это имеет отношение к языку программирования C/C++. Про него и почитайте что-нибудь, чтобы было понимание всяких базовых вещей.
     
  10. geher

    geher Гуру

    Если уж до конца, то #define - это макроподстановка. Т.е. некоторый текст подставляется вместо указанного текста.
    Используется либо для придания осмысленности константам (когда вместо безликой цифры имеем наименование) либо для сокращения объема программы, чтобы вместо повторяющихся вещей ставить короткое имя (например, вместо длинной строковой константы).

    Например, #define a bbb в тексте программы приведет к тому, что перед собственно процессом компиляции (перевода из кода исходного в машинный) каждое вхождение символа a будет заменено на bbb.

    Возможны и более сложные макроподстановки, с параметрами.

    Альтернативное применение #define - управление компиляцией.

    И все это можно прочитать в любом учебнике по языку C или C++.
     
  11. Arduinщик

    Arduinщик Нерд

    Прочитал всё то что написано в вашей ссылке и так и не понял, что означают:
    char
    short
    long
    signed
    unsigned
    float
    double
    long double
     
  12. geher

    geher Гуру

    char тип переменной, размером 1 байт, содержимое которой интерпретируется как целое от 0 до 255 (если signed) или от -128 до 127 (если unsigned).
    short - то же, но два байта (от 0 до 65535 или от -32768 до 32767)
    long - то же, но четыре байта (от 0 до 4Г или от -2Г до 2Г)
    signed - модификатор типа, применяемый к вышеперечисленным целым типам, означает, что число интерпретируется как беззнаковое (от 0 до ... в зависимости от типа)
    unsigned - модификатор типа, применяемый к вышеперечисленным целым типам, означает, что число интерпретируется как знаковое (от -... до ... в зависимости от типа), т.е. старший бит, установленный в 1 означает, что число отрицательное. В этом случае число хранится в так называемом дополнительном коде.
    Если после signed или unsigned тип не указан, то считается, что это int, целочисленный тип, разрядность которого зависит от процессора. Для ардуины это 2 байта, как short.
    float - число с плавающей точкой. Внутренне представлено в виде 0.xxxxxx * E ууу, где E ууу - десятка в степени yyy. Переменная этого типа занимает в памяти 4 байта.
    double - то же, но почти везде 8 байт, а для ардуины все те же 4 байта.
    long double - то же, но 10 байт.
     
    Megakoteyka нравится это.
  13. Arduinщик

    Arduinщик Нерд

    понял
     
  14. Вот вы все повторяете про #difine, про него я всё понял, а вот про int не до конца.
     
  15. vvr

    vvr Инженерище

    вам geher всё расписал же :)
     
  16. Megakoteyka

    Megakoteyka Оракул Модератор

    Переменная - это область памяти, имеющая имя. По этому имени можно обратиться к этой области памяти.
    Тип данных определяет размер этой области памяти и ее структуру.
    int x = 5; - области памяти размером 2 байта присваивается имя x и туда записывается значение 5.
    int y = x + 5; - в область памяти размером 2 байта по имени y кладется сумма содержимого области памяти x и числа 5.

    Прочитайте уже первые главы любого учебника по C/C++, там все написано про переменные и типы данных.