小编ary*_*rye的帖子

为什么声明带参数和不带参数的同一个函数不会导致编译错误?

对于代码:

int hi(int);
int hi();
int main()
{
    hi(3);
}
Run Code Online (Sandbox Code Playgroud)

我没有收到任何编译错误(调用hi(); 不带参数确实会出现编译错误)。

我预计编译器会抱怨该函数已经以不同的方式声明了。知道为什么会出现这种行为吗?

c compiler-warnings integer-promotion function-declaration

6
推荐指数
2
解决办法
158
查看次数

编译器是否始终将结构放置在对齐的地址处?

假设我有结构:

typedef struct my_char {
    char c;
} my_char_t;
Run Code Online (Sandbox Code Playgroud)

我可以假设任何时候内存地址都会对齐吗?

我想也许是的,因为在教程中我看到了这样的结构:

typedef struct my_char2 {
    char c;
    int i;
} my_char2_t;
Run Code Online (Sandbox Code Playgroud)

c和之间有填充i,因此看起来假设c是对齐的。

c struct memory-alignment

2
推荐指数
1
解决办法
128
查看次数

不会被优化掉的 Memset 内存

这与这个问题相关:有没有一种方法可以在使用完缓冲区后对其进行内存设置(例如出于安全考虑)而不对其进行优化?

尝试将指针强制转换为易失性指针,收到有关将易失性指针发送到不需要易失性的函数的警告。

c buffer memset

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