[tor-dev] Building TOR using Visual Studio

Nick Mathewson nickm at freehaven.net
Sat Oct 18 02:29:02 UTC 2014


On Fri, Oct 17, 2014 at 5:01 PM, Erik de Castro Lopo
<mle+tools at mega-nerd.com> wrote:
> teor wrote:
>
>> I just looked over this patch and it looks safe and simple to commit
>> (haven't have a chance to compile it yet though).
>> The correct order of declaration, asserts, and initialisation /
>> assignment has been preserved in the code.
>>
>> If we commit this patch, we should probably change the C standard compiler
>> flags to in the autoconf scripts to C89 as well. (Do we set those?)
>>
>> This would stop any more C99 sneaking in...
>
> The vast majority of Vladimir's patch was fix something call Mixed Declarations
> eg:
>
>       int i = 0 ;
>       printf ("%d\n", i) ;
>       int j = 1 ;
>
> You can disallow these mixed declarations in C99 code using -Wdeclaration-after-statement
> which is probably better than downgrading everything to C89 for comaptibilty
> with one compiler.

Well, we've actually had that warning in place in Tor for a long time.
We turned it off recently in the master branch. See Sebastian's
message above above about the tickets where we turned it off, in
particular:

https://trac.torproject.org/projects/tor/ticket/13233
https://trac.torproject.org/projects/tor/ticket/13230

The question here isn't, "What do we need to do to keep compatibility
with C89" -- we've been doing that for ages.  The question is, "Is
there a compelling reason to maintain compatibility with C89 that
overrides the benefits of modernizing a little bit."

Keep in mind that C99 is 15 years old now.  Staying with C89 today
feels rather a lot like staying with K&R C 15 years after C89 was
standardized.  Sure, some projects still were (and still are!) written
in K&R style, but by 2004 it had become pretty uncommon.

Right now, the most compelling cases for staying with C89 I've heard are:

  * Some people want to use paid versions of Visual Studio, and have
paid for a version earlier than VS2013, and don't want to pay for a
newer one.  I sympathize with this: I've been on paid upgrade
treadmills myself, and it's always tempting to save money by skipping
steps in the upgrade treadmill.  I've even paid for commercial
compilers in my misspent youth.

  * Some compilers for weird old hardware have never been upgraded to
even rudimentary C99 support, and trying to build code with those
weird old compilers is a good way to expose some bugs. I sympathize
with this too: there was one guy who would always compile new versions
of Tor on his old Irix boxes, and he always turned up a new warning or
two when he did.

Do we have any other cases to think about here?

Personally, I think I'm still inclined to say that the day for a more
modern style has arrived.

> People should also be aware than even though VS2013 claims some C99 compatibility
> my recollection is that it still does not provide a standards conforming snprintf
> implementation.

Not to worry; we fake our own snprintf if the platform snprintf isn't
comformant enough.

-- 
Nick


More information about the tor-dev mailing list