简体   繁体   English

C预处理程序的替换和串联

[英]C preprocessor substitution and concatenation

I am trying to define 我正在尝试定义

#define tokenBits 32
typedef inttokenBits_t Token;
typedef int#tokenBits#_t Token;
typedef int##tokenBits##_t Token;
typedef int###tokenBits###_t Token;
const tokenBase=numeric_limits<Token>::min()

How should I define it in order to get 我应该如何定义它才能得到

typedef int32_t Token;

Where is exactly written the way of functioning of #define (I found texts both none gives the full vision). 确切地写在#define的工作方式上(我发现文本都没有给出完整的视野)。

My suggestion: 我的建议:

#define CONCAT(a,b,c) a ## b ## c
#define MYINT_TYPE(tokenBits) CONCAT(int, tokenBits, _t)

typedef MYINT_TYPE(tokenBits) Token;

Use a macro: 使用宏:

#define BIT_AWARE_TYPEDEF(bitness, type, result) typedef type##bitness##_t result;

Less configurability: 较少的可配置性:

#define TOKEN(bitness) typedef int##bitness##_t Token;

use template: 使用模板:

template <std::size_t N> struct sized_int;

template<> struct sized_int<32> { using type = int32_t; };
template<> struct sized_int<64> { using type = int64_t; };

#define tokenBits 32

using Token = typename sized_int<tokenBits>::type;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM