我正在查看以下代码:
#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代码中看到的内容类似于:
size = f(some parameters);
int array[size];
Run Code Online (Sandbox Code Playgroud)
他说最好分配这样的数组malloc.他的描述是这样的:
将它分配到堆栈上需要您的堆栈在程序的整个运行时间内保持有效.
我不知道他的意思是什么,所以这就像我记得在会议结束时他的措辞一样,不知道实际意义.他的意思是什么?(或者,也许有人可以解释不以这种方式声明数组的另一个原因).
我有一些代码可以旋转我的数据.我知道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__旋转,如果这是我必须做的.但我不知道如何正确地做到这一点.