Неявная переменная

Arduino_Novichok
Offline
Зарегистрирован: 13.05.2018

Ивините если могу оскорбить гуру таким вопросом) - не пинайте !

Есть ли у C++ неявная переменная, в которой может быть как int , так и char ?

Или как делают в таких случаях ? Хотя может у гуру не бывает таких случаев xD

 

int c = 1;
char d = 'N'

if (a = b) {
   Keyboard.press(c);
}
else {
   Keyboard.press(d);
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

int и char различаются в основном длиной. Как в той, так и в другой можно хранмить как числа, так и коды символов. C - язык со слабой типизацией, при которой по сути единственное различие между целыми, символьними и логическими переменными является только длина. В конструкциях языка они в большинстве случаев взаимозаменяемы (опять же, если хватает размера).

 

PS. Строка 4 в Вашем коде, вероятнее всего, делает совсем не то, что Вы думаете.

Arduino_Novichok
Offline
Зарегистрирован: 13.05.2018

andriano пишет:

PS. Строка 4 в Вашем коде, вероятнее всего, делает совсем не то, что Вы думаете.

Ой, ошибся когда рисовал для форума) там == естественно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Но код от этого понгятнее не стал.

 

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Arduino_Novichok.  Вы банально мало знаете. Вот и вылазят тупые фантазии. С одной стороны в компьютере биты и байты и нет ничего больше. Так что компьютеру глубоко до ж**ы с чем работать. И даже полученный результат компьютеру так же до ж**ы. Но ведь вам как пользователю совсем не понравится то г**о, что получилось.  Вот по этой причине и придумали типы. С этими типами должны работать эти функции, а с другими другие. В Си даже есть перегрузка функции - разные типы вызывают разные функции обработки. Удобно. Не надо иметь кучу названий функций. И теперь вы предлагаете неявные типы переменной. Ну тогда вы явно должны добавить к существующей еще одну переменную -тип той информации которая лежит в неявно заданой ячейке. И вот в зависимости от переменной типа и будете выбирать как эту информацию обрабатывать. 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

qwone пишет:
... В Си даже есть перегрузка функции ...

Видимо Вы писали про С++. В оригинальном "С" никаких перегрузок не замечено.. :)

ТС-у: Вы неверно интерпретируете термин "неявная" переменная, имея ввиду "универсальная" или "нетипизованная", когда тип хранимых данных определяется содержимым переменной в каждый отдельный момент времени: что присвоили, тот и тип. Вот таких переменных нет ни в "С" ни в "С++", но в последнем есть некоторые механизмы, позволяющие в определенной степени имитировать такое поведение программы, правда ДО её компиляции (темплейты).

Оригинальному "С", как верно сказано, по-барабану на тип хранящихся данных и любой тип можно привести к практически любому, хотя бы через (void*) .. для работоспособности программы важен размер занимаемой памяти переменной того или иного типа. Все "типовые ограничения" языков связаны исключительно с борьбой с ошибками в программах - "человеческим фактором" их авторства.

Ну и ещё порекомендую прочесть про оператор union в "С".. возможно поможет..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:

Видимо Вы писали про С++. В оригинальном "С" никаких перегрузок не замечено.. :)

Давненько Вы не смотрели свежие стандарты С.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Лучшее - враг хорошего. :)

И ваще, у "С" есть только один стандарт - Керниган-Ричи. :)