相关疑难解决方法(0)

为什么优化会破坏此功能?

我们最近在大学里开了一个关于多种语言编程特色的讲座.

讲师写下了以下功能:

inline u64 Swap_64(u64 x)
{
    u64 tmp;
    (*(u32*)&tmp)       = Swap_32(*(((u32*)&x)+1));
    (*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);

    return tmp;
}
Run Code Online (Sandbox Code Playgroud)

虽然我完全理解这在可读性方面也是非常差的风格,但他的主要观点是这部分代码在生产代码中运行良好,直到它们实现了高优化级别.然后,代码将什么都不做.

他说,变量的所有赋值tmp都将由编译器优化.但为什么会这样呢?

我知道有些情况下变量需要声明为volatile,这样编译器就不会触及它们,即使他认为它们永远不会被读或写,但我不知道为什么会发生这种情况.

c c++ optimization endianness strict-aliasing

49
推荐指数
3
解决办法
4343
查看次数

声明指针类型?

我刚刚读到我们需要在C(或C++)中声明它们时给出指针类型,即:

int *point ;
Run Code Online (Sandbox Code Playgroud)

据我所知,指针存储变量的地址,并且地址占用相同数量的内存,无论哪种类型.那么,为什么我们需要声明它的类型?

c c++ pointers

42
推荐指数
7
解决办法
2431
查看次数

字符指针和整数指针(++)

我有两个指针,

char *str1;
int *str2;
Run Code Online (Sandbox Code Playgroud)

如果我看一下两个指针的大小,我们假设

str1=4 bytes
str2=4 bytes
Run Code Online (Sandbox Code Playgroud)

str1 ++将增加1个字节,但如果str2 ++它将增加4个字节.

这背后的概念是什么?

c c++ pointers

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

使用[i]和*(a + i)之间有区别吗?

a[i]*(a + i)访问i阵列的第i个元素a.

有理由偏爱一个(性能,可读性等)吗?

c arrays pointers

2
推荐指数
3
解决办法
558
查看次数

标签 统计

c ×4

c++ ×3

pointers ×3

arrays ×1

endianness ×1

optimization ×1

strict-aliasing ×1