#c #int #long-integer
#c #int #длинное целое число
Вопрос:
Каков предпочтительный способ определения длинного целого числа в C? Есть ли какие-либо проблемы с совместимостью?
long int ln;
или
long ln;
Комментарии:
1. Примечание: спецификация C11 последовательно использует
long int
as inlong int ftell(FILE *stream);
. Я бы выполнил стандарт кодирования группы, если он существует, перед моими собственными предпочтениями (которые вlong
).
Ответ №1:
Никаких «проблем с совместимостью» нет. Они имеют один и тот же тип, long
это краткая форма имени типа long int
. Так же, как short
и короткая форма short int
.
Это, конечно, очень субъективно, но я думаю, что большинство программистов на C просто используют long
.
Комментарии:
1. Отлично, лично мне нравится определение long int, но я думаю, что буду использовать более короткое определение, чтобы сэкономить несколько символов. Спасибо.
2. Все дело в удобочитаемости, что в данном случае мало что значит.
Ответ №2:
Нет разницы между long и long int . Вы можете использовать то, что хотите. Я бы предпочел использовать long int, чтобы запомнить, что вы сделали.
Ответ №3:
В дополнение к ответу @unwind, есть также long double
и, конечно long long int
. Long может быть полезен в других редких уголках реализаций ( long char
?), Но это всегда модификатор, но int
предполагается, если нечего изменять.
Синтаксис C традиционно подразумевается int
во многих местах:
myfunction (i, j)
{
return 6 * i j;
}
В реализациях 1979 года в Unix версии myfunction()
6 интерпретировался бы как возвращаемый тип int
, и оба параметра также считались бы int
равными, если не указано иное:
float myfunction (i, j)
long i; float j;
{
return 6 * i j;
}
Ответ №4:
Вы забыли упомянуть также signed long
и signed long int
🙂
В соответствии со стандартом C
5 Каждый из мультимножеств, разделенных запятыми, обозначает один и тот же тип, за исключением того, что для битовых полей определяется реализацией, определяет ли спецификатор int тот же тип, что и signed int, или тот же тип, что и unsigned int
Таким образом, только для битовых полей существует разница между, например int
, и signed int
Примите во внимание, что вы можете написать, например, следующим образом
const signed const long const int ln;
Это эквивалентно
const long ln;
Ответ №5:
Если компания, в которой вы работаете, имеет соглашения о кодировании, и они включают в себя требование об этом, вы должны следовать соглашению. Однако, если нет правила о том, как вы должны объявлять a long int
, выберите то, что вам кажется лучшим.
Могу ли я предложить вам использовать типы, определенные в stdint
. Например, long int
может быть эквивалентно int32_t
. Во многих случаях полезно знать битовую ширину переменных, которые вы используете.