我在一个多线程的c应用程序中发现了这一点。作者评论说,它用于在自定义断言函数中使线程崩溃。GCC对此没有意见,但clang发出了以下警告:
note: consider using __builtin_trap() or qualifying pointer with 'volatile'并且每次使用assert函数时,还会发出其中的一个:
warning: indirection of non-volatile null pointer will be deleted, not trap这里发生什么事情?__builtin_trap是否特定于clang?我应该使用它吗?
发布于 2012-04-14 19:44:01
写入NULL地址并不能保证可靠地使您的程序崩溃,因此请使用GCC introduced __builtin_trap。
看起来clang决定走得更远,完全消除这种写入,几乎迫使你使用__builtin_trap。与__builtin_trap相比,他们将NULL转换为volatile指针的另一种选择看起来并不吸引人,因为这“仅仅”是一种未定义的行为。
发布于 2012-04-14 19:42:29
该语句引发了未定义的行为。具体地说,编译器没有义务尝试在地址0中存储内容,并且可以对此进行优化。这就是编译器告诉你的。
使用exit()或abort()或一些衍生工具来终止整个流程的执行。这是便携的。(C11有exit、_Exit、quick_exit和abort)
https://stackoverflow.com/questions/10153246
复制相似问题