Borland C++ Что вернет эта функция bool?

bool SomeFunction()
{

}

Я не могу запустить Borland C++ на моей машине, но мне нужно конвертировать из C++ в VB, поэтому мне нужна помощь с этой функцией.

3 ответа

Функция утверждает, что возвращает bool но это ничего не возвращает. Это должно привести к предупреждению компилятора. Если вы используете его для назначения чего-либо, вызывающего функцию, результатом будет неопределенное поведение:

bool b = SomeFunction(); // UB, SomeFunction is failing to return.
SomeFunction(); // still undefined behaviour

Только main() разрешено не возвращать явно, в этом случае он неявно возвращает 0,

Посмотреть здесь:

§6.6.3 / 2:

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

Я скомпилировал следующий код на Borland XE2:

bool SomeFunction()
{
}

int main()
{
    bool x = SomeFunction();
    // ...
}

SomeFunction() переведено на следующий код ассемблера x86:

push ebp
mov ebp,esp
pop ebp
ret

Назначение в main() переведено на:

call SomeFunction()
mov [ebp-$31],al

где [ebp-$31] это место x, Это означает, что содержимое реестра al в конечном итоге в bool x, Если al было 0, x будет ложным, в противном случае x будет правдой. В моей системе это всегда было так, но это зависит от контекста. Также вы можете получить разные результаты для отладки и выпуска.

Вывод, конечно, х не определен. Данный код немного похож на написание

bool x;
if (x)
{
    // ...
}

Я склонен думать, что определение SomeFunction() должен вызывать не только предупреждение компилятора, но и ошибку. Visual C++ делает это, я не знаю о других компиляторах.

Должно return true; или же return false;

bool SomeFunction()
{

    return true;

    // or

    return false;

}

Если ваш компилятор не имеет встроенного bool, вы можете сделать это:

typedef int bool;
#define true 1
#define false 0

int main(void)
{

    bool answer;
    answer = true;

    while(true)
    {

    }

   return 0;
}
Другие вопросы по тегам