2013-08-30 13 views
5

Possiamo usare preprocessore sapere se unsigned long long è definito:Come sapere se __uint128_t è definito

#include <limits.h> 

#ifndef ULLONG_MAX 
typedef unsigned long t_mask; 
#else 
typedef unsigned long long t_mask; 
#endif 

Ma come sapere se __uint128_t è definito?

risposta

4

Dal the __uint128_t type is a GCC extension, la cosa corretta da fare è probabilmente controllare la versione di GCC.

See this page per informazioni sui macro utilizzati per verificare la versione del compilatore GCC.

+0

Clang è a conoscenza di esso per sostenere il codice GCC, quindi vorrei propendere per la soluzione di Sparky – user2913094

3

Non mi sono ancora occupato di __uint128_t, ma in base all'utilizzo del pattern esistente, mi aspetto quanto segue.

#include <stdint.h> 

#ifndef UINT128MAX 
    #error "__uint128_t not defined" 
#endif 

Spero che questo aiuti

5

È possibile provare quanto segue. Non so quanto sia affidabile, ma potrebbe essere il modo più semplice.

#ifdef __SIZEOF_INT128__ 
    // do some fancy stuff here 
#else 
    // do some fallback stuff here 
#endif 
-1

trovare il vostro CC1 nella directory/usr/libexec/albero gcc, allora interrogarlo:

 
$ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t 
__uint128_t   (or not) 
Problemi correlati