By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,379 Members | 1,602 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,379 IT Pros & Developers. It's quick & easy.

How to define C macro

P: n/a
Hello All,

Here is a small C program,

main()
{
int a= 100;
float b =99.99;
TEST(a,%d);
TEST(b,%f);
}

Now I want to write a macro for TEST such that it outputs something like this

main()
{
int a=100;
float b =99.99;
printf(" The value of a = %d \n",a);
printf(" The value of b = %f \n",b);
}

I tried to write macro like this, but its not working

#define TEST(a,b) printf(" The value of a = b \n",a)

Can somebody help me in this?

Thanks
-Vittal
Nov 13 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a

On Thu, 3 Jul 2003, Vittal wrote:

TEST(a,%d);
TEST(b,%f);

Now I want to write a macro for TEST such that it outputs something like this

printf(" The value of a = %d \n",a);
printf(" The value of b = %f \n",b);

I tried to write macro like this, but its not working

#define TEST(a,b) printf(" The value of a = b \n",a)


Try

#define TEST(a,b) printf(" The value of " #a " = " #b " \n", a)

(The syntax #foo is a special preprocessing thingamabob that says
"take the value of foo and stick it in a string literal." Putting
two string literals next to each other - "foo" "bar" - concatenates
them - producing the equivalent of "foobar". [This *only* works with
compile-time literals!] So the above stringizes 'a' and 'b' and
sticks them in the string.)

Untested code, may not work if a or b are macros themselves. I.e.,

TEST(INT_MAX, %d);

may do incorrect things. Someone else will post that FAQ. :)

-Arthur

Nov 13 '05 #2

P: n/a
In article <f9**************************@posting.google.com >, Vittal wrote:
Hello All,
#define TEST(a,b) printf(" The value of a = b \n",a)


#define TEST(a,b) printf("The value of " #a " = " #b "\n", a)

Interresting question in fact.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(
Nov 13 '05 #3

P: n/a
"Vittal" <vs*********@yahoo.com> wrote in message
news:f9**************************@posting.google.c om...
Hello All,

Here is a small C program,

main()
{
int a= 100;
float b =99.99;
TEST(a,%d);
TEST(b,%f);
}

Now I want to write a macro for TEST such that it outputs something like this
main()
{
int a=100;
float b =99.99;
printf(" The value of a = %d \n",a);
printf(" The value of b = %f \n",b);
}

I tried to write macro like this, but its not working

#define TEST(a,b) printf(" The value of a = b \n",a)

Can somebody help me in this?

Thanks
-Vittal


Hi Vittal,

You can use the define:
#define TEST(fmt,val) ((void)printf("The value of %s = "fmt"\n",#val,val))
The format(fmt) is just a string and is concatenated with the rest of the
strings.
#val is also a string (so "a" or "b" in your example)
val is the value.

Marco

#include <stdio.h>

#define TEST(fmt,val) ((void)printf("The value of %s = "fmt"\n",#val,val))

int main()
{
int a=100;
float b=99.99F;

TEST("%d",a);
TEST("%f",b);
return 0;
}
Nov 13 '05 #4

P: n/a
In <f9**************************@posting.google.com > vs*********@yahoo.com (Vittal) writes:
main()
{
int a= 100;
float b =99.99;
TEST(a,%d);
TEST(b,%f);
}

Now I want to write a macro for TEST such that it outputs something like this

main()
{
int a=100;
float b =99.99;
printf(" The value of a = %d \n",a);
printf(" The value of b = %f \n",b);
}

I tried to write macro like this, but its not working

#define TEST(a,b) printf(" The value of a = b \n",a)
Obviously, since the preprocessor doesn't touch the contents of string
literals.
Can somebody help me in this?


Use the # operator and take advantage of the adjacent string splicing
feature of C:

#define TEST(a,b) printf(" The value of " #a " = " #b " \n", a)

Not very easy to read, but it gets the job done.

Dan
--
Dan Pop
DESY Zeuthen, RZ group
Email: Da*****@ifh.de
Nov 13 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.