c - Swapping 2 function pointers without a temporary variable -


swapping 2 void pointers easy without using memory:

void* p1; void* p2;  //...  p1 = ((uintptr_t)p1) ^ ((uintptr_t)p2); p2 = ((uintptr_t)p1) ^ ((uintptr_t)p2); p1 = ((uintptr_t)p1) ^ ((uintptr_t)p2); 

but swap function pointers must use pointer? (as not guaranteed fit integer type).

void (*p1)(); void (*p2)();  //...  void (*tmp)() = p1; p1 = p2; p2 = tmp; 

can give me example of portable method swap function pointers without using temporary variable?

i think works, because aliasing through (unsigned) char allowed:

void (*p1)(); void (*p2)();  (size_t = 0; < sizeof(p1); ++i) {     ((unsigned char *)&p1)[i] ^= ((unsigned char *)&p2)[i] } (size_t = 0; < sizeof(p2); ++i) {     ((unsigned char *)&p2)[i] ^= ((unsigned char *)&p1)[i] } (size_t = 0; < sizeof(p1); ++i) {     ((unsigned char *)&p1)[i] ^= ((unsigned char *)&p2)[i] } 

Comments

Popular posts from this blog

How has firefox/gecko HTML+CSS rendering changed in version 38? -

android - CollapsingToolbarLayout: position the ExpandedText programmatically -

Listeners to visualise results of load test in JMeter -