Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

What does the C syntax /##/ mean?

Posted on 2006-10-30
3
Medium Priority
?
204 Views
Last Modified: 2010-04-15
This is the whole macro:

#if (ducCAN1_MODE_CHKPARAM == 0)
#define PRM /##/
#else
#define PRM
#endif

Thank you very much

Richard
0
Comment
Question by:Actia
  • 2
3 Comments
 
LVL 30

Assisted Solution

by:callrs
callrs earned 300 total points
ID: 17832630
PRM could be defined as any string besides /##/. Do you have the code where PRM is actually used? That would give a clue as to what /##/ is being used for.

More on #define: http://www.sysprog.net/cdefine.html
0
 
LVL 85

Accepted Solution

by:
ozo earned 1200 total points
ID: 17832664
6.10.3.3 The ## operator
Constraints
A## preprocessing token shall not occur at the beginning or at the end of a replacement
list for either form of macro definition.
Semantics
If, in the replacement list of a function-like macro, a parameter is immediately preceded
or followed by a ## preprocessing token, the parameter is replaced by the corresponding
argument’s preprocessing token sequence; however, if an argument consists of no
preprocessing tokens, the parameter is replaced by a placemarker preprocessing token
instead.148)
For both object-like and function-like macro invocations, before the replacement list is
reexamined for more macro names to replace, each instance of a ## preprocessing token
in the replacement list (not from an argument) is deleted and the preceding preprocessing
token is concatenated with the following preprocessing token. Placemarker
preprocessing tokens are handled specially: concatenation of two placemarkers results in
a single placemarker preprocessing token, and concatenation of a placemarker with a
non-placemarker preprocessing token results in the non-placemarker preprocessing token.
If the result is not a valid preprocessing token, the behavior is undefined. The resulting
token is available for further macro replacement. The order of evaluation of ## operators
is unspecified.
EXAMPLE In the following fragment:
#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)
char p[] = join(x, y); // equivalent to
// char p[] = "x ## y";
The expansion produces, at various stages:
join(x, y)
in_between(x hash_hash y)
in_between(x ## y)
mkstr(x ## y)
"x ## y"
In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but
this new token is not the ## operator.
0
 
LVL 30

Expert Comment

by:callrs
ID: 17833095
Thanks for the grade.

But without a plain-english explanation of what /##/ in particular is for, I'm also (still) lost lol.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
Suggested Courses

783 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question