473,534 Members | 2,739 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

multi-character constant

Hi all,

what exactly is the purpose of multi-character constant..???
Nov 21 '07 #1
10 14980
aa*****@gmail.com wrote:
Hi all,

what exactly is the purpose of multi-character constant..???
Do you mean UCN?

--
Tor <bw****@wvtqvm.vw | tr i-za-h a-z>
Nov 21 '07 #2
Tor Rustad wrote:
aa*****@gmail.com wrote:
>Hi all,

what exactly is the purpose of multi-character constant..???

Do you mean UCN?
No. See 6.4.4.4p10: "The value of an integer character constant
containing more than one character (e.g., 'ab'), or containing a
character or escape sequence that does not map to a single-byte
execution character, is implementation-defined."

I have no idea which implementations support meaningful definitions for
multi-character constants, nor what they use them for.I imagine that one
possible form of implementation defined behavior might be to have

int i = 'ab';

have exactly the same effect as

memcpy(&i, "ab", sizeof i);

I'm not sure how useful that would be.
Nov 21 '07 #3
aa*****@gmail.com wrote:
what exactly is the purpose of multi-character constant..???
It's not 100% clear what you mean; an example would be helpful.

If you mean something like 'ab', the best answer is that if you have to
ask, you don't need to know. All the standard says is (C99 6.4.4.4p10):

The value of an integer character constant containing more than
one character (e.g., 'ab') [...] is implementation-defined.

In practice, the value of 'ab' is likely to be either 'a' * 256 + 'b'
or 'b' * 256 + 'a'. It will vary from one compiler to another.

The only place I've seen them actually used is in software for PalmOS,
where, if I recall correctly, they're used to provide unique 16-bit tags
for applications. Something like 'XY' that's related to the name of the
application is easier to remember than a numeric constant. In that
context, the actual value doesn't matter, just that each pair of
characters maps to a consistent and unique integer value. This depends
on every compiler using the same mapping, or on all applications being
compiled with the same compiler.

But a sufficiently perverse compiler could legally have all such
constants have the value 42.

Avoid such constants unless you really need them *and* you're prepared
to deal with the fact that they're inherently non-portable.

--
Keith Thompson (The_Other_Keith) <ks***@mib.org>
Looking for software development work in the San Diego area.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Nov 21 '07 #4
Do not use them.
Nov 21 '07 #5
On Nov 21, 5:53 pm, Keith Thompson <ks...@mib.orgwrote:
aark...@gmail.com wrote:
what exactly is the purpose of multi-character constant..???

It's not 100% clear what you mean; an example would be helpful.

If you mean something like 'ab', the best answer is that if you have to
ask, you don't need to know. All the standard says is (C99 6.4.4.4p10):

The value of an integer character constant containing more than
one character (e.g., 'ab') [...] is implementation-defined.

In practice, the value of 'ab' is likely to be either 'a' * 256 + 'b'
or 'b' * 256 + 'a'. It will vary from one compiler to another.

I don't think that the above argument of yours is correct.

i have seen a program like this:-

#include<stdio.h>
int main(void)
{
char str['11'] = {"work hard"};
printf("%d\n",sizeof(str));
return(EXIT_SUCCESS);
}

and the o/p is given as 12593
now by your reasoning the o/p should be 1*16 +1 = 17 isn't it...???
Nov 22 '07 #6
In article
<e9**********************************@e23g2000prf. googlegroups.com>,
aa*****@gmail.com <aa*****@gmail.comwrote on Thursday 22 Nov 2007
10:45 am:
On Nov 21, 5:53 pm, Keith Thompson <ks...@mib.orgwrote:
>aark...@gmail.com wrote:
what exactly is the purpose of multi-character constant..???

It's not 100% clear what you mean; an example would be helpful.

If you mean something like 'ab', the best answer is that if you have
to
ask, you don't need to know. All the standard says is (C99
6.4.4.4p10):

The value of an integer character constant containing more than
one character (e.g., 'ab') [...] is implementation-defined.


In practice, the value of 'ab' is likely to be either 'a' * 256 + 'b'
or 'b' * 256 + 'a'. It will vary from one compiler to another.

I don't think that the above argument of yours is correct.

i have seen a program like this:-

#include<stdio.h>
int main(void)
{
char str['11'] = {"work hard"};
printf("%d\n",sizeof(str));
return(EXIT_SUCCESS);
}

and the o/p is given as 12593
now by your reasoning the o/p should be 1*16 +1 = 17 isn't it...???
No. By his reasoning it would be:

'1' * 256 + '1'

or

'1' * 256 + '1'

Note the single quotes around 1. The compiler replaces the character
literal with whatever encoding the implementation uses for it. Thus
if '1' is represented by the value 50 (just an example) the expression
would be:

50 * 256 + 50

or

50 * 256 + 50

As Keith said this is implementation dependent behaviour and the
Standard has very little to say about how multi-character character
constants are interpreted.

Apply the above formula and see that Keith conclusion was correct for
ASCII based systems. In the ASCII encoding '1' is represented by the
number 49. Thus:

49 * 256 + 49 = 12593

But you cannot depend on this in general.

Nov 22 '07 #7
On Nov 22, 1:20 am, santosh <santosh....@gmail.comwrote:
In article
<e9cdb748-d18c-49dc-8127-25460bf55...@e23g2000prf.googlegroups.com>,
aark...@gmail.com <aark...@gmail.comwrote on Thursday 22 Nov 2007
10:45 am:
On Nov 21, 5:53 pm, Keith Thompson <ks...@mib.orgwrote:
aark...@gmail.com wrote:
what exactly is the purpose of multi-character constant..???
It's not 100% clear what you mean; an example would be helpful.
If you mean something like 'ab', the best answer is that if you have
to
ask, you don't need to know. All the standard says is (C99
6.4.4.4p10):
The value of an integer character constant containing more than
one character (e.g., 'ab') [...] is implementation-defined.
In practice, the value of 'ab' is likely to be either 'a' * 256 + 'b'
or 'b' * 256 + 'a'. It will vary from one compiler to another.
I don't think that the above argument of yours is correct.
i have seen a program like this:-
#include<stdio.h>
int main(void)
{
char str['11'] = {"work hard"};
printf("%d\n",sizeof(str));
return(EXIT_SUCCESS);
}
and the o/p is given as 12593
now by your reasoning the o/p should be 1*16 +1 = 17 isn't it...???

No. By his reasoning it would be:

'1' * 256 + '1'

or

'1' * 256 + '1'

Note the single quotes around 1. The compiler replaces the character
literal with whatever encoding the implementation uses for it. Thus
if '1' is represented by the value 50 (just an example) the expression
would be:

50 * 256 + 50

or

50 * 256 + 50

As Keith said this is implementation dependent behaviour and the
Standard has very little to say about how multi-character character
constants are interpreted.

Apply the above formula and see that Keith conclusion was correct for
ASCII based systems. In the ASCII encoding '1' is represented by the
number 49. Thus:

49 * 256 + 49 = 12593

But you cannot depend on this in general.
okay you are correct i got the point. but i made a mistake in earlier
post it should have been '1' *256 + '1'

BTW on what basis we are selecting this value of 256...???
Nov 22 '07 #8
aa*****@gmail.com wrote:
....
okay you are correct i got the point. but i made a mistake in earlier
post it should have been '1' *256 + '1'

BTW on what basis we are selecting this value of 256...???
The value of mult-character literals is implementation-defined, 256 is
just part of an example. It's CHAR_MAX+1 if char is unsigned and 8 bits,
a rather common case. In my own example, I side-stepped the character
size and signedness issues by using memcpy(). On bigendian systems where
sizeof(int)==2, my example is equivalent to Keith's.
Nov 22 '07 #9
On Wed, 21 Nov 2007 13:08:07 -0800 (PST), aa*****@gmail.com wrote:
>Hi all,

what exactly is the purpose of multi-character constant..???
Since the implementation is free to define what such a constant
evaluates to, it would seen that the answer to your question depends
on that definition.

If 'ab' will evaluate to 'a' or 'b', then it's only purpose would seem
to be code obfuscation. On the other hand, if it evaluates to some
constant independent of a and b, it doesn't seem to have any purpose.

