Important Notice: Our web hosting provider recently started charging us for additional visits, which was unexpected. In response, we're seeking donations. Depending on the situation, we may explore different monetization options for our Community and Expert Contributors. It's crucial to provide more returns for their expertise and offer more Expert Validated Answers or AI Validated Answers. Learn more about our hosting issue here.

Heres a neat trick for checking whether two strings are equal: if(!strcmp(s1, s2)) Is this good style?

0
Posted

Heres a neat trick for checking whether two strings are equal: if(!strcmp(s1, s2)) Is this good style?

0

It is not particularly good style, although it is a popular idiom. The test succeeds if the two strings are equal, but the use of ! (“not”) suggests that it tests for inequality. Another option is to define a macro: #define Streq(s1, s2) (strcmp((s1), (s2)) == 0) which you can then use like this: if(Streq(s1, s2)) Another option (which borders on preprocessor abuse; see question 10.2) is to define #define StrRel(s1, op, s2) (strcmp(s1, s2) op 0) after which you can say things like if(StrRel(s1, ==, s2)) … if(StrRel(s1, !=, s2)) … if(StrRel(s1, >=, s2)) … See also question 17.10. comp.lang.c FAQ list ยท Question 17.4 Q: Why do some people write if(0 == x) instead of if(x == 0)? A: It’s a trick to guard against the common error of writing if(x = 0) If you’re in the habit of writing the constant before the ==, the compiler will complain if you accidentally type if(0 = x) Evidently it can be easier for some people to remember to reverse the test than to remember to type the doubled

What is your question?

*Sadly, we had to bring back ads too. Hopefully more targeted.