Как может опасно на операции влиять буква L при оперировании большими числами? Например двордами? В случаях когда её нет и она должна быть или наобарот.
может опасно влиять, например на переносимость: если в каком-нибудь системе -1 это int и на этой системе int!=long тогда unsigned long a = -1 будет вовсе не все биты 1 а что-то другое...
Так вопрос же не в этом был, вопрос был на счет в чем опасность L) P.S. unsigned long a = -1UL будет то что надо) Т.е. эти буквы указывают тип константы, и смысл такой же как и при неявном преобразовании. P.S.1. Кстати у меня warning не сыпет.... (GCC и VS)
Ну тогда конкретно L тут ничем особо не выделяется - нужно всегда следить за тем, чтобы не было неявных преобразований из литеров. Это касается и L, и U, и LL, и всего остального.
Допустим в коде написано: Код (Text): unsigned long test; test = 0x12345678; test = 0x12345678L; test = 0x12345678UL; Как этим правильно пользоваться? Какие ошибки могут быть на почве неправильного использования? Зачем в си такие сложности?
В этом примере в принципе ничего плохого не будет, теоретически если у Вас попадется система на которой long не 4 байта МОГУТ быть проблемы. Хотя такого рода вещи скорее ,например, с отрицательными числами как в моем примере важны. Сложности такие для типизации констант т.е. у константы получается заданный тип. (вернее не константы а литералы)
сочтет, но так-как на x86 системах long = int то ничего страшного не будет, а вот в других системах будет плохо...
NoName Компилятор читает константу как int, если константа в int не лезет, то он её туда впихивает обрезая лишние биты. gcc, правда, научился этого не делать, но может быть только на x86_64. Но когда он этого не делал, он ругался варнингами, так что всех негативных эффектов легко было избежать компилируя с -Wall и просматривая вывод компилятора.
h0t Да я ж не отрицаю. Я говорю с привязкой к gcc, поскольку стандартов не помню, а другими компиляторами не пользуюсь.
Не подумате ничего плохого, это я с тем контекстом, что проверил на VS и даже на нем работает, как на не самом аддекватном компиляторе..