2016-11-20 4 views
1

Я пишу программу c с основной функцией void в кодовых блоках.c void основная функция? return 16 value

Я просто пишу возврат без какой-либо ценности.
Программа, как показано ниже:

#include<stdio.h>  
void main (void) 
{ 
    printf ("ali tariq\n"); 
    return; 
} 

Однако в консольном окне программа возвращает значение 16 в окне консоли. «Возвращенный процесс 16»

Я хочу знать, почему он возвращает это значение?
Как я могу использовать это значение в окнах с помощью кодовых блоков?

Благодаря

+1

Позвольте мне спросить вас: так как Предполагается, что программа C вернет статус выхода, так как такие среды, как окно консоли, сообщают о статусе (особенно, если это отличное от нуля), а так как ваша программа выходит из своего пути, чтобы * не * вернуть необходимый статус выхода, что вы сделали * Ожидание * произойдет? –

ответ

0

Вы не должны использовать void main(), использовать int main() вместо этого.

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - [Из обзора] (/ review/low-quality-posts/14349783) –

+0

@EliSadoff Это дало ответ, он должен использовать 'int main()' вместо 'void main()' – Danh

5

В (размещается) C функция main должна возвращать int (C11§5.1.2.2.1 [1]). Объявив его с типом возвращаемого значения void и не указывая любое возвращаемое значение, вы вызываете неопределенное поведение. Это означает, что компилятор может свободно возвращать что-либо, и в вашем случае он окажется равным 16.

+2

Все хорошие ответы. Я считаю, что это самое лучшее из всех 3. Для таких простаков, как я. –

0

Программа имеет неопределенное поведение. Прежде всего, в соответствии с C стандарта основного без параметров должны быть объявлены как

int main(void) 

Вы объявили функцию как имеющие тип возвращаемого void. В этом случае процесс, запускающий программу, не может получить действительный код возврата программы.

1

Вы не являетесь пользователем , а не можете указать тип возврата main, как пожелаете. Зачем?

  1. ПОТОМУ ЧТО ВЫ НЕ ПИШИТЕ КОДУ CALLING main(). Извините, но кричал, но кто-то написал этот код и разместил его в crt0.o или около того. Ваш основной() связан с этим кодом, и он не может просто вернуть то, что он хочет, потому что этот код ожидает int. Всегда. Это уже написано и составлено. Вы понимаете этот тонкий момент?
  2. Потому что C-стандарт так говорит. См. Другой ответ от Kninnug для главы и стиха.

Другими словами, ваш код вызывает неопределенное поведение и не должно быть сюрпризом, чтобы найти значение мусора, где не предусмотрено никакого значения.

Значит, вы ожидали предупреждения от компилятора? Лучшие из них действительно поймут это с правильными вариантами. Например. gcc и clang support -Wmain-return-type.

0

Просто потому, что функция объявлена ​​как void, это не означает, что она ничего не вернет. Например, в x86 многие соглашения о вызове указывают, что значение в регистре EAX после вызова функции является возвращаемым значением функции. Итак, если у вас есть функция C, объявленная void, но машинный код для функции изменяет значение EAX, которое будет рассматриваться как возвращаемое значение для функции.

0

КАЖДЫЙ "нормальная" программа, которая прерывает выполнение БЕЗ ошибок, необходимо вернуть ZERO.

Таким образом, ваша программа должна быть:

#include<stdio.h> 

int main (int argc, char *argv[]) // your program may have command line parameters 
{ 
    printf ("ali tariq\n"); 
    return 0; // Program terminate with NO ERRORS 
} 

Однако есть случаи, когда одна программа может прекратить С ошибок.

Давайте предположим, что это:

#include<stdio.h>  

void main (int argc, char *argv[]) 
{ 
    // program to make a division between two numbers 

    double a, b, res; 

    a = b = res = 0.0; 

    printf ("Enter 1st number: "); 
    scanf ("%lf", &a); 
    printf ("Enter 2nd number: "); 
    scanf ("%lf", &b); 

    if (b == 0) return 1; // division by '0' then return ERROR (any number != 0) 

    printf ("%f/%f = %f", a, b, a/b); 

    return 0; // NO ERROR 
} 

Теперь вы можете спросить: «А где оценивается возвращаемое значение?

Ответ: «К операционной системе»

Один пакетный файл может запустить программу и прочитать целое вы возвратили в переменной окружения «ERRORLEVEL»