Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Has Implicit Int been disabled in the new C11 standard? What aboutother previously depreciated constructions eg gets?

Reply
Thread Tools

Has Implicit Int been disabled in the new C11 standard? What aboutother previously depreciated constructions eg gets?

 
 
Stephen Sprunk
Guest
Posts: n/a
 
      02-19-2012
On 19-Feb-12 13:53, Lord Voldermort wrote:
> Ben Bacarisse writes:
>> Lord Voldermort <(E-Mail Removed)> writes: <snip>
>>> Thx for the info Keiht, sorry about breech of protocol - didnt see a
>>> way to tell how many ppl are in this room so didnt know whether it was
>>> empty or ppl just missed my post.

>>
>> Have a read of this: http://en.wikipedia.org/wiki/Usenet to get an
>> overview.

>
> Didnt have time to read all that,


Yet you're perfectly willing to waste dozens to thousands of potential
readers' time with your misunderstanding? How rude of you.

> but just flicking through I didnt see anything about listing other
> people currently in this room/browsing the forum/whatever you want to
> call it.


That's because that's not how USENET works; it is not a live chat room.
Your message (slowly) spreads from server to server around the world,
and those who are interested will read it when they get around to
checking for new messages on their server, which might be hours, days or
even years later. Do not expect a response within minutes.

Incidentally, with modern threaded newsreaders, replying to your own
post does not "bump" it. And failed attempts to do so are more likely
to make readers dismiss your question rather than help you, so don't do
that.

>>> So is there any translation program then to take code for the previous
>>> standard and upgrade it to work with C11 (replace gets by fgets etc)?

>>
>> In a way, yes. Your compiler can help if you if you ask for conformance
>> to a specific standard. That is likely to flag up problems, but it
>> won't fix them, of course. Some, like calls to gets, can't be fixed
>> automatically because the problem is that the function just does not
>> have enough information to do a safe job. Each call needs to be looked
>> at by someone who understands the code.
>>
>> If the code is very old (pre-C90, often called K&R C) you'd have to have
>> a good reason to update it because the move to prototypes alters the way
>> a function is called in subtle ways. If in doubt, ask about that
>> specifically.

>
> Are you sure about this? Industry best practise is -- if possible, be
> backwards compatable; if that can't be done, provide an automatic
> updater. This has always been the case eg with Visual Basic.


That has not been the case for any programming language I've used, but I
was never forced to deal with VB.

