【问题标题】:How to mark a function with return type not to return?如何用返回类型标记一个函数不返回?
【发布时间】:2012-01-16 02:31:42
【问题描述】:

如果我在一个返回值的函数中没有返回任何东西,编译器会警告该函数没有返回任何东西。

但如果我在函数中调用abort(),编译器不会发出警告。我怎样才能像这样标记自己的函数。

【问题讨论】:

  • 如果不想返回值,让方法返回void。如果您确实想在某些情况下返回一个值,但不是全部,请选择您的返回类型可以采用的值,这意味着“无值”或类似的。当方法需要返回时,你永远不应该故意忽略返回,这是不好的做法,在 Objective-C 中从来没有真正必要。
  • @darvids0n 这通常在调用内部执行@throw 的实用程序函数时需要。
  • 您可以使用[NSException raise] 来完成同样的事情。编译器是否仍然使用这种方法发出警告?
  • 编译器无法识别-raise:... 方法,所以它仍然会发出警告。我想要一个小的内联实用程序函数(或方法),它可以根据上下文自动进行一些前/后处理。
  • 如果你将它包装在 @try/@catch[/@finally] 块中,也许这会消除警告。不管怎样,你似乎很喜欢使用__noreturn__,所以我就这样吧。

标签: objective-c c function function-attributes


【解决方案1】:

__attribute__((__noreturn__)) 应该为 Clang 或 GCC 执行此操作。既然您已经为 Objective-C 标记了您的问题,那应该为您解决问题!

【讨论】:

  • 感谢您提及标准 :)
【解决方案2】:

我检查了abort() 函数并发现了这个属性。

__attribute__((__noreturn__))

我认为这是gcc 特定的扩展名,无论如何这很好用。如果您对标准内容有所了解,请添加另一个答案。谢谢:)

【讨论】:

  • 没有标准的方式来获得不返回函数,因为该概念在语言中不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
相关资源
最近更新 更多