Sto scrivendo un programma multipiattaforma. Voglio che questo programma sia eseguito sia con Windows che con Linux, quindi ho due segmenti di codice diversi per le due piattaforme. Se il sistema operativo è Windows, voglio che venga eseguito il primo segmento di codice; se è Linux, allora voglio che venga eseguito il secondo segmento di codice.Rileva Windows o Linux in C, C++
Così ho scritto il seguente codice, ma si verifica un errore durante la creazione sia su Windows che su Linux. Cosa dovrei fare per risolverlo?
#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;
}
Che tipo di errore? –
E l'errore è? .. – kan
su linux il suo errore di ricezione :: âMEMORYSTATUSEXâ non è stato dichiarato in questo ambito, âstatexâ non è stato dichiarato in questo ambito e in windows :: errore C3861: "popen": identificatore non trovato ... simile come questo .... cosa dovresti fare? – Ronin