相关疑难解决方法(0)

C++多字符文字

我不知道C和C++允许multicharacter literal:不是'c'(C中的int类型和C++中的char),但'tralivali'(类型为int!)

enum
{
    ActionLeft = 'left',
    ActionRight = 'right',
    ActionForward = 'forward',
    ActionBackward = 'backward'
};
Run Code Online (Sandbox Code Playgroud)

标准说:

C99 6.4.4.4p10:"包含多个字符(例如,'ab')的整数字符常量的值,或包含未映射到单字节执行字符的字符或转义序列的值是实现定义的".

我发现它们广泛用于C4发动机.但是,当我们谈论平台独立序列化时,我认为它们并不安全.Thay也会让人感到困惑,因为看起来像字符串.那么什么是多字符文字的使用范围,它们对某些东西有用吗?他们是否只是为了与C代码兼容而使用C++?它们被认为是goto运算符的坏特征吗?

c c++ syntax literals

40
推荐指数
3
解决办法
8537
查看次数

是否有一个C编译器无法编译它?

我在我的探查器中闲逛一段时间试图弄清楚如何加速一个常见的日志解析器,这个解析器在日期解析时遇到瓶颈,我尝试了各种算法来加快速度.

我尝试过的对我来说最快的东西也是迄今为止最具可读性,但可能是非标准的C.

这在GCC,icc和我真正古老而挑剔的SGI编译器中运行良好.因为它是一个非常易读的优化,它不是我想要的吗?

static int parseMonth(const char *input) {
    int rv=-1;
    int inputInt=0;
    int i=0;

    for(i=0; i<4 && input[i]; i++) {
        inputInt = (inputInt << 8) | input[i];
    }

    switch(inputInt) {
        case 'Jan/': rv=0; break;
        case 'Feb/': rv=1; break;
        case 'Mar/': rv=2; break;
        case 'Apr/': rv=3; break;
        case 'May/': rv=4; break;
        case 'Jun/': rv=5; break;
        case 'Jul/': rv=6; break;
        case 'Aug/': rv=7; break;
        case 'Sep/': rv=8; break;
        case 'Oct/': rv=9; break;
        case 'Nov/': rv=10; break;
        case …
Run Code Online (Sandbox Code Playgroud)

c

21
推荐指数
5
解决办法
4710
查看次数

标签 统计

c ×2

c++ ×1

literals ×1

syntax ×1