Что предпочтительнее: ‘long int’ или ‘long’

#c #int #long-integer

#c #int #длинное целое число

Вопрос:

Каков предпочтительный способ определения длинного целого числа в C? Есть ли какие-либо проблемы с совместимостью?

 long int ln;
  

или

 long ln;
  

Комментарии:

1. Примечание: спецификация C11 последовательно использует long int as in long 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 . Во многих случаях полезно знать битовую ширину переменных, которые вы используете.