|
|||||||
![]() |
|
|
Thread Tools | Display Modes |
|
|
||||
|
||||
|
|
|
|||
|
Lord Voldermort <nospam@nospam.com> writes:
> Lord Voldermort writes: >> As per subject. >> >> Thanks. >> >> Tom R. > > *BUMP* > > Anyone able to answer this q? I'd have a go if I knew what you meant by "disabled". By the way, 18 minutes is not a long time on Usenet, and "bumping" a thread usually just annoys people. -- Ben. |
|
|||
|
On 2012-02-18, Lord Voldermort <nospam@nospam.com> wrote:
> Lord Voldermort writes: >> As per subject. >> >> Thanks. >> >> Tom R. > > *BUMP* Don't do this; Usenet is not a web bulletin board. |
|
|||
|
Lord Voldermort <nospam@nospam.com> 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. > 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. -- Ben. |
|
|||
|
Ben Bacarisse writes:
> Lord Voldermort <nospam@nospam.com> 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, 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. >> 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. It seems quite wreckless to update C while breaking existing programs and leaving people to re-code manually! |
|
|||
|
Lord Voldermort <nospam@nospam.com> writes:
> Ben Bacarisse writes: >> Lord Voldermort <nospam@nospam.com> 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, 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. There is no such feature. Don't think of this as a "room". A closer metaphor might be distributed broadcast e-mail that anyone can read and write. I read your article on my own computer; there is no central server that would know that. Your article was downloaded by the news server I use (which happens to be news.eternal-september.org), but that's just one of a number of news servers that share information with each other. News servers transmit articles back and forth; they don't track users. There is no central authority. Usenet is older than the World Wide Web; early versions of it didn't even use the Internet. (Modern implementations use the NNTP protocol over TCP/IP.) Hang around for a while; you'll get the hang of it. >>> 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. > > It seems quite wreckless to update C while breaking existing programs and > leaving people to re-code manually! The gets() function in particular is inherently unsafe. It should not have been in the language in the first place, and programmers should never have used it. That's why it was removed from C11. The only programs that removing gets() might break were broken already, and those programs *cannot* be fixed other than by manual recoding. In any case, removing it from the standard doesn't magically remove it from implementations. Implementers are still free to provide it as an extension, or simply because they haven't yet fully implemented C11 (most C compilers haven't fully implemented C99 yet). Note that some implementations already issue warnings for calls to gets() (this particular warning is from the GNU linker): c.c .text+0x52): warning: the `gets' function is dangerous and should not be used.-- Keith Thompson (The_Other_Keith) kst-u@mib.org <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" |
|
|||
|
On Sun, 19 Feb 2012 19:53:43 +0000 (UTC), Lord Voldermort
<nospam@nospam.com> wrote: >It seems quite wreckless to update C while breaking existing programs and >leaving people to re-code manually! Another aioe troll perhaps? While it might be wreckless, it certainly isn't reckless to update the C standard going forward. Revising the standard might break old programs for compilation on new compilers but the medicine is more beneficial than harmful. |
|
|||
|
On Sun, 19 Feb 2012 19:53:43 +0000 (UTC), Lord Voldermort
<nospam@nospam.com> wrote: >Ben Bacarisse writes: >> Lord Voldermort <nospam@nospam.com> 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, 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. > >>> 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. > >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. |
|
|||
|
On Feb 19, 10:54*am, Lord Voldermort <nos...@nospam.com> 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> |
|
|||
|
On Feb 19, 10:54*am, Lord Voldermort <nos...@nospam.com> 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? |
|
|||
|
Robert Wessel <robertwessel2@yahoo.com> writes:
> On Sun, 19 Feb 2012 19:53:43 +0000 (UTC), Lord Voldermort > <nospam@nospam.com> 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) kst-u@mib.org <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" |
|
|||
|
Nick Keighley <nick_keighley_nospam@hotmail.com> writes:
> On Feb 19, 10:54Â*am, Lord Voldermort <nos...@nospam.com> 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. |
|
|||
|
Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
> Nick Keighley <nick_keighley_nospam@hotmail.com> writes: >> On Feb 19, 10:54Â*am, Lord Voldermort <nos...@nospam.com> 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) kst-u@mib.org <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" |
|
|||
|
On Mon, 20 Feb 2012 13:25:52 +0000, Ben Bacarisse wrote:
> Nick Keighley <nick_keighley_nospam@hotmail.com> writes: > >> On Feb 19, 10:54Â*am, Lord Voldermort <nos...@nospam.com> 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 |
|
|
![]() |
| Thread Tools | |
| Display Modes | |
|
|