Reputation:
I decided to familiarize myself with wxWidgets today. I downloaded version 2.8.9 (current release), and compiled the library in all the desired modes.
I am able to build/run the samples that ship with wxWidgets out of the box. However, when I compile with /Za (i.e., language extensions disabled), I get over 100 build errors on even the smallest wxWidgets sample.
I am unable to find any documentation on this issue. Could I define something that will switch wxWidget's internals to be standards compliant (at least as far as VC++'s compliance goes)?
Perhaps I did something wrong while building the original library... Has anyone even encountered this "issue" before?
Thanks!
EDIT: I forgot to mention that I'm using VC++ 9.
Also, here are the first few errors:
------ Build started: Project: minimal, Configuration: Unicode Debug Win32 ------
Compiling...
minimal.cpp
c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2143: syntax error : missing ')' before '*'
c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2143: syntax error : missing ';' before '*'
c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C2059: syntax error : ')'
c:\wxWidgets-2.8.9\include\wx/dynarray.h(69) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C2146: syntax error : missing ';' before identifier 'SCMPFUNC'
c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\wxWidgets-2.8.9\include\wx/dynarray.h(810) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C2146: syntax error : missing ';' before identifier 'SCMPFUNC'
c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
c:\wxWidgets-2.8.9\include\wx/dynarray.h(811) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
EDIT: It looks like the first error's caused by the fact that _cdecl is used. It looks like defs.h only checks if __VISUALC__ is defined. Nothing about pedantism in sight...
Upvotes: 2
Views: 1409
Reputation: 16953
You'll probably find that you won't be able to build even a basic Win32 application, let alone a wxWidgets app, with /Za
, because the Windows Platform SDK headers included with VS2008 use language extensions. The only solution is to disable /Za
.
The specific error you're seeing is because the _cdecl
keyword is a Microsoft extension, and not part of standard C++.
For more information, see the documentation for /Za
, and the Microsoft Extensions to C and C++ and C++ Keywords pages in MSDN.
Upvotes: 5