小编Ale*_*lex的帖子

在C中的printf中,什么是未引用的`PRIu32`?

我正在查看以下代码:

#include <stdio.h>
#include <inttypes.h>

int main()
{
    uint32_t total = 0;

    printf("\tTotal: %"PRIu32"\n\n", total);
    return total;
}
Run Code Online (Sandbox Code Playgroud)

如何PRIu32适应printf语法?我的意思是,我可以猜测,Iu32可能意味着"整数无符号32位".但是,我不确定找到哪种形式man 3 printf可以容纳引号之外的变量 - 以及如何将其推广到引号外的其他语句.

c printf uint32

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

为什么我们不声明可变大小的数组?

我的主管在我的C代码中看到的内容类似于:

size = f(some parameters);
int array[size];
Run Code Online (Sandbox Code Playgroud)

他说最好分配这样的数组malloc.他的描述是这样的:

将它分配到堆栈上需要您的堆栈在程序的整个运行时间内保持有效.

我不知道他的意思是什么,所以这就像我记得在会议结束时他的措辞一样,不知道实际意义.他的意思是什么?(或者,也许有人可以解释不以这种方式声明数组的另一个原因).

c declare

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

如何用C编写旋转代码编译成`ror` x86指令?

我有一些代码可以旋转我的数据.我知道GAS语法有一个可以旋转整个字节的汇编指令.但是,当我尝试遵循C++中循环移位(旋转)操作的最佳实践的任何建议时,我的C代码编译成至少5条指令,这些指令使用了三个寄存器 - 即使在使用-O3进行编译时也是如此.也许那些是C++的最佳实践,而不是C?

在任何一种情况下,如何强制C使用ROR x86指令来旋转我的数据?

未编译到rotate指令的精确代码行是:

value = (((y & mask) << 1 ) | (y >> (size-1))) //rotate y right 1
       ^ (((z & mask) << n ) | (z >> (size-n))) // rotate z left by n
// size can be 64 or 32, depending on whether we are rotating a long or an int, and 
// mask would be 0xff or 0xffffffff, accordingly
Run Code Online (Sandbox Code Playgroud)

我不介意使用__asm__ __volatile__旋转,如果这是我必须做的.但我不知道如何正确地做到这一点.

c x86 assembly gnu-assembler

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

标签 统计

c ×3

assembly ×1

declare ×1

gnu-assembler ×1

printf ×1

uint32 ×1

x86 ×1