是否有一个C宏或某种方式,我可以检查我的C程序是否在C编译时编译为64位或32位?
编译器:GCC我需要进行检查的操作系统:Unix/Linux
如果操作系统能够64位,我怎么能检查运行我的程序?
我有以下代码.sprintf中第二个%d的输出始终显示为零.我想我指的是错误的说明符.任何人都可以帮助我获得具有正确值的写字符串.这必须以posix标准实现.感谢您的投入
void main() {
unsigned _int64 dbFileSize = 99;
unsigned _int64 fileSize = 100;
char buf[128];
memset(buf, 0x00, 128);
sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize);
printf("The string is %s ", buf);
}
Run Code Online (Sandbox Code Playgroud)
输出:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
Run Code Online (Sandbox Code Playgroud) 考虑下面非常简单的代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int* a = (int*) malloc(10 * sizeof(int));
printf("a = %p, a+1 = %p", a, a+1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是这样的:
a = 0x127f190, a+1 = 0x127f194
Run Code Online (Sandbox Code Playgroud)
由于a的大小int是4个字节,我假设从上面的结果开始,指针值就是我RAM内存上一个字节的索引.因此a+1实际上增加a了sizeof(int) = 4(字节)的值.那是对的吗?
如果是,那么为什么我从程序中获得32位内存地址?这台机器是64位运行64位版本的Ubuntu.如何让程序打印完整的64位地址?我是否必须使用特殊标志进行编译?
可能重复:
在C中检测64位编译
我希望我的程序在32位和64位Linux操作系统上运行.所以在我的C代码中,我希望编译器知道何时编译32位和64位架构.所以,我需要这样的东西
#ifdef X64
...
#else
...
#endif
Run Code Online (Sandbox Code Playgroud)
在gcc中有没有这样的定义?