As I remember if(1) evaluates to true and all other numbers including 0
evaluate to false.
But where do I find out about this for sure?? I have looked through K&R, all
the C for dummies books and various other C programming books but nowhere
there is a mention on what a number in an if statement evaluates to.
Is this some kind of big secret?
Nov 15 '05
22 30029
Paminu wrote: As I remember if(1) evaluates to true and all other numbers including 0 evaluate to false.
That would be 0 is false and all other true.
But where do I find out about this for sure?? I have looked through K&R, all the C for dummies books and various other C programming books but nowhere there is a mention on what a number in an if statement evaluates to.
Is this some kind of big secret?
No secret. Any C language reference will tell you: http://www.lysator.liu.se/c/bwk-tutor.html#if
--
Remove '.nospam' from e-mail address to reply by e-mail
Skarmander wrote: Skarmander wrote:
Keith Thompson wrote:
Skarmander <in*****@dontma ilme.com> writes: [...]
Yes: C has no boolean type.
C99 has _Bool (called "bool" with "#include <stdbool.h>") . Pfff. I sort-of semi-deliberately overlooked that, but yes, you're quite right.
You know, for some reason the C99 bool really annoys me. *Now* they fix things? Too late. Leave it alone. Introducing size_t to provide a new level of abstraction was a good thing. But bool? Not worth the bother, with the backwards compatibility tricks they have to pull.
It ticks me off because I'd *like* to use "real" booleans, but if that means requiring a C99 compiler, then no thanks, it's not worth it. Classic chicken and egg story.
The real virtue of the bool type is that it conveys more information
compared to an int used as a boolean type. You never need comments as
"non-zero if... and zero if...". You still need to know though that it
is really just an int and that zero is interpreted as `false' and
non-zero as `true'.
August
Skarmander wrote: Skarmander wrote:
Keith Thompson wrote:
Skarmander <in*****@dontma ilme.com> writes: [...]
Yes: C has no boolean type.
C99 has _Bool (called "bool" with "#include <stdbool.h>") . Pfff. I sort-of semi-deliberately overlooked that, but yes, you're quite right.
You know, for some reason the C99 bool really annoys me. *Now* they fix things? Too late. Leave it alone. Introducing size_t to provide a new level of abstraction was a good thing. But bool? Not worth the bother, with the backwards compatibility tricks they have to pull.
What backwards compatibility tricks?
August
August Karlstrom wrote: Skarmander wrote:
Skarmander wrote:
Keith Thompson wrote:
Skarmander <in*****@dontma ilme.com> writes: [...]
> Yes: C has no boolean type.
C99 has _Bool (called "bool" with "#include <stdbool.h>") .
Pfff. I sort-of semi-deliberately overlooked that, but yes, you're quite right.
You know, for some reason the C99 bool really annoys me. *Now* they fix things? Too late. Leave it alone. Introducing size_t to provide a new level of abstraction was a good thing. But bool? Not worth the bother, with the backwards compatibility tricks they have to pull.
What backwards compatibility tricks?
Rather than just adding "bool", "true" and "false" to the language
(which would break many programs even if they use the "right"
definitions), we've got a new type called _Bool, and if you want to have
it named "bool", you #include <stdbool.h>. Which you'll always do,
unless of course you have to be compatible with an existing unit that
defines "bool".
That's what I call a backwards compatibility trick. (OK, so maybe it's
just one.) _Bool will also be the first keyword beginning with an
underscore.
I don't know. I'm sure it works and is a very practical solution. It's
still ugly to me.
S.
August Karlstrom wrote: Skarmander wrote:
Skarmander wrote:
Keith Thompson wrote:
Skarmander <in*****@dontma ilme.com> writes: [...]
> Yes: C has no boolean type.
C99 has _Bool (called "bool" with "#include <stdbool.h>") .
Pfff. I sort-of semi-deliberately overlooked that, but yes, you're quite right.
You know, for some reason the C99 bool really annoys me. *Now* they fix things? Too late. Leave it alone. Introducing size_t to provide a new level of abstraction was a good thing. But bool? Not worth the bother, with the backwards compatibility tricks they have to pull.
It ticks me off because I'd *like* to use "real" booleans, but if that means requiring a C99 compiler, then no thanks, it's not worth it. Classic chicken and egg story.
The real virtue of the bool type is that it conveys more information compared to an int used as a boolean type. You never need comments as "non-zero if... and zero if...". You still need to know though that it is really just an int and that zero is interpreted as `false' and non-zero as `true'.
Two points. First, yes, I understand the virtue of "bool". Had it been
part of C in the first place, I would be its staunchest defender. It
certainly wouldn't have been anything new: Algol 60 set the example. I
guess K&R just didn't think it was worth including as a separate type --
probably a quirk from C's one-type origins.
Second, exactly because "you still need to know though that it is really
just an int and that zero is interpreted as `false' and non-zero as
`true'", it strikes me as terribly after-the-fact. We can't suddenly
forget about C's booleans-that-are-not-booleans rule -- we have to drag
that nonsense around even with a builtin bool type. The benefit gained
from making your intentions clearer is great, but C has never been a
language that promoted clarity of expression, so I'm not overwhelmed.
S.
August Karlstrom wrote: Skarmander wrote:
The real virtue of the bool type is that it conveys more information compared to an int used as a boolean type. You never need comments as "non-zero if... and zero if...". You still need to know though that it is really just an int and that zero is interpreted as `false' and non-zero as `true'.
To describe something that contains less information as conveying more
is at best silly. Nor do you need such comments any more or any less
with a bool type. Tell me why (I) is any more or less in need of such
comments than (II).
(I)
{
bool equalp();
/* ... */
if (equalp()) { /* ... */ }
/* ... */
if (!equalp()) { /* ... */ }
}
(II)
{
int equalp();
/* ... */
if (equalp()) { /* ... */ }
/* ... */
if (!equalp()) { /* ... */ }
}
In article <43************ ***********@new s.xs4all.nl>,
Skarmander <in*****@dontma ilme.com> wrote: Rather than just adding "bool", "true" and "false" to the language (which would break many programs even if they use the "right" definitions), we've got a new type called _Bool, and if you want to have it named "bool", you #include <stdbool.h>. Which you'll always do, unless of course you have to be compatible with an existing unit that defines "bool".
It feels odd to say this, but I think I would have preferred
that bool, true, and false be always defined in C99, and modules
that use definitions incompatible with this could #include <nostdbool.h>
(or maybe a #define or #pragma) to escape from this.
Actually, it would be neat to have a silent compatibility mode where
modules could create and use their own defininitions of true, false and
bool that are roughly compatibile with stdbool without complaint.
Skarmander <in*****@dontma ilme.com> writes:
[...] That's what I call a backwards compatibility trick. (OK, so maybe it's just one.) _Bool will also be the first keyword beginning with an underscore.
_Complex and _Imaginary were introduced at the same time.
I agree that syntax is ugly, and it's not nearly as good as it would
have been if it had been in the language in the first place, but IMHO
it's still an improvement.
--
Keith Thompson (The_Other_Keit h) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Keith Thompson wrote: Skarmander <in*****@dontma ilme.com> writes: [...]
That's what I call a backwards compatibility trick. (OK, so maybe it's just one.) _Bool will also be the first keyword beginning with an underscore.
_Complex and _Imaginary were introduced at the same time.
Ah, yes. The direly needed complex types. :-) But I'll leave that alone;
I'm not a numerics type so I don't consider myself qualified to judge
its merits.
I agree that syntax is ugly, and it's not nearly as good as it would have been if it had been in the language in the first place, but IMHO it's still an improvement.
When C99 is finally widely established, it probably will be.
S.
Martin Ambuhl wrote: August Karlstrom wrote:
Skarmander wrote:
The real virtue of the bool type is that it conveys more information compared to an int used as a boolean type. You never need comments as "non-zero if... and zero if...". You still need to know though that it is really just an int and that zero is interpreted as `false' and non-zero as `true'.
To describe something that contains less information as conveying more is at best silly. Nor do you need such comments any more or any less with a bool type. Tell me why (I) is any more or less in need of such comments than (II).
(I) { bool equalp(); /* ... */ if (equalp()) { /* ... */ } /* ... */ if (!equalp()) { /* ... */ }
}
(II) { int equalp(); /* ... */ if (equalp()) { /* ... */ } /* ... */ if (!equalp()) { /* ... */ }
}
I assume the p suffix stands for "predicate" , right? This is a kind of
Hungarian notation that is common practice in languages that lacks a
boolean type, e.g. Emacs lisp. With a boolean type there's no need for
obscure naming, we just go:
{
bool equal();
/* ... */
if (equal()) { /* ... */ }
/* ... */
if (!equal()) { /* ... */ }
}
August This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Culley Angus |
last post by:
Just downloaded the latest beta of 2.3, and having a bit of fun playing
with the new goodies, lovely work by the way :)
I was a little suprised to find that I could assign a value to 'True',
and 'False' without warning though, and was wondering if this is deliberate.
For example:
if (1 == True): print "true"
True = 0
if (1 == True): print "true"
|
by: Steven Bethard |
last post by:
I have lists containing values that are all either True, False or None,
e.g.:
etc.
For a given list:
* If all values are None, the function should return None.
|
by: Walter Dnes (delete the 'z' to get my real address |
last post by:
I took a C course some time ago, but I'm only now beginning to use it,
for a personal pet project. My current stumbling-block is finding an
efficient way to find a match between the beginning of a "counted"
string and data in a binary file. Given...
#include <stdio.h>
int main(int argc, char *argv)
{
char bstring;
|
by: mehul |
last post by:
CheckBox template always evaluate to False even if checked in a DataGrid
hosted inside a TabStrip in ASP.NET
Hi,
I am trying to develop an ASP.NET application. I am using TabStrip
(which is part of IE WebControls).
Inside a tab I have a datagrid defined as follows:
|
by: Pierre Quentel |
last post by:
Hi all,
In some program I was testing if a variable was a boolean, with this
test : if v in
My script didn't work in some cases and I eventually found that for v =
0 the test returned True
So I changed my test for the obvious "if type(v) is bool", but I still
find it confusing that "0 in " returns True
| |
by: David T. Ashley |
last post by:
Where is the best place to define TRUE and FALSE?
Are they in any of the standard include files, ever?
Do any standards apply?
What I've traditionally done is something like:
#ifndef (TRUE)
#define TRUE (1)
|
by: nufuhsus |
last post by:
Hello all,
First let me appologise if this has been answered but I could not find
an acurate answer to this interesting problem.
If the following is true:
C:\Python25\rg.py>python
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) on
win32
Type "help", "copyright", "credits" or "license" for more
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
| |
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |