Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

All this hassle can be avoided by using `cleanup` compiler attribute.

Manage classical C resources by auto-cleanup variables and do error-handling the normal way. If everything is OK, pass the ownership of these resources from auto-cleanup variables to C++ ctor.

Note this approach plays nicely with C++ exception, and will enter C standard in the form of `defer`.



Yes, but now your code is no longer C or C++ standards compliant as it relies on compiler-specific attributes, if that matters to the programmer.

Unfortunately, even the Linux kernel is no longer C because they use GCC compiler extensions (and are currently discussing adding MS ones too).


A kernel will make use of asm, and can't abstract over the machine, so it will always be unportable and relying on compiler extensions.


The Linux kernel did not always rely on compiler extensions though...


The kernel once did not need asm? That's a compiler extension, although a popular one.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: