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

bool SomeFunction()
{

}

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

2

Решение

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

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

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

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

§6.6.3 / 2:

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

10

Другие решения

Я скомпилировал следующий код на 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 ++ делает так, я не знаю о других компиляторах.

1

Должно 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;
}
-1
По вопросам рекламы [email protected]