The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Перенесение кода с Visual C++ на g++, !*! rarelangua.fm, 17-Авг-04, 23:57  [смотреть все]
Всем привет,

Я пишу cross-платформенное (консольное) приложение и столкнулся со следующей проблемой, мой код идеально компилируется в Visual C++ но g++ мне выдает ошибку (вернее их куча, но они идентичные нижеприведенной)
Никаких проблем с непереносимыми функциями у меня нет (все идеально совместимо как с Windows так и с UNIX), но есть куча условностей и разностей в синтаксисе казалось бы стандартизированного С++

Код у меня примерно следующий (он довольно комплексный но пример исчерпывающий)

#define TRY try{
#define CATCH(X) }catch(...){errorstr+="called in - ";errorstr+=X+string(" ");throw;}
#define BEGINSTAT clock_t beginstattime=::clock();
#define ENDSTAT(X) {unsigned int commontime=::clock()-beginstattime;PowerLog(ARGV_PATH_CGI+"performance.log",X##" execution time",commontime,10,true);}

...(далее еще куча всего)

unsigned int DBManagerObject::GetNewMessageId()
{
    TRY
        #ifdef PERFORMANCE_STAT
            BEGINSTAT
        #endif

        unsigned int id;
        FILE* file=fopen(MESSAGESTABLE.c_str(),"r+b");
        fread(&id,sizeof(unsigned int),1,file);
        fclose(file);
        
        #ifdef PERFORMANCE_STAT
            ENDSTAT("GetNewMessageId")
        #endif
        return ++id;
    CATCH("GetNewMessageId")
}

Подскажите мне пожалуйста что хочет сказать g++ выдавая следующую ошибку,-

db.cpp:139:54: pasting ""DBManagerObject::GetNewMessageId"" and "" execution time"" does not give a valid preprocessing token

Я так понимаю вся проблема в макросе:
define ENDSTAT(X) {unsigned int commontime=::clock()-beginstattime;PowerLog(ARGV_PATH_CGI+"performance.log",X##" execution time",commontime,10,true);}
(где PowerLog просто созданный мною класс, но это неважно)

Заранее огромное спасибо за любую помощь

  • Перенесение кода с Visual C++ на g++, !*! Soldier, 08:17 , 18-Авг-04 (1)
    >Я так понимаю вся проблема в макросе:
    >define ENDSTAT(X) {unsigned int commontime=::clock()-beginstattime;PowerLog(ARGV_PATH_CGI+"performance.log",X##" execution time",commontime,10,true);}
    >(где PowerLog просто созданный мною класс, но это неважно)
    >


    На основе вашего кода, я набросал тестовую прогу - все нормально
    откомпилилось (gcc-2.95):

    //------- atest.cpp --------
    #include <time.h>
    #include <stdio.h>
    #include <string>

    string errorstr;
    string ARGV_PATH_CGI = "/tmp/";

    #define PERFORMANCE_STAT

    #define TRY try{
    #define CATCH(X) }catch(...){errorstr+="called in - ";errorstr+=X+string(" ");throw;}
    #define BEGINSTAT time_t beginstattime=time(NULL);
    #define ENDSTAT(X) {unsigned int commontime=time(NULL)-beginstattime;PowerLog(ARGV_PATH_CGI+"performance.log",X##" execution time",commontime,10,true);}

    class PowerLog {
    public:
    PowerLog(string s1, char *s2, int c, int c2, bool c3) {
       cout << s1 << s2 << c << c2 << c3 << '\n';
    }
    };


    class DBManagerObject {
    public:
      DBManagerObject() {;}
    unsigned int GetNewMessageId();
    };

    unsigned int DBManagerObject::GetNewMessageId()
    {

    TRY
    #ifdef PERFORMANCE_STAT
    BEGINSTAT
    #endif

    unsigned int id;
    id=100;
    #ifdef PERFORMANCE_STAT
    ENDSTAT("GetNewMessageId")
    #endif
    return ++id;
    CATCH("GetNewMessageId");
    }

    main() {
    DBManagerObject dbmo;
    cout << "id=" <<  dbmo.GetNewMessageId() << '\n';
    }
    // ------------------




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру