Berkeley CSUA MOTD:Entry 31060
Berkeley CSUA MOTD
 
WIKI | FAQ | Tech FAQ
http://csua.com/feed/
2025/07/09 [General] UID:1000 Activity:popular
7/9     

2004/6/29-30 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Languages/Perl] UID:31060 Activity:high
6/29    I can't remember a bit of C syntax.  I have funtion foo that
        returns a value that I need to put in a variable.  If that value
        is not Null, I want to take some action.  Will this work?
        int bar = 0;
        if(bar = foo())
          do something;
        \_ Someone should save this for the Classic Trolls Of All Time Hall
           Of Fame.  I wish I had thought of something so simple as asking
           an arcane C syntax question.  --lesser troll than op
           \_ Maybe you should try an obscure Perl question.
        \_ How about:
           if(foo()) {something;}
        \_ foo() can return NULL, so it's returning a pointer.  Therefore
           bar should be a pointer.  Probably it's a char* pointer.  So:
           char* bar = NULL;
           bar = foo();
           if (bar != NULL) { // Do something. }
           , or, if (!bar) { // Do something.} (but I like the previous one)
           \_ The null pointer is just an integer equal to zero.  If the
              declaration of foo is 'void foo()' then 'if(foo())' will fail.
              The NULL pointer evaluates to false.
              \_ op said he wanted to store the value of foo() in a variable,
                 and also wants to check if it is NULL.  (This is common for
                 text-parsing functions.)  Hence the code.
              \_ 1. if the declaration of foo is "void foo()", it can't even
                 return anything, and "if(foo())" won't even compile.  What are
                 you trying to say?
                 2. There is nothing in the C specification that says NULL is
                 necessarily 0.  Its value is implementation dependent,
                 although in almost all implementations it's 0.
              \_ Not exactly.  The preprocessor symbol NULL is guaranteed to
                 be 0, but it's not necessarily an integer type (it may be
                 defined to be (void*) 0).  NULL is not the same as the "null
                 pointer"; the compiler transforms 0 in pointer contexts to
                 the appropriate null pointer, which may not necessarily be
                 all-bits-zero. --jameslin
        \_ The answer is yes.  The syntax is:
           if (bar = foo())
            |    \_ Assign 'bar' to be the return value of foo().
            |
            \_ The value passed to 'if' is the result of the assignment, which
               is the value of 'bar'.  Any non-zero integral value will
               evaluate as true.
        \_ "if (bar = foo())" will work, but the compile will probably try to
           be nice and warn you that you might have mistyped "=" when
           you really wanted "==".  To avoid such a warning, you can do
           "if ((bar = foo()) != NULL)".  With compilers these days, it'll be
           optimized the same way as "if (bar = foo())" anyway if the value of
           NULL is 0.
           \_ And this compiler should be promptly thrown in the trash.  In
              over 10 years of C/C++ development, I've only been bitten by this
              once or twice.  Having to munge my code to avoid spurious
              warnings only helps newbies who should quickly exit the rank of
              newbie anyway.
                 \_ Isn't this based on the assumption that NULL == 0 or
                    some equiv. There is nothing in the standard (AFAIK)
                    that requires this.
                    \_ No.  When a pointer converts to an int, it must convert
                       to 0 if it is NULL, regardless of the actual bit pattern
                       of the pointer.
                        \_ ic. tnx.
              \_ Chill down.  The compiler gives a warning, not an error.
                 \_ Spurious warnings make it difficult to find real problems.
                    Many software shops have a rule of compiling with no
                    warnings and no errors, so warnings are a problem anyway.
                    \_ Having to munge your code for spurious warnings is
                       a bad thing.  However, I challenge your determination
                       that this particular one is spurious.  I would want
                       all my developers to NEVER have an "if (bar = foo())"
                       statement.  That's IMO, anyway.  They can still do
                       it if they want; I wouldn't complain too much if
                       following the rule affected their productivity, what
                       with good people being hard to find.
                       \_ How many more coding guidelines do you want checked
                          in your compiler?  Check it in lint instead.  Why
                          should I have to avoid legal code because *your*
                          software shop doesn't like that?  It's a common
                          idiom, and it takes all of 5 seconds to learn it.
                          \_ I don't think you really read what I wrote.
                             I believe if you got into a meeting with the
                             top 5 coders in your organization, they would
                             agree "if (bar = foo())" is bad form, but they
                             wouldn't bash it over your head, which is what
                             I've been saying.  (Of course you can use whatever
                             you like if you're not working with other
                             programmers.)
                             \_ I did read what you read.  Your complaint is
                                one of style, which is not what a compiler
                                should check--or at least the complier should
                                have a way to turn off all stylistic warnings.
                                \_ I agree with you that the user should be
                                   able to turn off "stylistic warnings".
              \_ You want to throw gcc in the trash?
              \_ I was grateful of compiler warnings when I had a very sloppy
                 programmer working on my team.  Eventually he was let go after
                 one year.
                 \_ Which is the right thing to do with sloppy programmers:
                    teach them or fire them.
2025/07/09 [General] UID:1000 Activity:popular
7/9     

You may also be interested in these entries...
2014/1/14-2/5 [Computer/SW/Languages/C_Cplusplus] UID:54763 Activity:nil
1/14    Why is NULL defined to be "0" in C++ instead of "((void *) 0)" like in
        C?  I have some overloaded functtions where one takes an integer
        parameter and the other a pointer parameter.  When I call it with
        "NULL", the compiler matches it with the integer version instead of
        the pointer version which is a problem.  Other funny effect is that
        sizeof(NULL) is different from sizeof(myPtr).  Thanks.
	...
2013/4/9-5/18 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Apps, Computer/SW/Languages/Perl] UID:54650 Activity:nil
4/04    Is there a good way to diff 2 files that consist of columns of
        floating point numbers, such that it only tells me if there's a
        difference if the numbers on a given line differ by at least a given
        ratio?  Say, 1%?
        \_ Use Excel.
           1. Open foo.txt in Excel.  It should convert all numbers to cells in
	...
2013/4/29-5/18 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Compilers] UID:54665 Activity:nil
4/29    Why were C and Java designed to require "break;" statements for a
        "case" section to terminate rather than falling-through to the next
        section?  99% of the time poeple want a "case" section to terminate.
        In fact some compilers issue warning if there is no "break;" statement
        in a "case" section.  Why not just design the languages to have
        termination as the default behavior, and provide a "fallthru;"
	...
2012/7/19-11/7 [Computer/SW/Languages/C_Cplusplus] UID:54439 Activity:nil
7/19    In C or C++, how do I write the code of a function with variable
        number of parameters in order to pass the variable parameters to
        another function that also has variable number of parameters?  Thanks.
        \_ The usual way (works on gcc 3.0+, Visual Studio 2005+):
               #define foo(fmt, ...) printf(fmt, ##__VA_ARGS__)
           The cool new way (works on gcc 4.3+):
	...
2011/3/7-4/20 [Computer/SW/Languages/C_Cplusplus] UID:54056 Activity:nil
3/7     I have a C question.  I have the following source code in two identical
        files t.c and t.cpp:
                #include <stdlib.h>
                int main(int argc, char *argv[]) {
                  const char * const * p1;
                  const char * * p2;
	...
2011/2/5-19 [Computer/SW/Languages/C_Cplusplus] UID:54027 Activity:nil
2/4     random C programming/linker fu question.  If I have
        int main() { printf("%s is at this adddr %p\n", "strlen", strlen); }
        and soda's /proc/sys/kernel/randomize_va_space is 2 (eg; on)
        why is strlen (or any other libc fn) at the same address every time?
        \_ I don't pretend to actually know the right answer to this, but
           could it have something to do with shared libraries?
	...
2010/2/12-3/9 [Computer/SW/Languages/C_Cplusplus] UID:53708 Activity:nil
2/12    I need a way to make a really big C++ executable (~200MBs) that does
        nothing.  No static initialization either.  Any ideas?
        \_ static link in lots of libraries?
        \_ #define a   i=0; i=0; i=0; i=0; i=0; i=0; i=0; i=0; i=0; i=0;
           #define b   a a a a a a a a a a
           #define c   b b b b b b b b b b
	...
2009/9/28-10/8 [Computer/SW/Languages/C_Cplusplus] UID:53409 Activity:nil
9/28    http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
        Java is #1!!! Followed by C, PHP, C++, Visual Basic, Perl,
        C#, Python, Javascript, then finally Ruby. The good news is
        Pascal is going waaaay back up!
        \_ C is still more popular than C++?  I feel much better about myself
           now.
	...
2009/8/7-14 [Computer/SW/Languages/C_Cplusplus, Computer/SW/Languages/Java] UID:53252 Activity:high
8/6     In C one can do "typedef int my_index_t;".  What's the equivalent in
        C#?  Thanks.
        \_ C#? Are you serious? Is this what the class of 2009 learn?
           \_ No.  I have to learn .NET code at work.  I am Class of '93.
           \_ python is what 2009 learns, see the motd thread about recent
              cal courses and languages
	...
2009/7/21-24 [Computer/SW/Languages/Java] UID:53168 Activity:moderate
7/20    For those who care btw, it looks like eclipse is now A Standard Tool
        at UCB ugrad cs, probably replaced emacs.  Furthermore, people get
        angry at seeing Makefiles, (since eclispe takes care of that).  I
        guess it's just a sign of the times.
        \_ The more people at my work use eclipse the less the code is
           managable in emacs.  I'm not sure which application's fault
	...