Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 04.02.2004, 13:06   #16
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Quote:
Originally Posted by Agregat
Еще меня интересует один вопрос. Почему не компилится оригинальное приложение?
причина некомпиляции - в дублировании в ENUM-е проги define-ов из библиотеки windows.h "IN, OUT, ..."

PHP Code:
// del2.cpp : Defines the entry point for the console application.
//

#include <windows.h>
#include <stdio.h>

enum Days               // Declare enum type Days
{
    
INOUT,
   
saturday,            // saturday = 0 by default
   
sunday 0,          // sunday = 0 as well
   
monday,              // monday = 1
   
tuesday,             // tuesday = 2
   
wednesday,           // etc.
   
thursday,
   
friday
today;                

int main(int argccharargv[])
{
    
printf("Hello World!\n");
    return 
0;

вот.
Reply With Quote
Old 04.02.2004, 13:32   #17
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

а вот так уже ходит.
[php]
enum Days // Declare enum type Days
{
IN,
OUT,
saturday, // saturday = 0 by default
sunday = 0, // sunday = 0 as well
monday, // monday = 1
tuesday, // tuesday = 2
wednesday, // etc.
thursday,
friday
} today;

#include <windows.h>
#include <stdio.h>


int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}

[php]
Reply With Quote
Old 04.02.2004, 13:59   #18
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

то nm срцы виндовские предлагает копировать, то ты - прогу писать взадом вперед...что такое..
Reply With Quote
Old 04.02.2004, 14:34   #19
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Главное результат!
Reply With Quote
Old 06.02.2004, 23:27   #20
Дошкольник
 
Nemra's Avatar
 
Join Date: 07 2002
Location: South Park
Posts: 82
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Проблема с define-ами под Windows стара как мир. Тот, кто использует STL, знает про min & max, т.е. без всякого нашего вмешательства код windows и stl иногда не компилируется. Мы решили проблему по грубому:

//any .cpp file which includeс <windows.h>, even indirectly
#ifdef min
#undef min
#undef max
#endif

// include STL headers

В вашем случае, если нельзя поменять на что-то вроде MY_IN, MY_OUT, то тоже можно делать нечто подобное.
Reply With Quote
Old 07.02.2004, 08:44   #21
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Quote:
Originally Posted by Nemra
Проблема с define-ами под Windows стара как мир. Тот, кто использует STL, знает про min & max, т.е. без всякого нашего вмешательства код windows и stl иногда не компилируется. Мы решили проблему по грубому:

//any .cpp file which includeс <windows.h>, even indirectly
#ifdef min
#undef min
#undef max
#endif

// include STL headers

В вашем случае, если нельзя поменять на что-то вроде MY_IN, MY_OUT, то тоже можно делать нечто подобное.
на вопрос ответ найден и лежит здесь - цивильное решение моего вопроса.

В любом случае - спасибо за помощь!
Reply With Quote
Old 07.02.2004, 09:37   #22
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Quote:
Originally Posted by Nemra
Проблема с define-ами под Windows стара как мир. Тот, кто использует STL, знает про min & max, т.е. без всякого нашего вмешательства код windows и stl иногда не компилируется. Мы решили проблему по грубому:

//any .cpp file which includeс <windows.h>, even indirectly
#ifdef min
#undef min
#undef max
#endif

// include STL headers

В вашем случае, если нельзя поменять на что-то вроде MY_IN, MY_OUT, то тоже можно делать нечто подобное.
min и max заменяются на __min и __max. После чего тоже все работает.
Reply With Quote
Old 07.02.2004, 10:51   #23
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

2 Agregat :
Reply With Quote
Old 09.02.2004, 06:42   #24
Дошкольник
 
Nemra's Avatar
 
Join Date: 07 2002
Location: South Park
Posts: 82
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by Agregat
min и max заменяются на __min и __max. После чего тоже все работает.
Если работаешь только с Windows, то можешь делать и так, но в общем случае (и в нашем частном), так делать нельзя, так как код должен быть платформо-независимый...
Reply With Quote
Old 09.02.2004, 07:05   #25
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Еще очень интересные вещи возникают если компилировать шаблоные контейнеры MFC с STL.
Reply With Quote
Old 22.03.2004, 20:38   #26
Бакалавр
 
Join Date: 03 2002
Location: Detroit, MI, USA
Posts: 482
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Вы только простую часть проблемы рассматриваете - константы. А если проблемы с обьявлениями классов, например, или функций....
То-то же

Удачи!
Reply With Quote
Old 23.03.2004, 05:53   #27
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 35
Posts: 21,717
Downloads: 2
Uploads: 0
Reputation: 250 | 7
Default

Поэтому я и ратую за namespace - ы.
Reply With Quote
Old 23.03.2004, 09:45   #28
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

Quote:
Originally Posted by Tumanyan
Вы только простую часть проблемы рассматриваете - константы. А если проблемы с обьявлениями классов, например, или функций....
То-то же

Удачи!
дык все уже решено и понято.
Reply With Quote
Old 23.03.2004, 14:29   #29
Бакалавр
 
Join Date: 03 2002
Location: Detroit, MI, USA
Posts: 482
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Default

Quote:
Originally Posted by greka
дык все уже решено и понято.
Несовсем. Решено для простейшего случая: константы, inline функции, и.т.д.
А как нащет ситуации: в заголовке обьявлена функция, причем без использования пространств имен. Исходника функции нет (скомпилированая библиотека). Есть конфликт имен с программой, в которой библиотека используется, или, еще хуже, с другой скомпилированой библиотекой.
Что делать будем?

Кстати, Агрегат, отец русской демократии пусть не надеется на спасение от пространств имен. Торг здесь неуместен, как грится
Reply With Quote
Old 23.03.2004, 20:38   #30
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Default

1. задача на языке "C", т.е. namespace-ами не пахнет.
2. она решена.

ты предлагаешь задачу, где ругается не компиллер, а линкер - я прально понимаю ?

в таком случае нужно задать какую-то хитрую опцию линкеру, возможно..
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 06:26.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.