Hello,
I saw in some open source projects a use of "!!" in "C" code;
for example:
in some header file
#define event_pending(v ) \
(!!(v)->vcpu_info->evtchn_upcall_ pending & \
!(v)->vcpu_info->evtchn_upcall_ mask)
whereas evtchn_upcall_p ending is of type unsigned char
(and also evtchn_upcall_m ask is of type unsigned char).
What does "!!" operator do in this case ? Any ideas?
MR
Jan 18 '06
43 2754
"Keith Thompson" <ks***@mib.or g> wrote in message
news:ln******** ****@nuthaus.mi b.org... "pemo" <us***********@ gmail.com> writes: <snip>
So is (value, 0) (i.e., a comma operator). It turns a scalar value into 1 or 0. It just happens to be 0.
What's the point here?I believe that Keith was just pointing out that your specification of what !! does was incomplete. What he wrote met your specification but would generally be pointless in real code (there are potentially some exceptions) and does not do what !! does.
If that *IS* the case, it seems um, rather unnecessarily pedantic - I believe that what I said was clear enough - and corrrect in as far as it went: and I also didn't say it was the only way to do something .... so why point out alternatives? Maybe it's necessary to produce litanies containing alternative possibilities for each non-exhaustive statement ever made here sometimes?
(A number of attributions were snipped. I wrote the text starting with "So is (value, 0)", pemo wrote the text starting with "What's the point here?", and Flash Gordon wrote the text starting with "I believe that Keith was". Please leave attributions in place. Thanks.)
After this reply, I'll try and remember to simply enter any further replies
I make to posts at the bottom of any existing text - and then let others
either ignore my posts, or else figure out to what it is I might be
referring - seems like I'll never get the hang of this process, and if I'm
black-flagged, knobbled, f**ked up the ass [or whatever the proper 'in the
know' usenet term is] by some for not posting correctly, at least I won't be
committing the ultimate sin: top posting.
What you wrote was:
!! is a good way of turning a scalar value into 1 or 0.
That's not a useful specification unless you also specify *when* it yields 0 and when it yields 1. By itself, it doesn't provide any clue of why you'd want to turn a scalar value into 1 or 0. I was just emphasizing the fact that !! maps 0 to 0 and all non-zero mappings to 1. There are many many other possible mappings.
By itself, it doesn't provide any clue of why you'd want to turn a scalar value into 1 or 0.
'By itself' - yes - which is why I then gave an example (malloc).
Whether I was being overly pedantic is a matter of opinion, of course. I likely wouldn't have bothered mentioning it if I weren't commenting on other things in your article.
> printf("%p\n", (void *)"boo"); > > will output some value that's not 0, and very unlikely to be 1, e.g., > 0040300
It will output some implementation-specific sequence of printing characters. The sequence may or may not look like a number.
Can you explain this comment too? Is it an allusion to some obscure minutiae in the std, like "In reality, an implementation is free to encode an address such that it is displayed in egyptian hieroglyphics"?
One very common format of output is something like "1234:5678" , another is something like "0x12345678 ". <snip>
Ah, so it was as I expected - an allusion to some obscure minutiae [well, it is isn't it - letter-of-the-law-correct-or-not] that seems picky and generally non-constructive. The two examples you gave look like numbers to me. And I would hazard a guess that most every compiler outputs something similar - even if it doesn't *have to*. So, saying that a compiler *could* output this in a braille encoding of the morse-code interpretation of egyptian hieroglyphics is kinda like saying that there is a remote possibility that you *could* pick up a book which is written in English - but that you can't read - because the author decided to choose a remote vocabulary and to 'encode' his/her prose in such an impenetrable way as it make it more or less impossible. Both situations *could* exist, but both are, in reality, unlikely to - so what's the point in making a noise about it?
No, this is not "some obscure minutiae", this is part of a basic understanding of the language.
Here's what the standard says about the "%p" format for the *printf() functions:
The argument shall be a pointer to void. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner.
There's also some wording for the *scanf() functions saying that it can read the same format produced by *printf().
There is no implication that the output looks anything like a number, and portable code cannot depend on any particular output format.
Ok, so this is where the problem is - although the OP might not give a
flying f**k about it, as they also might possibly not give the same for
portability - you're saying that I should have added ...
"will output some value that's not 0, and very unlikely to be 1, e.g.,
0040300. But remember that nothing is said in the C stds about the actual
output here, so you might see output that's in a format that you might not
readily understand for example, some version of printf might output cockney
rhyming slang! - "two fat ladies, two rubber ducks, and a ton" (meaning
8822100 in base 10)"
"pemo" <us***********@ gmail.com> writes: "Flash Gordon" <sp**@flash-gordon.me.uk> wrote in message news:kr******** ****@news.flash-gordon.me.uk...
[...] You think x86 based machines are obscure minutiae?
No, not that! [see also below], rather that the comment I thought uneccesary, *was* (IMHO)
It was essentially 'pulling me up' for stating that the output *might* be 0040300 [or 0123456, or 123, or 342342342342342 34] - and that I didn't add some, 'oh, and it might just be in output in hieroglyphics on your implementation' !
Maybe the point was made so that some 'knumb nuts' didn't get the wrong end of the stick, or maybe it was made just to remind someone [who I don't know] that the output might actually be different from the example - maybe it was just made to personally annoy me - I dunno, but it pissed me off anyway!
I did not intend to be offensive. In fact, I don't believe that I
was, and I'm surprised that you took offense. Feel free to interpret
my comments as a helpful commentary on what you wrote rather than as a
correction. And grow a thicker skin.
--
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.
pemo wrote: "Flash Gordon" <sp**@flash-gordon.me.uk> wrote in message news:kr******** ****@news.flash-gordon.me.uk... pemo wrote:
Please quote properly and leave in the attribution lines. If OE gives you problems you can try searching for and using QuoteFix. You were quoting properly previously and this time I'm going to fix it. Sorry, I'm a terrible poster, and I'll look at QuoteFix.
I would not class you as a terrible poster. The terrible posters are
those who make no effort or deliberately go against convention. You may
make mistakes, but you are attempting to do it correctly. That puts you
on the good side rather than the bad. To make it clear, I have reason to
suspect that OE sometimes does the wrong thing even when users have done
their best to configure it correctly, but I've heard from people I
respect that QuoteFix helps to make OE behave nicely. Flash Gordon wrote: pemo wrote:
<snip> printf("%p\n", (void *)"boo"); >>> >>> will output some value that's not 0, and very unlikely to be 1, e.g., >>> 0040300 >> It will output some implementation-specific sequence of printing >> characters. The sequence may or may not look like a number. > Can you explain this comment too? Is it an allusion to some obscure > minutiae in the std, like "In reality, an implementation is free to > encode an address such that it is displayed in egyptian hieroglyphics"? One very common format of output is something like "1234:5678" , another is something like "0x12345678 ". <snip> Ah, so it was as I expected - an allusion to some obscure minutiae [well, it You think x86 based machines are obscure minutiae?
No, not that! [see also below], rather that the comment I thought uneccesary, *was* (IMHO)
That is not the way your comment that I was making "an allusion to some
obscure minutiae" reads to me. <shrug>
It was essentially 'pulling me up' for stating that the output *might* be 0040300 [or 0123456, or 123, or 342342342342342 34] - and that I didn't add some, 'oh, and it might just be in output in hieroglyphics on your implementation' !
No, it was not you picking a number, but your wording read to me as
implying it would be a simple number.
Maybe the point was made so that some 'knumb nuts' didn't get the wrong end of the stick, or maybe it was made just to remind someone [who I don't know] that the output might actually be different from the example - maybe it was just made to personally annoy me - I dunno, but it pissed me off anyway!
It wasn't made to annoy you, or to show you up, or anything like that. is isn't it - letter-of-the-law-correct-or-not] that seems picky and generally non-constructive. The two examples you gave look like numbers to me. And I would hazard a guess that most every compiler outputs something Numbers do not have colons in the middle, at least not in any representation I've come across and "(null)" is definitely *not* a number which was another example I gave but you snipped.
Yes, my phd wasn't wasted - and I've noticed that numbers don't have numbers in the middle **using standard notation [see below]** - but they *can* have camels in the middle if *you* want them to - and if you want to use such notation personally - as some legal characterisatio n of some abstract scalar view of the world.
If you put a camel in the middle it won't look like a number to most
people, it will look like 2 numbers separated by a camel. Just as two
numbers seperated by a colon looks like two numbers separated by a colon
to most people.
Which comes back to a problem with this ... if the output can be anything, well, we ought to always include standard disclaimers about *any* claim we make here regarding *any* output. Ridiculus - so, lets point it out when it's properly pertinent, and not just when we just feel the urge to bump our gums, and add some white noise into the system?
For most things the output cannot be anything, but letting people who
don't know any better think that pointers are basically the same as
numeric types is dangerous. Numbers do not have colons in the middle
Actually, that's rubbish, as I used them for many years with segmented architectures - such numbers then meant as much to me - as in they had an intuitive meaning for me (as 123 does now/then). This last bit is a little like the 'pulling up' I had
Show a "number" with a colon in the middle to a mathematician and they
won't think of it as a number. Explain to them that 0010:0000 is the
same as 0000:0010 because you multiply the number before the colon by 16
and add it to the other and they will probably consider it to be two
numbers separated by an operator. Most of the people I've talked to
about x86 systems would also consider it to be two numbers, a segment
and an offset, not as one number, and as an ex-assembly language
programmer there have been times when the distinction has been very
important.
'Actually the output of pemo's mathematics will be a pemo implementation-specific sequence of printing characters [maybe]. The sequence may or may not look like any number you're used to'
Well, your explicit statement that the value would not be 0 is not
necessarily correct and so should not have been stated as fact, and I
know of systems where it is very easy to end up with a pointer to
address 1 (and possibly 0 as well, but I can't be certain of that since
I can't remember what was used for a null pointer) since it is normal
memory at that address. Had you not said what values it would not be I
might not have bothered commenting, but that combined with the rest of
what you were saying looked to me like it would read to the naive as if
pointers where just integers.
--
Flash Gordon
Living in interesting times.
Although my email address says spam, it is real and I read it.
pemo wrote: "Keith Thompson" <ks***@mib.or g> wrote in message
.... snip ... (A number of attributions were snipped. I wrote the text starting with "So is (value, 0)", pemo wrote the text starting with "What's the point here?", and Flash Gordon wrote the text starting with "I believe that Keith was". Please leave attributions in place. Thanks.)
After this reply, I'll try and remember to simply enter any further replies I make to posts at the bottom of any existing text - and then let others either ignore my posts, or else figure out to what it is I might be referring - seems like I'll never get the hang of this process, and if I'm black-flagged, knobbled, f**ked up the ass [or whatever the proper 'in the know' usenet term is] by some for not posting correctly, at least I won't be committing the ultimate sin: top posting.
The other sin is failing to snip. The count of '>' marks on the
left keeps track of the attributee (with a one-off error :-) You
should also try to keep your line width under 72 (I use 67).
Notice how I have removed attribution lines only for material
totally excised. See the following references. http://www.netmeister.org/news/learn2quote.html http://www.catb.org/~esr/faqs/smart-questions.html http://www.greenend.org.uk/rjk/2000/06/14/quoting.html http://www.i-hate-computers.demon.co.uk/ http://web.ukonline.co.uk/g.mccaugha...ks/uquote.html http://www.cs.indiana.edu/docproject/zen/zen-1.0_6.html
--
"If you want to post a followup via groups.google.c om, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers." - Keith Thompson
More details at: <http://cfaj.freeshell. org/google/> This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Mehul Patel |
last post by:
Our .Net team have been pondering about using keyword.
We are using streams FileStream and BufferedStream. We use using
keyword at FileStream, and not BufferedStream which wraps FileStream.
So bunch of people said what if exception occurs buffered stream is
not closed.
My Argument is over advantages of using 'Using' keyword.
First Advantage being -- Using used for Dispose (Deterministic
|
by: rawCoder |
last post by:
Hi All,
I have a *.cer file, a public key of some one and I want to encrypt some
thing using this public key.
Can someone point me to a sample code for Encrypting some file using
X509Certificate ( *.cer file ) so that it can be used to email as
attachment.
The real part is Encrypting using X509Certificate and CryptoServiceProvider.
|
by: Mike |
last post by:
When trying to compile (using Visual Web Developer 2005 Express Beta;
frameworkv2.0.50215 ) the source code below I get errors (listed below due to
the use of ICallBackEventHandler. Ultimately I want to use a callback from
the client side to update webcontrols based on user input without using
postback.
I am seeking a way to stop the compile errors.
using System;
using System.Data;
|
by: Marshall Mills |
last post by:
As I understand it, loaded statement, a using declaration should be all I
need to see an enum from within a namespace. The below code works fine with
class, struct, and union. What gives? As the code says, if I employ the
using directive, I'm ok.
/* built with Visual C++ 6, SP 5 */
namespace Traffic
{
enum Light { red, yellow, green };
}
|
by: Christopher Benson-Manica |
last post by:
Why can't I use a class destructor in a using declaration:
using MyClass::~MyClass;
?
--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
| |
by: beliavsky |
last post by:
Many of my C++ programs have the line
using namespace std;
but the "Accelerated C++" book of Koenig and Moo has many examples
where the library names are included one at a time, for example
using std::cin;
using std::cout;
|
by: trying_to_learn |
last post by:
im in the primary stages of learning C++. The book im learning from says
Dont use using namespace.. directive in header file
However im trying to make the following header file.I need to include
<string> header file and also will have to say using namespace std to
make the string class visible.
qn)how do i resolve the requirement of *not* using the "using" directive
in the header file and at the same time declare my structure in the...
|
by: Petter Reinholdtsen |
last post by:
I ran into a problem on HP-UX 11.00 the other day, where it refused to
compile a program using 'using namespace std;' at the top. The reason
seem to be that the compiler refuses to accept 'using namespace std;'
unless the std namespace was declared first.
This triggered my curiosity, and I tried to find out what the ANSI C++
standard had to say about this. I'm unable to find a conclusion, and
hope someone here have a clue to spare.
...
|
by: john.burton.email |
last post by:
I've done some extensive searching and can't seem to find an answer to
this -
Is it correct to using "using" with templates, for example:
using std::vector;
Or do I need to specify the type too:
using std::vector<int>;
Both seem to "work" on the compiler I have and I can't find any
documentation saying which is correct, or are both correct?
|
by: Enos Meroka |
last post by:
Hallo,
I am a student doing my project in the university.. I have been trying
to compile the program using HP -UX aCC compiler, however I keep on
getting the following errors.
=================================================================
Error 19: "CORBAManagerMessages.h", line 4 # Unexpected 'std'.
using std::string;
^^^
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
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: 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: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |