I guess, I shouldn't have been surprised to be reading C code in this blog post, but man, even the 'clean' example has quite a bit of cruft, when looking at it from modern languages.
Like, this is the amount of ceremony I consider necessary (pseudo-code):
tracing::listen<ContextSwitch>(event -> {
//process ContextSwitch event here
})