On Sun, May 2, 2010 at 3:59 AM, Christopher Zimmermann
<madroach@zakweb.de> wrote:
macro, because I need __LINE__, __FILE__, __CLASS__...
You example obviously isn't showing the exact usage you require. I
imagine the macro is being used in assignments, not just in the blub()
method as you display.
Cheers,
--patrick
$ cat fuck.c++
#include <stdlib.h>
#include <err.h>
#include <iostream>
#define WarnIfNULL(x) ((!(x) && ((void)warnx("blub"),1)) ? (x) : (x))
class A {
protected:
int a;
};
class B : public A {
public:
void blub(void) { WarnIfNULL(A::a); }
};
int
main(int argc, char *argv[])
{
int bs = 10;
B cxxsucks;
cxxsucks.blub();
bs = WarnIfNULL(100);
::std::cout << "bullshit: " << bs << ::std::endl;
exit(0);
}
$ c++ fuck.c++
/usr/lib/libstdc++.so.49.0: warning: strcpy() is almost always
misused, please use strlcpy()
/usr/lib/libstdc++.so.49.0: warning: strcat() is almost always
misused, please use strlcat()
$ ./a.out
a.out: blub
bullshit: 100