Adding DEPRECATED define
Adding DEPRECATED define
Hi,
what do you think about a DEPRECATED macro which generates a warning/message and can be added to every part which is deprecated. This way the users sees directly what has changed and after some releases the deprecated parts can be dropped. This can help to keep the API small and cute, informs the users and if the "dropintervals" are big enough the backward compatibility wont suffer to much.
what do you think about a DEPRECATED macro which generates a warning/message and can be added to every part which is deprecated. This way the users sees directly what has changed and after some releases the deprecated parts can be dropped. This can help to keep the API small and cute, informs the users and if the "dropintervals" are big enough the backward compatibility wont suffer to much.
referring to http://gcc.gnu.org/onlinedocs/gcc-4.1.2 ... yntax.html and http://msdn.microsoft.com/en-us/library ... S.80).aspx i guess something like this will do it:
Usage:
simple isnt it?
Code: Select all
#if _MSC_VER >= 1400 //vs 2005 or higher
#define _IRR_DEPRECATED __declspec(deprecated)
#elif __GNUC__ >= 3 //not sure if all 3 version support this feature but above 3.1 should
#define _IRR_DEPRECATED __attribute__ ((deprecated))
#else
#pragma message( "this compiler is not supported yet (concerning _IRR_DEPRECATED)." )
#define _IRR_DEPRECATED
#endif
Code: Select all
class X
{
_IRR_DEPRECATED virtual void test() {}
};
struct _IRR_DEPRECATED X
{
};
Excellent idea.
Generated Documentation for BlindSide's irrNetLite.
"When I heard birds chirping, I knew I didn't have much time left before my mind would go." - clinko
"When I heard birds chirping, I knew I didn't have much time left before my mind would go." - clinko
Code: Select all
#if _MSC_VER >= 1300 //vs 2003 or higher
#define _IRR_DEPRECATED __declspec(deprecated)
#elif __GNUC__ >= 3 //not sure if all 3 version support this feature but above 3.1 should
#define _IRR_DEPRECATED __attribute__ ((deprecated))
#else
#pragma message( "this compiler is not supported yet (concerning _IRR_DEPRECATED)." )
#define _IRR_DEPRECATED
#endif
typedef _IRR_DEPRECATED int test1;
typedef _IRR_DEPRECATED int test2;
struct _IRR_DEPRECATED test3
{
};
class Interface
{
public:
_IRR_DEPRECATED virtual void test4() = 0;
};
class Implementation : public Interface
{
public:
void test4() {}
};
int main()
{
test1 var1; //warning
test2 var2; //warning
test3 var3; //warning
Implementation* i = new Implementation;
i->test4();
static_cast<Interface*>(i)->test4(); //warning
delete i;
return 0;
}
Last edited by Nox on Wed Mar 25, 2009 12:09 pm, edited 1 time in total.
-
- Posts: 68
- Joined: Sat May 10, 2008 11:30 am
- Contact:
-
- Admin
- Posts: 14143
- Joined: Wed Apr 19, 2006 9:20 pm
- Location: Oldenburg(Oldb), Germany
- Contact:
Hmm, I thought that MSVC requires that attribute at a different place, and skipped it due to this problem some month ago. So can someone text this with MSVC and tell which warnings are generated?
The #else branch should go without a warning IMHO, as it would be too annoying with other compilers and deprecations in SMaterial or so.
The #else branch should go without a warning IMHO, as it would be too annoying with other compilers and deprecations in SMaterial or so.
well msvc 2008 does #warning not know and this seems to be a GCC only extension. But you are right. #pragma message is not support too. Another really standard way were to add a #error but its a bit hard . But atm i see no other way :-/. May be a simple printf but this wont be shown up at compiletime.
EDIT:
vs2008
EDIT2:
vs2005
well the warning only appears once
EDIT:
vs2008
in fact the msvc need that _declare at spezial places but the __attribute__ can be used more freely.1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\users\nox\desktop\test\main.cpp(29) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(33) : warning C4996: 'test1': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(10) : see declaration of 'test1'
1>c:\users\nox\desktop\test\main.cpp(34) : warning C4996: 'test2': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(11) : see declaration of 'test2'
1>c:\users\nox\desktop\test\main.cpp(35) : warning C4996: 'test3': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(15) : see declaration of 'test3'
1>c:\users\nox\desktop\test\main.cpp(39) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(39) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(33) : warning C4101: 'var1' : unreferenced local variable
1>c:\users\nox\desktop\test\main.cpp(42) : warning C4996: 'test1': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(10) : see declaration of 'test1'
1>c:\users\nox\desktop\test\main.cpp(34) : warning C4101: 'var2' : unreferenced local variable
1>c:\users\nox\desktop\test\main.cpp(42) : warning C4996: 'test2': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(11) : see declaration of 'test2'
1>c:\users\nox\desktop\test\main.cpp(35) : warning C4101: 'var3' : unreferenced local variable
EDIT2:
vs2005
vs 2003 supports its as wellKompilieren...
main.cpp
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(29) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(21): Siehe Deklaration von 'Interface::test4'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(33) : warning C4996: 'test1' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(10): Siehe Deklaration von 'test1'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(34) : warning C4996: 'test2' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(11): Siehe Deklaration von 'test2'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(35) : warning C4996: 'test3' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(15): Siehe Deklaration von 'test3'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(39) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(21): Siehe Deklaration von 'Interface::test4'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(33) : warning C4101: 'var1': Unreferenzierte lokale Variable
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(42) : warning C4996: 'test1' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(10): Siehe Deklaration von 'test1'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(34) : warning C4101: 'var2': Unreferenzierte lokale Variable
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(42) : warning C4996: 'test2' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(11): Siehe Deklaration von 'test2'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(35) : warning C4101: 'var3': Unreferenzierte lokale Variable
EDIT3:Kompilieren...
test2.cpp
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(30) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(23): Siehe Deklaration von 'Interface::test4'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(35) : warning C4996: 'test1' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(12): Siehe Deklaration von 'test1'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(36) : warning C4996: 'test2' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(13): Siehe Deklaration von 'test2'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(37) : warning C4996: 'test3' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(17): Siehe Deklaration von 'test3'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(41) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(23): Siehe Deklaration von 'Interface::test4'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(35) : warning C4101: 'var1': Unreferenzierte lokale Variable
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(44) : warning C4996: 'test1' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(12): Siehe Deklaration von 'test1'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(36) : warning C4101: 'var2': Unreferenzierte lokale Variable
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(44) : warning C4996: 'test2' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(13): Siehe Deklaration von 'test2'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(37) : warning C4101: 'var3': Unreferenzierte lokale Variable
Verknüpfen...
well the warning only appears once