Free C Compiler on Windows

A

Antoninus Twink

You read on his website what he's claiming, so I don't see your point

He doesn't have a point. He isn't really interested in whether or not
lcc-win conforms to C99 - all he wants is an excuse to do down Jacob.

He seems to believe that just because he is a serial liar and a stranger
to the truth, then everyone else must inhabit the same gutter of
dishonesty that he does.
 
F

Flash Gordon

jacob said:
Look. If you want to get a technical detail of gcc you should buy a
contract of software maintenance with gcc with RedHat for 25 000
dollars/Year.

No, to get any details of gcc just download the source package. If you
want professional support on it you have to pay. If you just want to use
it for free for whatever purpose then you do so.
Obviously when GNU sells consulting for exhorbitant prices that's OK.

GNU does NOT sell it. Some companies sell support. However, if a gcc
developer was posting recommending gcc (and I was aware they were a gcc
developer) then I would point out that they were not independent.
When I sell a licence it is obviously a bad thing.

No, it is NOT a bad thing.
You also sell something to earn your life, either your time as
programmer or a product or whatever. You are ALSO a "vendor" then.

Generally someone in my position is called an employee and it is the
company that employs me that is a vendor. However, I don't mind if you
call me a vendor since it is not an insult.
 
K

Keith Thompson

Richard Heathfield said:
Joachim Schmitz said:


It's simple enough - in one place (his Web site) he's claiming
conformance, and in another place (Usenet) he's claiming
non-conformance. They can't both be right. Which should I believe,
and why?

In addition to this, at times in the past, he has claimed C99
conformance while his compiler has had known and acknowledged
conformance failures. As I recall, he has at times used the phrase
"C99 conformance", or something similar, to refer to something less
than 100% conformance; the fact that a few features that he considered
unimportant were not yet implemented did not stop him from saying or
implying that lcc-win32 is a conforming C99 compiler.

Here's a brief discussion of lcc-win32's C99 status on
comp.compilers.lcc from 2006-08-02:

http://groups.google.com/group/comp.compilers.lcc/browse_thread/thread/882dc4507702ee1e

To summarize, at the time jacob wrote:
| Designated initializers and structure initializers with the
| dot notation are missing.
[...]
| Besides the preprocessor is still missing the variable
| arguments feature.

I've just downloaded and installed the latest version (3.8, Feb 22
2009). A quick test indicates that it does now support these features
that were missing at the time, so perhaps lcc-win does conform to C99
(apart from bugs, which are inevitable in any large software project).
If so, this is great news, and congratulations are in order. (I did
find a case where the compiler chokes on a moderately complicated
initializer. I'll post a bug report to comp.compilers.lcc.)
 
K

Keith Thompson

jacob navia said:
James Kuyper wrote: [...]
So it now has a fully conforming mode in which it diagnosis all uses
of any extensions for which C99 requires a diagnostic?

No, for instance it will accept // comments as you and your stupid
"regulars club" have pointed out.

Huh?

In the recent discussion about accepting // comments, there was one
person ("Tea Pot" or "teapot") complaining about the fact that lcc-win
doesn't issue a diagnostic. The rest of us, including the so-called
"regulars club", were *defending you* against this person's absurd
accusations.

A C99 compiler is required to accept // comments. lcc-win accepts //
comments. There is no conformance issue there.
Anbd yes I WILL NOT FIX THAT since it isn't broken anyway!

Good. We didn't say it was broken.

But it has nothing to do with C99 conformance.

[...]
 
L

lawrence.jones

jacob navia said:
This is a lie since I am not selling anything
The compiler is freely available

I am not a "vendor" moron!

Sure you are! "Vend" has lots of meanings beyond just selling for
money. You publish and promote your compiler and that's vending in the
broad sense of the word.
And lcc-win conforms to C99, and will accept most syntax of C90
when it doesn't contradict with the newer standards.

Does that mean you've finally finished up all the little "unimportant"
bits of full C99 compliance that were still pending?
 
J

James Kuyper

jacob said:
You also sell stuff to earn your life. As everyone does.

This makes you also a vendor.

Essentially 100% of what I sell is my labor, and someone who does that
is called a worker, not a vendor. You are selling the product of your
labor, rather than the labor itself, and as such that makes you a
vendor, at least insofar as your roll as an implementor of C.
What makes me mad is that this work that I have personally developed and
financed and that costs like 500 euros/month to keep going in server
costs and associated expenses makes me a "vendor".


You do not give a dam about that of course, it is my money that is
financing lcc-win as a free service, not yours!!

You're right; I don't care about that; it's your decision about how you
use your money, and it doesn't affect anything that is of interest to
me. But I don't see why you treat the term "vendor" as if it were an insult.
No, for instance it will accept // comments as you and your stupid
"regulars club" have pointed out.

We're talking about C99 conformance here - what part of the C99 standard
mandates diagnostics for // comments? That was an issue only for C90
conformance, and you do not claim C90 conformance (or so I thought?).

The relevant issues for C99 conformance would be the extensions you
provide that allow code which counts as a syntax error or constraint
violation under C99, such as operator overloading. Does lcc-win have a
mode in which it diagnoses such syntax errors or constraint violation,
as it is required to do by the C99 standard? It doesn't have to be the
default mode; it could be invoked with the option
-stupid_C99_mandatory_diagnostics; but it's not a fully conforming
implementation of C99 except when it is invoked in such a mode.
And obviously since I work for free, I have to work according to your
plans?

No, my plans don't have anything to do with it. Your compiler doesn't
have to conform to C99, and I have no plans whatsoever for your
compiler. You can do with it whatever you like. Conform to C99 or not,
as you wish. Define your own extensions, conforming or not. However, if
you claim that it conforms to C99, and that claim is false, criticism is
entirely in order, and I'm willing to provide it. If you would simply
qualify that claim, as gcc does, by listing known non-conforming
features, there would be no problem.
I do whatever I want with my free time. And I do not know what va_list
problem you are talking about. ...

Wasn't the precise date, the newsgroup, and the fact that the message
was about va_list enough information? You don't post a lot of messages
here anymore, a search on those parameters with google only produces one
hit. The relevant words from that message are:
> This will work under lcc-win 32 bits, but will not work for
> lcc-win 64 bits, either under windows or unix. (x86)
>
> The problem is that each access to the va_list needs an inlined
> function call to the extractor since it is no longer a linear list.
> ...
> So you can't pass the address of the va_args data. You have to pass
> the va_args data structure itself.

As Kaz pointed out:
 
J

James Kuyper

Joachim said:
Why don't you just take his word on this?

Experience has shown that jacob has some difficulties with the subtle
details of conformance requirements. For instance, he's correctly aware
of the fact that the C standard allows for extensions, but had to be
convinced of the fact that, in fully conforming mode, a C implementation
must produce at least one diagnostic if the program contains any syntax
errors or constraint violations - even if those occur as the result of
using one of the extensions. That doesn't mean the compiler must reject
such code - the diagnostic message could say "Congratulations for making
use of lcc-win's extension allowing operator overloading!". However, a
diagnostic of some kind is required. It's still not entirely clear
whether he fully understands this point.
 
C

CBFalconer

jacob said:
No, for instance it will accept // comments as you and your stupid
"regulars club" have pointed out.

Anbd yes I WILL NOT FIX THAT since it isn't broken anyway!

If you haven't noticed, the C99 standard accepts // as a single
line comment marker. However C90 doesn't. You might wish to read
the standard. See below.
And obviously since I work for free, I have to work according to
your plans? I do whatever I want with my free time. And I do not
know what va_list problem you are talking about. It was a minor
problem with a declaration that I fixed. A declaration like "long
long unsigned int". That was parsed as unsigned int and that is
fixed. Now is parsed as unsigned long long.

No, but most maintainers of software keep track of bugs, when they
were reported, and when (if ever) they were fixed.

Some useful references about C:
<http://www.ungerhu.com/jxh/clc.welcome.txt>
<http://c-faq.com/> (C-faq)
<http://benpfaff.org/writings/clc/off-topic.html>
<http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf> (C99)
<http://cbfalconer.home.att.net/download/n869_txt.bz2> (pre-C99)
<http://www.dinkumware.com/c99.aspx> (C-library}
<http://gcc.gnu.org/onlinedocs/> (GNU docs)
<http://clc-wiki.net/wiki/C_community:comp.lang.c:Introduction>
<http://clc-wiki.net/wiki/Introduction_to_comp.lang.c>
 
C

CBFalconer

jacob said:
.... snip ...

Look. If you want to get a technical detail of gcc you should buy
a contract of software maintenance with gcc with RedHat for 25 000
dollars/Year.

Obviously when GNU sells consulting for exhorbitant prices that's
OK. When I sell a licence it is obviously a bad thing.

For your information, RedHat is not GNU. RedHat are allowed to
sell anything they own, which includes their skill at analysing
gcc. The source for gcc is freely available. You can download it,
and compile it, and own a fresh copy of gcc. You can even sell it,
if you can find a sucker that wants to pay for what is freely
available.

However you do not make the source of lcc-win32 freely available.
This prevents anybody from improving it. This is your right, but
don't put it in the same class as GNU gcc.
 
C

CBFalconer

Richard said:
Joachim Schmitz said:

Because he himself seems to be in some doubt.
.... snip ...

In addition it is virtually impossible to tell his versions apart.
There seems to be no way to determine it, other than the date on
the object file, which is easily altered. This was the situation
some years ago, possibly he has improved it.
 
J

jacob navia

James said:
Essentially 100% of what I sell is my labor, and someone who does that
is called a worker, not a vendor. You are selling the product of your
labor, rather than the labor itself, and as such that makes you a
vendor, at least insofar as your roll as an implementor of C.


You're right; I don't care about that; it's your decision about how you
use your money, and it doesn't affect anything that is of interest to
me. But I don't see why you treat the term "vendor" as if it were an
insult.


We're talking about C99 conformance here - what part of the C99 standard
mandates diagnostics for // comments? That was an issue only for C90
conformance, and you do not claim C90 conformance (or so I thought?).

The relevant issues for C99 conformance would be the extensions you
provide that allow code which counts as a syntax error or constraint
violation under C99, such as operator overloading. Does lcc-win have a
mode in which it diagnoses such syntax errors or constraint violation,
as it is required to do by the C99 standard? It doesn't have to be the
default mode; it could be invoked with the option
-stupid_C99_mandatory_diagnostics; but it's not a fully conforming
implementation of C99 except when it is invoked in such a mode.


No, my plans don't have anything to do with it. Your compiler doesn't
have to conform to C99, and I have no plans whatsoever for your
compiler. You can do with it whatever you like. Conform to C99 or not,
as you wish. Define your own extensions, conforming or not. However, if
you claim that it conforms to C99, and that claim is false, criticism is
entirely in order, and I'm willing to provide it. If you would simply
qualify that claim, as gcc does, by listing known non-conforming
features, there would be no problem.


Wasn't the precise date, the newsgroup, and the fact that the message
was about va_list enough information? You don't post a lot of messages
here anymore, a search on those parameters with google only produces one
hit. The relevant words from that message are:


As Kaz pointed out:
James Kuyper wrote:
Wasn't the precise date, the newsgroup, and the fact that the message
was about va_list enough information? You don't post a lot of messages
here anymore, a search on those parameters with google only produces one
hit. The relevant words from that message are:

[snip]

You are confused, and my compiler is compliant.

va_arg macros take an OBJECT of type va_list, not a pointer to that object.

If you pass a pointer to a va_list object, to be able to use it you have
to dereference that pointer making a copy of the pointed to va_list object.

Obviously you can do that as many times as you want, the original object
remains untouched and when the called function returns, the function
will not see any of the modifications done within the called function.

Example:

void foo(va_list *pva_list);

within the function1:

void function1(void)
{
va_list f = va_start(arg2);
va_list *pva_list = &f;

foo(pva_list);
}

void foo(va_list *pva_list)
{
va_list f = *pva_list; // Dereference pointer making a COPY

int m = va_arg(f, int);

}

To be able to use the va_arg macro you need a va_list OBJECT, not a
pointer. Obviously YOU CAN pass a pointer but you can't pass that
pointer to a va_arg macro since the prototype of that macro is:

type va_arg(va_list ap,type);

(C99 standard 7.15.1.1). It takes an object, not a pointer.

There are no problems with my implementation.
 
J

jacob navia

jacob said:
void function1(void)
{
va_list f = va_start(arg2);

Nonsense, that should have been:

void function1(int arg1, int arg2,...)
{
va_list f = va_start(arg2);
....
 
J

jacob navia

CBFalconer said:
... snip ...

In addition it is virtually impossible to tell his versions apart.
There seems to be no way to determine it, other than the date on
the object file, which is easily altered. This was the situation
some years ago, possibly he has improved it.

lcc -v

OK?
 
C

Chris M. Thomasson

karthikbalaguru said:
Hi,

I find many compilers available in internet.
I would like to know the best Free C Compiler
on a Windows machine.

Has anyone analyzed that ?

Why not use a compiler created by the same follks who created Windows:

http://www.microsoft.com/Express


;^)


Anyway, I would personally download multiple compilers and get your code to
compile correctly on all of them. It tends to help out with "portability".
 
A

Antoninus Twink

You're right; I don't care about that; it's your decision about how you
use your money, and it doesn't affect anything that is of interest to
me.

Of course not!

After all, you and your kind only care about the Standard in and of
itself. Any actual implementations of that Standard simply "aren't of
interest to you".

It's this sort of blind stupidity that has led to the current C Standard
being a white elephant that no one is interested in implementing (after
all, you don't care about their work, so why should they care about
yours?), all the while keeping antiquated cruft and garbage like gets()
hanging around for ever more.
 
J

jacob navia

Antoninus said:
It's this sort of blind stupidity that has led to the current C Standard
being a white elephant that no one is interested in implementing (after
all, you don't care about their work, so why should they care about
yours?), all the while keeping antiquated cruft and garbage like gets()
hanging around for ever more.

They included gets() in the next version of the standard, a proposal
presented some months ago. ALl they would do is to add a tiny footnote
saying that that function is "obsolescent". Getting rid of it would be
too much change for the standard.

Ina similar way they refuse to get rid of the buffer overflow in the
code of the asctime() function.

The argument for asctime() is that since the standard can't have a
buffer overflow, if you find one... well, it is implicit that the values
you are using are illegal!

The only reason they are publishing a nesw standard is that according to
ISO rules if a standard group doesn't publish anything in 10 years it
becomes obsolete.
 
R

Richard

CBFalconer said:
If you haven't noticed, the C99 standard accepts // as a single
line comment marker. However C90 doesn't. You might wish to read
the standard. See below.

You bitter, jealous, vindictive cretin. Jacob provides a FREE compiler
and you point HIM to standards? All you have written is a crappy gets
substitute which is incredibly poorly laid out and, frankly, nothing
more than a first year student would be asked to write in any reputable
project.

No, but most maintainers of software keep track of bugs, when they
were reported, and when (if ever) they were fixed.

I'm sure we can all learn from your professional Pascal projects. Why do
you bother?
 
O

Old Wolf

Yes, if you like, although normally the term is used for those who
sell software (or whatever) on a commercial basis rather than an
employment basis. If he sells a product, yes, he vends that
product. You sell lcc-win32 (EVEN THOUGH you also give it away),
and that makes you a vendor. It's not a dirty word.

I'd feel uncomfortable too if I were
accepting money for lcc-win32, TBH.
 
L

lawrence.jones

jacob navia said:
Ina similar way they refuse to get rid of the buffer overflow in the
code of the asctime() function.

You persist in misunderstanding -- that is *not* "the code of the
asctime() function", it is an illustration of the algorithm to be used
by the asctime() function. Yes, it happens to look a lot like C code
since that was the simplest way to describe the algorithm, but no where
is there even a hint that implementations should use that code verbatim.
The only reason they are publishing a nesw standard is that according to
ISO rules if a standard group doesn't publish anything in 10 years it
becomes obsolete.

No, the existing standard can be reaffirmed if no changes are deemed
necessary.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,233
Members
46,820
Latest member
GilbertoA5

Latest Threads

Top