如何在C ++中#define一个字符

时间:2016-01-30 18:31:57

标签: c++

我需要在C ++中定义一个字符。现在我有:

#define ENQ (char)5

有没有办法定义一个类似于如何使用l后缀定义long的字符(例如5l)?

3 个答案:

答案 0 :(得分:5)

强制转换,它没有运行时影响,但您可以使用\x转义序列直接定义任何值的字符常量,以十六进制字符代码指定字符 - 对于非打印或扩展字符。

#define ASCII_ENQ `\x5`

但是在C ++中你最好使用const(具有显式类型):

static const char ASCII_ENQ = 5 ;

static const char ASCII_ENQ = '\x5' ;

如果您努力寻求完整的类型协议(非必要)。

答案 1 :(得分:1)

例如,字符文字'a'

#define ALPHA 'a'
#define FIVE_CHAR '5'

答案 2 :(得分:1)

你也可以使用User-defined literals并写下这样的内容:

#include <iostream>

const char operator ""_ch( unsigned long long i) {
    return i;
}

int main() {
    char enq = 5_ch;
    char alpha = 65_ch;

    cout << alpha << '\n';

    return 0;
}

但对于你可以更容易表达的东西来说,这有点过分:

const char ENQ = 5;

除非你真的试图做一些棘手的事情:

#include <iostream>

// convert a number (a figure) to its ASCII code
const char operator ""_ch( unsigned long long i) {
    return i < 10 ? i + 48 : 48;
}

int main() {
    char num_as_char = 5_ch;

    std::cout << num_as_char << '\n';
    // which outputs 5
    return 0;
}