Что означает `return 0x1;`? - PullRequest
       5

Что означает `return 0x1;`?

11 голосов
/ 11 октября 2010

Просматривая исходный текст проекта в Интернете, я обнаружил в основном выражение return, которое мне показалось странным:

int main()
{
    /* ... */
    return 0x1;
}

Итак, main возвращается 0x1 radix 16, но это 1 radix 10! Разве основной возврат не должен 0?

Это неправильно, верно? Кстати, это нормально, чтобы return 0x0?

Ответы [ 10 ]

19 голосов
/ 11 октября 2010

Возвращает 1. 0x1 Это просто шестнадцатеричное значение 1.

Вы также можете вернуть 0x0. Это просто другое представление 0. Вы также можете использовать восьмеричное, если вам нравится:)

4 голосов
/ 11 октября 2010

0x1 или 1 не имеет значения.Это тот же номер.Следовательно, вы также можете вернуть 0x0 - это просто другой способ записи 0 в вашем коде.

Однако, предполагая, что return - это последняя строка кода в вашем главном блоке, вы правы, что онвероятно, не будет возвращаться 1: ненулевые коды возврата из main означают сбой, и если программа запускается до конца, это, как правило, признак успеха - поэтому в этом случае вы должны вернуть 0., вполне возможно структурировать программу наоборот, поэтому также возможно, что возвращение 1 здесь правильно.

3 голосов
/ 11 октября 2010

Проще говоря, это означает:

return 1;

, поставив '0x' перед числом, вы можете ввести шестнадцатеричные числа в исходный код, например, 0xFF = 255

Ваша основная функция может возвращать любое значение, которое вы хотите, таким образом вы можете эффективно документировать любые состояния ошибки, которые могли (или не могли) возникнуть. Если эта программа была вызвана процессом, который запрашивает возвращаемое значение, то если вы измените возвращаемое значение на 0x0 (или просто 0), то вызывающая программа может неожиданно изменить свое поведение.

2 голосов
/ 11 октября 2010

0x1 это просто еще один способ написания 1! Литерал 1 одинаков в десятичном или шестнадцатеричном формате. Но это не всегда так, например, decimal 10 не равно hexadecimal 10.

В этом примере main() возвращает 1. Обычно любое возвращаемое значение, отличное от 0, рассматривается как неудачное завершение.

2 голосов
/ 11 октября 2010

Да, 0x1 (шестнадцатеричный 1) совпадает с 1 (десятичный 1). Итак, вышесказанное эквивалентно обычному return 1.

main не обязан возвращать 0. main «должен» возвращать все, что его автор хочет вернуть. Они хотели вернуть 1 - они вернули 1. Они хотели использовать шестнадцатеричное представление - они использовали шестнадцатеричное представление.

Кто-то просто захотел сделать это таким образом. Там нет другого объяснения.

1 голос
/ 19 декабря 2013

Вы действительно понимаете, что означает базовое число?

Число Base-n использует n цифр от 0 до n-1.(A b A b-1 ... A 1 A 0 ) n = A b * n b + A b-1 * n b-1 + ... A 1 * n 1 + A 0 * n 0

Итак, 1 является действительным шестнадцатеричным символом, а 0x1 означает 1x16 0 , что по своей сути равно 1

1 голос
/ 11 октября 2010

Мне кажется, эта информация вам полезна?
Результаты согласно http://codepad.org/

1) int main()  {  return 0x0; } 
 Output: No errors or program output.

2) int main()  {  return 1x2; } //anythingxanything results below error
  error: invalid suffix "x2" on integer constant

3) int main()  {  return 0x2; } //0xanything results :exit failure except for 0
  Exited: ExitFailure 1

Результаты в соответствии http://www.comeaucomputing.com/tryitout/

except  2nd case it is compilng correctly(succeeded)

Результаты согласно

GCC[g++]  ---  error  return 1x0; except 2nd case all correct
EDG_compiler ---  error  return 1x0; except 2nd case all correct
Sun compiler ---  error  return 1x0; except 2nd case all correct

При просмотре этих результатов ..IT обрабатывает 1-й и 3-й регистр как шестнадцатеричный. И оставшийся 2-й регистр как другое (не числовое) выражение или переменную

1 голос
/ 11 октября 2010

0x1 просто шестнадцатеричный для 1. После компиляции нет никакой разницы.0x0 будет эквивалентно 0.

Возвращаемое значение основной функции обычно не используется системой.Но если программа вызывается другими программами (например, установщиками), она может быть проверена ими.Обычно возвращается 0, если все в порядке, и что-то еще, чтобы указать на ошибку.

1 голос
/ 11 октября 2010

Это означает: вернуть 1

Вы можете использовать числа в шестнадцатеричном формате, например, 0x ...

1 голос
/ 11 октября 2010

Возвращаемое значение main() передается внешнему вызывающему как возвращаемое значение / код ошибки исполняемого файла для проверки, например, ERRORLEVEL или $?.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...