Methods 通用编程-调用非void方法但不使用值

Methods 通用编程-调用非void方法但不使用值,methods,return-value,call,void,Methods,Return Value,Call,Void,这是一般的编程,但如果有区别的话,我使用的是objective-c。假设有一个方法返回一个值,并执行一些操作,但您不关心它返回的值,只关心它所做的事情。你会像调用void一样调用这个方法吗?或者将结果放入变量中,然后将其删除或忘记?陈述您的观点,如果您遇到这种情况,您会怎么做。如果这在.Net中很常见(例如),可能是代码中断的问题 当我调用一个返回一个我忽略的值的函数时,通常是因为我在测试中这样做是为了验证行为。下面是C#中的一个例子: [事实] public void StatService_

这是一般的编程,但如果有区别的话,我使用的是objective-c。假设有一个方法返回一个值,并执行一些操作,但您不关心它返回的值,只关心它所做的事情。你会像调用void一样调用这个方法吗?或者将结果放入变量中,然后将其删除或忘记?陈述您的观点,如果您遇到这种情况,您会怎么做。

如果这在.Net中很常见(例如),可能是代码中断的问题

当我调用一个返回一个我忽略的值的函数时,通常是因为我在测试中这样做是为了验证行为。下面是C#中的一个例子:

[事实]
public void StatService_应_调用_StatValue Repository_以获取_GetPercentageValues()
{
var statValueRepository=new Mock();
新的StatService(null,statValueRepository.Object);
验证(x=>x.GetStatValues());
}
我并不真正关心返回类型,我只想验证是否对一个伪对象调用了一个方法。

如果这在.Net中很常见(例如),那么代码中断可能有问题

当我调用一个返回一个我忽略的值的函数时,通常是因为我在测试中这样做是为了验证行为。下面是C#中的一个例子:

[事实]
public void StatService_应_调用_StatValue Repository_以获取_GetPercentageValues()
{
var statValueRepository=new Mock();
新的StatService(null,statValueRepository.Object);
验证(x=>x.GetStatValues());
}

我并不真正关心返回类型,我只想验证是否对伪对象调用了方法。

这方面的一个常见示例是printf,它返回一个int。。。但你很少看到这一点:

int val = printf("Hello World");

一个常见的例子是printf,它返回一个int。。。但你很少看到这一点:

int val = printf("Hello World");

是的,只要调用这个方法,就好像它是无效的一样。你可能一直在做,却没有注意到。赋值运算符“=”实际上返回一个值,但它很少使用。

是的,只要调用该方法,就好像它是void一样。你可能一直在做,却没有注意到。赋值运算符“=”实际上返回一个值,但很少使用。

它取决于环境(语言、工具、编码标准等)

例如,在C语言中,完全可以调用函数而不使用其值。对于一些函数,比如printf,它返回一个int,它一直都在执行

有时不使用值会导致警告,这是不可取的。将值赋给变量,然后不使用它,只会导致另一个关于未使用变量的警告。对于这种情况,解决方案是通过在调用前加上(void)将结果强制转换为void,例如


这取决于环境(语言、工具、编码标准等)

例如,在C语言中,完全可以调用函数而不使用其值。对于一些函数,比如printf,它返回一个int,它一直都在执行

有时不使用值会导致警告,这是不可取的。将值赋给变量,然后不使用它,只会导致另一个关于未使用变量的警告。对于这种情况,解决方案是通过在调用前加上(void)将结果强制转换为void,例如


实际上,这里有两个独立的问题:

  • 您是否应该关心返回值
  • 是否应该将其分配给不打算使用的变量
  • #2的答案是响亮的“不”——当然,除非你使用的语言是非法的(我想到了早期的Turbo-Pascal)。定义一个变量却把它扔掉,这是绝对没有意义的


    第一部分并不那么容易。通常,返回值是有原因的-对于函数,结果是函数的唯一目的;对于非幂等元,它通常表示某种返回码,表示操作是否正常完成。当然也有例外,比如。

    这里实际上有两个不同的问题:

  • 您是否应该关心返回值
  • 是否应该将其分配给不打算使用的变量
  • #2的答案是响亮的“不”——当然,除非你使用的语言是非法的(我想到了早期的Turbo-Pascal)。定义一个变量却把它扔掉,这是绝对没有意义的


    第一部分并不那么容易。通常,返回值是有原因的-对于函数,结果是函数的唯一目的;对于非幂等元,它通常表示某种返回码,表示操作是否正常完成。当然也有例外,比如。

    在C语言中这是很常见的,但是有些地方这样做是可以的,而有些地方则不是。GCC的更高版本有一个警告,以便在不检查返回值的情况下使用函数时可以得到警告:

    如果具有此属性的函数调用方不使用其返回值,则
    warn\u unused\u result
    属性会导致发出警告。这对于不检查结果可能是安全问题或始终是错误的函数非常有用,例如realloc

         int fn () __attribute__ ((warn_unused_result));
         int foo ()
         {
           if (fn () < 0) return -1;
           fn ();
           return 0;
         }
    
    intfn()uuu属性_uuu((警告未使用的结果));
    int foo()
    {
    if(fn()<0)返回-1;
    fn();
    返回0;
    }
    
    导致第5行出现警告


    上次我使用它时,无法关闭生成的警告,这会在编译不想修改的第三方代码时导致问题。当然,也没有办法检查用户是否真的对返回值做了一些合理的操作。

    在C语言中,这是很常见的,但是有些地方可以这样做,有些地方可以这样做
         int fn () __attribute__ ((warn_unused_result));
         int foo ()
         {
           if (fn () < 0) return -1;
           fn ();
           return 0;
         }