The usual model is that features are deprecated (meaning they still
work, but you shouldn't use them, and compilers may complain if you do)
for a version or two before being officially removed.

> It seems quite wreckless to update C while breaking existing programs and
> leaving people to re-code manually!


ISO goes to great lengths to reduce the impact of this, and generally
only does so when the feature is so unsafe that leaving it in would be
more reckless than removing it.

Also, some compilers (eg. gcc) offer the ability to compile your program
according to a specific version of the standard, not just the latest
one. So, if your program is "broken" by a newer version of the
standard, eg. C11, you can just tell the compiler to use an older one,
eg. C89 or C99. You only need to fix your program if you want to take
advantage of the new features in the later version.

S

--
Stephen Sprunk "God does not play dice." --Albert Einstein
CCIE #3723 "God is an inveterate gambler, and He throws the
K5SSS dice at every possible opportunity." --Stephen Hawking
 
Reply With Quote
 
 
 
 
Nick Keighley
Guest
Posts: n/a
 
      02-20-2012
On Feb 19, 10:54*am, Lord Voldermort <(E-Mail Removed)> wrote:

> Thx


try to avoid text-speak

> for the info Keiht,


try to spell peoples' names correctly

> sorry about breech of protocol


that's "breach"- your spelling refers to trousers

> - didnt see a way
> to tell how many ppl are in this room


it isn't a room it's a usenet group

> so didnt know whether it was empty
> or ppl just missed my post.


<snip>
 
Reply With Quote
 
 
 
 
Nick Keighley
Guest
Posts: n/a
 
      02-20-2012
On Feb 19, 10:54*am, Lord Voldermort <(E-Mail Removed)> wrote:

> So is there any translation program then to take code for the previous
> standard and upgrade it to work with C11 (replace gets by fgets etc)?


fgets() isn't a straight replacement for gets(). The end-of-line
handling is different. I also suspect the "translation program" would
have to read your mind in some cases in order to get the buffer size
right for fgets(). Do you use gets() a lot, or use programs that do?
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      02-20-2012
Robert Wessel <(E-Mail Removed)> writes:
> On Sun, 19 Feb 2012 19:53:43 +0000 (UTC), Lord Voldermort
> <(E-Mail Removed)> wrote:

[...]
>>Are you sure about this? Industry best practise is -- if possible, be
>>backwards compatable; if that can't be done, provide an automatic
>>updater. This has always been the case eg with Visual Basic.
>>
>>It seems quite wreckless to update C while breaking existing programs and
>>leaving people to re-code manually!

>
> You've misunderstood Ben. The addition of function prototypes in the
> language did not break existing programs. What may cause somewhat
> subtle problems if you change your K&R style function declarations to
> prototypes. There are case where the obvious prototype will cause
> somewhat different behavior, and cases where the exact behavior cannot
> be matched at all (although such are usually indicative of other
> problems). But you can just leave your K&R style declarations as-is,
> and nothing breaks.


Not quite.

Non-prototype declarations are still in the language, up to and
including the 2011 standard (and have been obsolescent since C89).
But C99 removed implicit int, which did break existing code
(though the fix was straightforward and fixed code could still be
compatible with pre-ANSI compilers). C11's removal of gets() also
broke existing code (though such code was already arguably broken).

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
Will write code for food.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
Ben Bacarisse
Guest
Posts: n/a
 
      02-20-2012
Nick Keighley <(E-Mail Removed)> writes:

> On Feb 19, 10:54*am, Lord Voldermort <(E-Mail Removed)> wrote:
>
>> So is there any translation program then to take code for the previous
>> standard and upgrade it to work with C11 (replace gets by fgets etc)?

>
> fgets() isn't a straight replacement for gets(). The end-of-line
> handling is different. I also suspect the "translation program" would
> have to read your mind in some cases in order to get the buffer size
> right for fgets(). Do you use gets() a lot, or use programs that do?


If you simply must get your gets-containing code to run today, you can use:

#define gets(s) (scanf("%[^\n]%*c", (s)) == 1 ? (s) : NULL)

but you should fix it tomorrow! (Not you personally, of course, but
"one" is sometimes too formal for Usenet).

--
Ben.
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      02-20-2012
Ben Bacarisse <(E-Mail Removed)> writes:
> Nick Keighley <(E-Mail Removed)> writes:
>> On Feb 19, 10:54*am, Lord Voldermort <(E-Mail Removed)> wrote:
>>> So is there any translation program then to take code for the previous
>>> standard and upgrade it to work with C11 (replace gets by fgets etc)?

>>
>> fgets() isn't a straight replacement for gets(). The end-of-line
>> handling is different. I also suspect the "translation program" would
>> have to read your mind in some cases in order to get the buffer size
>> right for fgets(). Do you use gets() a lot, or use programs that do?

>
> If you simply must get your gets-containing code to run today, you can use:
>
> #define gets(s) (scanf("%[^\n]%*c", (s)) == 1 ? (s) : NULL)
>
> but you should fix it tomorrow! (Not you personally, of course, but
> "one" is sometimes too formal for Usenet).


If you simply must get such code running *today*, you can just
leave the gets() call in place. I don't believe there are yet any
hosted C implementations that don't provide it.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
Will write code for food.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
Quentin Pope
Guest
Posts: n/a
 
      02-21-2012
On Mon, 20 Feb 2012 13:25:52 +0000, Ben Bacarisse wrote:
> Nick Keighley <(E-Mail Removed)> writes:
>
>> On Feb 19, 10:54*am, Lord Voldermort <(E-Mail Removed)> wrote:
>>
>>> So is there any translation program then to take code for the previous
>>> standard and upgrade it to work with C11 (replace gets by fgets etc)?

>>
>> fgets() isn't a straight replacement for gets(). The end-of-line
>> handling is different. I also suspect the "translation program" would
>> have to read your mind in some cases in order to get the buffer size
>> right for fgets(). Do you use gets() a lot, or use programs that do?

>
> If you simply must get your gets-containing code to run today, you can
> use:
>
> #define gets(s) (scanf("%[^\n]%*c", (s)) == 1 ? (s) : NULL)
>
> but you should fix it tomorrow! (Not you personally, of course, but
> "one" is sometimes too formal for Usenet).


Does that mean that the identifier gets has been returned to the user's
namespace? That sounds like a recipe for confusion if people try to mix
old code with C11 code that uses gets for something unrelated to the
original function.

//QP
 
Reply With Quote
 
James Kuyper
Guest
Posts: n/a
 
      02-21-2012
On 02/21/2012 02:51 PM, Quentin Pope wrote:
....
> Does that mean that the identifier gets has been returned to the user's
> namespace? ...


Yes. In the new standard, gets() is only mentioned in two places:
Forward: as something that has been removed.
Footnote 440: as something to compare gets_s() to.

Therefore, it is no longer counts as one of the identifier referred to
by 7.1.3p1.

> ... That sounds like a recipe for confusion if people try to mix
> old code with C11 code that uses gets for something unrelated to the
> original function.


True, but all of the other reserved identifiers are either generically
reserved to implementation for certain purposes, specifically reserved
for current standard-defined uses, or specifically reserved in
anticipation of future standard-defined uses. There's no precedent for
adding a specific obsolete identifier to the reserved list - and this
version of the standard establishes a precedent for not doing so.

For the next decade or two, any decent C2011+ compiler will probably
have an option that warns about user-provided definitions of 'gets', but
I wouldn't recommend counting on that in the long-term.

 
Reply With Quote
 
Jens Gustedt
Guest
Posts: n/a
 
      02-22-2012
Hello,

Am 02/21/2012 09:11 PM, schrieb James Kuyper:
> On 02/21/2012 02:51 PM, Quentin Pope wrote:
> ...
>> Does that mean that the identifier gets has been returned to the user's
>> namespace? ...

>
> Yes. ...
>
> For the next decade or two, any decent C2011+ compiler will probably
> have an option that warns about user-provided definitions of 'gets', but
> I wouldn't recommend counting on that in the long-term.


Probably this is just something that nobody thought about, since it
never happened before. Sounds like a good point for a DR.

Jens
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      02-22-2012
Jens Gustedt <(E-Mail Removed)> writes:
> Am 02/21/2012 09:11 PM, schrieb James Kuyper:
>> On 02/21/2012 02:51 PM, Quentin Pope wrote:
>> ...
>>> Does that mean that the identifier gets has been returned to the user's
>>> namespace? ...

>>
>> Yes. ...
>>
>> For the next decade or two, any decent C2011+ compiler will probably
>> have an option that warns about user-provided definitions of 'gets', but
>> I wouldn't recommend counting on that in the long-term.

>
> Probably this is just something that nobody thought about, since it
> never happened before. Sounds like a good point for a DR.


It's unlikely that nobody thought about it. I seem to recall it being
discussed in comp.std.c.

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
Will write code for food.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
I'm intrigued that Python has some functional constructions in the language. Casey Hawthorne Python 21 05-11-2009 07:56 AM
The printing has been stopped and this job has been add to the queu? dejola Computer Support 6 12-30-2005 03:26 AM
ASP.NET Forms Authentication - How to Know if User Has Previously Been Authenticated David Krussow ASP .Net 2 01-17-2005 05:19 PM
int main(int argc, char *argv[] ) vs int main(int argc, char **argv ) Hal Styli C Programming 14 01-20-2004 10:00 PM
dirty stuff: f(int,int) cast to f(struct{int,int}) Schnoffos C Programming 2 06-27-2003 03:13 AM



Advertisments