我正在编写一个跨平台程序。我希望这个程序可以在Windows和Linux上运行,所以对于两个平台,我有两个不同的代码段。如果操作系统是Windows,则我希望第一个代码段可以运行;如果是Linux,那么我要运行第二个代码段。
所以我写了下面的代码,但是在Windows和Linux上构建时都会出错。我该怎么解决?
#ifdef __unix__ /* __unix__ is usually defined by compilers targeting Unix systems */
#define OS_Windows 0
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#elif defined(_WIN32) || defined(WIN32) /* _Win32 is usually defined by compilers targeting 32 or 64 bit Windows systems */
#define OS_Windows 1
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define DIV 1048576
#define WIDTH 7
#endif
int main(int argc, char *argv[])
{
if(OS_Windows)
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
_tprintf (TEXT("There is %*ld %% of memory in use.\n"),
WIDTH, statex.dwMemoryLoad);
}
else if(!OS_Windows) // if OS is unix
{
char cmd[30];
int flag = 0;
FILE *fp;
char line[130];
int memTotal, memFree, memUsed;
flag=0;
memcpy (cmd,"\0",30);
sprintf(cmd,"free -t -m|grep Total");
fp = popen(cmd, "r");
while ( fgets( line, sizeof line, fp))
{
flag++;
sscanf(line,"%*s %d %d %d",&TotalMem, &TotalUsed, &TotalFree);
}
pclose(fp);
if(flag)
printf("TotalMem:%d -- TotalUsed:%d -- TotalFree:%d\n",TotalMem,TotalUsed,TotalFree);
else
printf("not found\n");
}
return 0;
}
通常是这样完成的(或多或少):
#ifdef _WIN32
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define DIV 1048576
#define WIDTH 7
#endif
#ifdef linux
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#endif
int main(int argc, char *argv[])
{
#ifdef _WIN32
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
_tprintf (TEXT("There is %*ld %% of memory in use.\n"),
WIDTH, statex.dwMemoryLoad);
#endif
#ifdef linux
char cmd[30];
int flag = 0;
FILE *fp;
char line[130];
int TotalMem, TotalFree, TotalUsed;
flag=0;
memcpy (cmd,"\0",30);
sprintf(cmd,"free -t -m|grep Total");
fp = popen(cmd, "r");
while ( fgets( line, sizeof line, fp))
{
flag++;
sscanf(line,"%*s %d %d %d",&TotalMem, &TotalUsed, &TotalFree);
}
pclose(fp);
if(flag)
printf("TotalMem:%d -- TotalUsed:%d -- TotalFree:%d\n",TotalMem,TotalUsed,TotalFree);
else
printf("not found\n");
#endif
return 0;
}
这样,只有在Linux平台上才编译linux的代码,而只有Windows平台上才编译Windows的代码。
问题内容: 是否有C宏或某种方式可以检查我的C程序在C编译时是编译为64位还是32位? 编译器:我需要检查的GCC操作系统:Unix / Linux 另外,在运行程序时如何检查操作系统是否支持64位? 问题答案: 由于您标记了此“ gcc”,请尝试
我想识别在UserControl内的TextBox上按下的Ctrl+e键,因为这是使用textbox_KeyDown(对象发送者,KeyEventArgs e)事件并检查以下条件 有人能帮帮我吗。提前致谢
问题内容: 我在测试应用程序中成功实现了OpenCV平方检测示例,但是现在需要过滤输出,因为它很乱-还是我的代码错误? 我对减少偏斜(如那样)和进一步处理的四个角落很感兴趣…… 码: 编辑17/08/2012: 要在图像上绘制检测到的正方形,请使用以下代码: 问题答案: 这是反复出现的主题,由于我找不到相关的实现,因此决定接受挑战。 我对OpenCV中存在的squares演示进行了一些修改,下面生
当我运行命令< code>rake compile时,我很难弄清楚为什么我的rb_define_singleton和rb_define_method调用会中断。 首先,一个问题可能是我不确定最后一个整数参数实际上代表什么,以便决定使用什么值,我无法找到解释这一点的文档,但我觉得我只是猜测在那里,但问题似乎在第3个参数中,所以我担心的是 其次,我的构建失败,在调用时出现以下错误: 使编译../../
我正在尝试为我的大学工作制作一个基于2D平台的游戏(在SFML)。我不是要求任何人为我编写一些代码,但如果有人能提供一些指示,我将非常感激:) 目前我有大约13门课,包括: BaseEntity(大多数游戏对象都是由此派生的) 玩家(继承自BE) 魔法宝石(玩家需要这些来通过关卡晋级) 平台 SolidBlock(从平台继承) 可以说,我已经构建了大部分的游戏“积木”--每个类都有自己的更新函数,
本文向大家介绍如何在Windows中的Eclipse上设置C / C ++?,包括了如何在Windows中的Eclipse上设置C / C ++?的使用技巧和注意事项,需要的朋友参考一下 步骤1-安装MinGW GCC或Cygwin GCC 要将Eclipse用于C / C ++编程,您需要一个C / C ++编译器。在Windows上,您可以安装MinGW GCC或Cygwin GCC。如果不确