Statement has no effect
-
Was kann ich tun, um bei folgender Funktion die nervigen Warnungen verschiedener Compiler zu unterbinden, wenn *ENABLE_PREFETCH* nicht definiert ist?
inline void GenericPrefetch(char* address) { #if defined(ENABLE_PREFETCH) _mm_prefetch(address, _MM_HINT_T2); _mm_prefetch(address + 64, _MM_HINT_T2); #else // address; // reinterpret_cast<void*> (address); #endif }
-
Sowas grausliges würde zumindest mit GCC und MSVC gehen

#if defined(ENABLE_PREFETCH) #else // Disable MSVC compiler warnings. #if defined(_MSC_VER) #pragma warning(push) // 4100: Unreferenced formal parameter. #pragma warning(disable: 4100) #endif #endif inline void GenericPrefetch(char* address) { #if defined(ENABLE_PREFETCH) _mm_prefetch(address, _MM_HINT_T2); _mm_prefetch(address + 64, _MM_HINT_T2); // 64 bytes ahead #else #endif } #if defined(ENABLE_PREFETCH) #else #if defined(_MSC_VER) #pragma warning(pop) #endif #endif
-
Viele Compiler "verstehen" es - wenn ich mich recht erinnere - wenn man auf
voidcastet (nichtvoid*).
Also#define PROJECTNAME_UNUSED_PARAMETER(x) ((void)(x)) inline void GenericPrefetch(char* address) { #if defined(ENABLE_PREFETCH) _mm_prefetch(address, _MM_HINT_T2); _mm_prefetch(address + 64, _MM_HINT_T2); #else PROJECTNAME_UNUSED_PARAMETER(address); #endif }Wobei ich die "unused parameter" Warnings immer global abgedreht habe. Der potentielle Nutzen ist mir zu klein verglichen mit dem Aufwand.
Auf jeden Fall würde ich es über ein Makro lösen. Wenn ein Compiler dann mal ne andere Syntax braucht um Ruhe zu geben musst du nur eine Stelle ändern.
-
Danke, etwas mit void-cast war's also doch