About the only somewhat useful purpose I can imagine is if
int c = 'ab';
was conceptually equivalent to something along the lines of
int c;
memcpy(&c,"ab",min(sizeof c, strlen("ab"));
with "appropriate" consideration given to endian-ness as well as
excessive or insufficient initialization bytes. But I expect the
number of applications where this has any value to be miniscule.
Remove del for email
Nov 22 '07 #10
Barry wrote:
) About the only somewhat useful purpose I can imagine is if
) int c = 'ab';
) was conceptually equivalent to something along the lines of
) int c;
) memcpy(&c,"ab",min(sizeof c, strlen("ab"));
) with "appropriate" consideration given to endian-ness as well as
) excessive or insufficient initialization bytes. But I expect the
) number of applications where this has any value to be miniscule.

The four-letter chunk identifiers in many file formats come to mind.

I've seen pieces of code similar to this:

switch(read_uint32(stream)) {
case 'ILBM':
/* Do something */
case '8SVX':
/* Do something else */
default:
/* Do nothing */
}

SaSW, Willem
--
Disclaimer: I am in no way responsible for any of the statements
made in the above text. For all I know I might be
drugged or something..
No I'm not paranoid. You all think I'm paranoid, don't you !
#EOT
Nov 22 '07 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

37
4836
by: ajikoe | last post by:
Hello, Is anyone has experiance in running python code to run multi thread parallel in multi processor. Is it possible ? Can python manage which cpu shoud do every thread? Sincerely Yours, Pujo
4
4632
by: Frank Jona | last post by:
Intellisense with C# and a multi-file assembly is not working. With VB.NET it is working. Is there a fix availible? We're using VisualStudio 2003 Regards Frank
12
3846
by: * ProteanThread * | last post by:
but depends upon the clique: http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=954drf%24oca%241%40agate.berkeley.edu&rnum=2&prev=/groups%3Fq%3D%2522cross%2Bposting%2Bversus%2Bmulti%2Bposting%2522%26ie%3DUTF-8%26oe%3DUTF-8%26hl%3Den ...
0
3753
by: frankenberry | last post by:
I have multi-page tiff files. I need to extract individual frames from the multi-page tiffs and save them as single-page tiffs. 95% of the time I receive multi-page tiffs containing 1 or more black and white CCITT4 compressed files (frames) inside the tiff. Every now and then I receive a mixture of black and white CCITT4 and JPEG compressed...
6
8144
by: cody | last post by:
What are multi file assemblies good for? What are the advantages of using multiple assemblies (A.DLL+B.DLL) vs. a single multi file assembly (A.DLL+A.NETMODULE)?
6
4870
by: Joe | last post by:
I have 2 multi-list boxes, 1 displays course categories based on a table called CATEGORIES. This table has 2 fields CATEGORY_ID, CATEGORY_NAME The other multi-list box displays courses based on a table called COURSES. This table has 2 fields CATEGORY_ID, COURSE_NAME. The CATEGORY_ID is a FK in COURSES and a PK in CATEGORIES. I want...
5
5967
by: Shane Story | last post by:
I can seem to get the dimensions of a frame in a multiframe tiff. After selecting activeframe, the Width/Height is still really much larger than the page's actual dimensions. When I split a TIFF to several PNG files this causes a problem, becuase the resulting image is (the page to the far left and a lot of black space surrounding it and...
5
5718
by: bobwansink | last post by:
Hi, I'm relatively new to programming and I would like to create a C++ multi user program. It's for a project for school. This means I will have to write a paper about the theory too. Does anyone know a good place to start looking for some theory on the subject of multi user applications? I know only bits and pieces, like about...
0
2300
by: Sabri.Pllana | last post by:
We apologize if you receive multiple copies of this call for papers. *********************************************************************** 2008 International Workshop on Multi-Core Computing Systems (MuCoCoS'08) Barcelona, Spain, March 4 - 7, 2008; in conjunction with CISIS'08. <http://www.par.univie.ac.at/~pllana/mucocos08>...
1
9287
by: mknoll217 | last post by:
I am recieving this error from my code: The multi-part identifier "PAR.UniqueID" could not be bound. The multi-part identifier "Salary.UniqueID" could not be bound. The multi-part identifier "PAR.UniqueID" could not be bound. The multi-part identifier "PAR.PAR_Status" could not be bound. The multi-part identifier "Salary.New_Salary" could not...
0
7359
marktang
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...
0
7286
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...
0
7528
Oralloy
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. ...
1
7270
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...
0
5821
agi2029
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...
1
5209
isladogs
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...
0
3341
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...
0
3334
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
1747
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 using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.