2013-08-30 13 views
5

Możemy użyć preprocesor wiedzieć czy unsigned long long jest zdefiniowana:Jak wiedzieć, czy __uint128_t definiuje

#include <limits.h> 

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

Ale skąd wiedzieć, czy __uint128_t jest zdefiniowana?

Odpowiedz

4

Od the __uint128_t type is a GCC extension, właściwym rozwiązaniem jest prawdopodobnie sprawdzenie jakiejś znanej dobrej wersji GCC.

See this page po informacje o makrach używanych do sprawdzania wersji kompilatora GCC.

+0

Clang jest świadomy tego, aby wspierać kodu GCC, więc skłaniam się w kierunku rozwiązania Sparky za – user2913094

3

Nie zajmowałem się jeszcze __uint128_t, ale w oparciu o istniejące wzorce, oczekiwałbym następujących rzeczy.

#include <stdint.h> 

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

Nadzieja to pomaga

5

Można spróbować wykonać następujące czynności. Nie wiem, jak wiarygodne to jest, ale może to być najłatwiejszy sposób.

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

znaleźć CC1 w/usr/libexec/gcc drzewie, a następnie przesłuchać go:

 
$ strings /usr/libexec/gcc/x86_64-redhat-linux/4.6.3/cc1 | grep uint128_t 
__uint128_t   (or not) 
Powiązane problemy