Почему main работает со строкой возвращаемого типа, даже если она определена целочисленным типом возврата? - PullRequest
0 голосов
/ 10 октября 2018

Код компилируется в evan, хотя main имеет тип возвращаемого значения int , он работает со строкой возвращаемого типа без ошибок и ошибок, что является причиной этого.

#include <stdio.h>

int main()
{
    int i=0;
    printf("Hello World");
    //if(i!=0)
       return "hai";
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Программа является недействительной C программой."hai" имеет тип char [4] и в контексте оператора возврата он уменьшается до char *.

Однако функция должна вернуть int.В контексте return это происходит, если по присваиванию.

A char * можно преобразовать в int, но для этого требуется явное приведение.В отсутствие явного приведения это нарушение ограничения, и компилятор должен выдать диагностическое сообщение, которое gcc делает:

warning: return makes integer from pointer without a cast [-Wint-conversion]
    return "hai";
           ^~~~~

Наконец: стандарт Cупоминания в сноске :

[соответствующая реализация] также могут успешно переводить недопустимую программу.

0 голосов
/ 10 октября 2018

C

Вы не возвращаете строку или указатель, только указатель, приведенный к целому числу.И Компилятор предупредит вас, что вы конвертировали указатель без явного приведения.

C ++

этот код не будет компилироваться, поскольку C ++ не допускает такого рода неявное приведение.

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