Estoy escribiendo un programa multiplataforma. Quiero que este programa se ejecute tanto en Windows como en Linux, así que tengo dos segmentos de código diferentes para las dos plataformas. Si el sistema operativo es Windows, quiero que se ejecute el primer segmento de código; si es Linux, entonces quiero que se ejecute el segundo segmento de código.Detectar Windows o Linux en C, C++
Así que escribí el siguiente código, pero se produce un error al generar tanto en Windows como en Linux. ¿Qué debo hacer para resolverlo?
#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;
}
¿Qué tipo de error? –
Y el error es? .. – kan
en linux es un error: âMEMORYSTATUSEXâ no se ha declarado en este ámbito, âstatexâ no se ha declarado en este ámbito y en Windows :: error C3861: 'popen': identificador no encontrado ... similar a esto .... ¿qué hacer? – Ronin