相关疑难解决方法(0)

typedef固定长度数组

我必须定义一个24位数据char[3]类型.我用来表示类型.我可以的typedef char[3]type24?我在代码示例中尝试过它.我输入typedef char[3] type24;了我的头文件.编译器没有抱怨它.但是当我void foo(type24 val) {}在我的C文件中定义一个函数时,它确实抱怨了.我希望能够定义type24_to_int32(type24 val)代替的函数type24_to_int32(char value[3]).

c arrays gcc typedef

194
推荐指数
6
解决办法
19万
查看次数

访问非活动的union成员和未定义的行为?

我的印象是访问union除最后一个成员之外的成员是UB,但我似乎无法找到一个可靠的参考(除了声称它是UB但没有标准支持的答案).

那么,这是不确定的行为?

c++ undefined-behavior unions language-lawyer

114
推荐指数
4
解决办法
2万
查看次数

为什么strlen()的实现有效?

(声明:我已经看到了这个问题,我不是重新问了-我很感兴趣,为什么代码工作,而不是如何它的工作原理.)

所以,这里的这个实现苹果的(当然,FreeBSD的)strlen().它使用一个众所周知的优化技巧,即它一次检查4或8个字节,而不是与0进行逐字节比较:

size_t strlen(const char *str)
{
    const char *p;
    const unsigned long *lp;

    /* Skip the first few bytes until we have an aligned p */
    for (p = str; (uintptr_t)p & LONGPTR_MASK; p++)
        if (*p == '\0')
            return (p - str);

    /* Scan the rest of the string using word sized operation */
    for (lp = (const unsigned long *)p; ; lp++)
        if ((*lp - mask01) …
Run Code Online (Sandbox Code Playgroud)

c undefined-behavior

20
推荐指数
1
解决办法
1193
查看次数

C++中是否有完整的Implementation-Defined行为列表?

我回答了对我的回答的评论:C求职面试 - 演员和比较,发现我找不到C++认为"实施定义行为"的完整列表.我知道这类事情有3个类别:未定义的行为,实现定义的行为和未指定的行为; 然而,似乎大多数讨论都围绕未定义的行为,并且当讨论实现定义的行为时,最多给出一个例子.一般来说,我倾向于编写很多代码来捕获这个区域,我知道会发生什么样的行为; 我仍然希望能够对其有效性发表评论.我还想抛弃那里,我认为操作社区中有很多误诊是未定义的,而实际上它们是由平台很好地定义的.

请注意,我对给定平台如何选择定义此类行为并不感兴趣,而是对包含C++标准定义的"实现定义"类别中的所有行为的列表感兴趣.

c++ standards

6
推荐指数
1
解决办法
508
查看次数