dovrebbe funzionare anche su mac su linux non sono sicuro, prova al massimo.
Allora fai così:
se è sotto windows: //ovviamente defi usare i #define:
codice:
#ifdef USA_WINDOWS
//blabla
#endif
#ifdef USA_MAC
//etc etc etc
#endif
#ifdef USA_LINUX
//etc
#endif
//ci sono poi define già definiti da compilatore WIN_32 mi pare sia uno di quelli, quindi se metti quelli giusti non serve che stai a inizio programma a scrivere
#define USA_WINDOWS
ma li definisce già il compilatore
ma
Guarda sopra,
se è sotto machintosh
codice:
Bundle = CFBundleGetMainBundle();
path = CFBundleCopyBundleURL(Bundle);
se è sotto linux ho trovato questo codice (che da prima occhiata mi sempre codice standard che va bene per tutti gli OS!)
codice:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char path[256];
char id[256];
sprintf(id, "/proc/%d/exe", getpid());
readlink(id, path, 255);
path[255] = '\0';
printf("%s\n", path);
return 0;
}
Non sei ancora soddisfatto?
Usa le funzioni fornite dalla BOOST:
codice:
boost::filesystem::path curPath = boost::filesystem::current_path();
std::string strPath = curPath.string();
std::cout<<strPath;
e potrei stare qui a elencarti ancora metodi, provali e scegli quello che ti piace di più, la cosa certa è che argv[0] e tutto meno che portabile, quindi se lo vuoi usare, a tuo rischio, io di metodi migliori te ne ho mostrati tanti.