Am 16.01.2013 11:11, schrieb Gert Doering:
> Hi,
> 
> On Tue, Jan 15, 2013 at 09:03:07PM +0200, Athanasios Douitsis wrote:
>> Trying to compile 2.3 with visual studio 2010. I am getting the following
>> error:
>>
>> init.c(186): error C2143: syntax error : missing ';' before 'type'
>> [C:\openvpn4\openvpn-build\msvc\build.tmp\openvpn-2.3_master\src\openvpn\openvpn.vcxproj]
>>
>> (after that there are many many more errors, but you get the idea)
> 
> Oh well, we've done it again...

User reply follows, Developer reply after next quote:

Arguably, Visual Studio is broken if it does not accept the then-current
version of ISO 9899, which would have been C99 for anything except
VS2012 that should support C11, but reality differs, and
<http://stackoverflow.com/questions/146381/visual-studio-support-for-new-c-c-standards>
contains a few links to official info.

If something has really failed to catch on with many commercial
compilers, then I fear C99 is to carry this red light. :-(

If the code is really type-safe and -clean in C++ terms, you may have
some success with convincing VS to compile in C++ mode - but this needs
typecasts for virtually everything that deals with void * - but there
are some things in C99 that are incompatible with (at least the most
widely implemented pre-C++11 variants of) C++, such as variable-length C
arrays.

>   if (management)
>     {
>       gc = gc_new ();
>       struct buffer out = alloc_buf_gc (256, &gc);
> 
> ... this is not allowed in visual studio (having a variable declaration
> after "non-declaration" code), but gcc doesn't complain, so we usually
> don't notice.



You can make gcc complain, -pedantic -std=c89 should do it, or if you
are not enabling additional compiler warnings, -pedantic-errors.
  And it possibly causes tons of other warnings because it nukes system
extensions from the compilation environment.

What I personally usually do is to test with various different compilers
and configurations:

1. do not configure the source directory (or call "make distclean")

2. mkdir _build _build-c89 _build-clang _build-icc

3. for each $DIR of these new directories, do:

    3a. cd $DIR

    3b. ../configure CC="gcc"
(or CC="gcc -std=c89 -pedantic" or "clang" or "icc" or... you name it) -
you can also add CFLAGS, LDFLAGS, CPPFLAGS as you see fit, stuff -m32 to
compile 32-bit code on 64-bit systems that support it (some Linux
distributions would work - if they offer you i686 packages to install on
your x86_64, they are usually ready; such as: Debian if you stay away
from aptitude, and Fedora, for instance).

    3c. make -sj4 check (use higher numbers for machines with more than
4 CPU cores)

where
 - icc is Intel's compiler package that keeps changing names more often
than I chase new versions
 - clang is Apple's LLVM-based free-and-open-source compiler which gives
decent and useful hints, but defaults to C99 mode

Best regards,
Matthias

Reply via email to