C++ 使用条件语句激活函数的目的是什么?

C++ 使用条件语句激活函数的目的是什么?,c++,function,C++,Function,激活这样一个函数的目的是什么 if(!FUNCTION()){ return(1); } 为什么不像这样调用函数呢 FUNCTION(); 虽然我在初始化应用程序时使用了条件语句,并且实际上根本不会造成系统混乱,但是仅仅调用函数()会不会更快 我知道条件也有一个返回值1,但是这个返回值不是也没有必要吗 我在这个片段中这样使用: int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCMDli

激活这样一个函数的目的是什么

if(!FUNCTION()){
  return(1);
}
为什么不像这样调用函数呢

FUNCTION();
虽然我在初始化应用程序时使用了条件语句,并且实际上根本不会造成系统混乱,但是仅仅调用
函数()
会不会更快

我知道条件也有一个返回值1,但是这个返回值不是也没有必要吗

我在这个片段中这样使用:

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCMDline, int nCmdShow){
    //HWND initialization
    if(!InitMainWindow(hInstance, nCmdShow)){
        return 0;
}

其目的是检查
函数
的返回值。大概,
函数
是这样声明的:

bool FUNCTION();
其中返回值(
bool
)表示成功或失败。假设您有一个连接到数据库的函数:

bool ConnectToDatabase();
ConnectToDatabase
将尝试连接到数据库,但在实际代码中会发生不好的事情,并且函数并不总是成功。如果我们将此代码放在更大的上下文中:

ConnectToDatabase();
databasePointer->GetTheTable();
您可以看到,如果无法连接到数据库,尝试附加到其中的表将永远不会成功,事实上,数据库指针,
databasePointer
,甚至可能无效。尝试连接到未连接数据库中的表肯定只会以眼泪告终

因此,我们检查以确保我们调用的函数实现了我们预期的功能,然后继续编写假定它们实现了的代码:

if (!ConnectToDatabase())
  return false
databasePointer->GetTheTable();
您发布的示例代码大致相同,但有些曲折:

int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCMDline, int nCmdShow){
    //HWND initialization
    if(!InitMainWindow(hInstance, nCmdShow)){
        return 0;
}
InitMainWindow
在本例中,可能是一个执行多项操作的函数:

  • 它创建主窗口
  • 它将等待用户使用完主窗口
  • 主窗口关闭后,
    InitMainWindow
    返回
  • 因此,在这里您可以看到对
    InitMainWindow
    的调用可能需要几分钟或几小时才能返回,而当它返回时,则是程序退出的时间


    另一方面,
    InitMainWindow
    可能就这么简单——它只是初始化主窗口并立即返回。在这种情况下,如果由于某种原因,
    InitMainWindow
    失败,我们不希望开始使用该窗口。

    以这种方式调用函数可以将结果输入到类似但更复杂的构造中

    例如,假设您有一个函数:

    int somefunc(){
        if (!otherfunc())
            return 1;
    }
    
    然后您可以将结果输入到另一个if语句中

    if (somefunc())
        // Do Something meaningful
    
    从技术上讲,这段代码有一个错误,因为如果InitMainWindow返回非零,WinMain将不会有返回值,尽管对于主函数,这通常会被忽略

    int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCMDline, int nCmdShow){
        //HWND initialization
        if(!InitMainWindow(hInstance, nCmdShow)){
            return 0;
    }
    

    错误代码。如果
    函数
    返回的不是0,则包装函数将返回1,表示错误。这对于使用
    init()
    函数非常方便,例如
    if(init()!=S_OK)printf(“error”)非常常见。一点C知识解释了为什么`!=S_OK`很容易在if语句中被忽略。@Shark,他写道:“if(!FUNCTION())”,因此只有当FUNCTION()返回零时才会返回1。@JimRhodes与大多数人/开发人员使用负错误代码是一样的。这就是。在一个比较现实的例子上写这篇文章做得很好+1.