Monday, January 25, 2010

Wading into the C

No time for deep thoughts these days; too much hacking, dissertating, designing, and committeefying going on. Just a couple notes based on recent experiences hacking in C/C++:

1. Not being able to rely on recursion makes me sad.

2. "Downwards macro-args" in C:
#define MY_ENUM_LIST(m) \
m(RED, 0), \
m(GREEN, 1), \
m(BLUE, 2)

#define DEF_ENUM_ENTRY(c, v) c = v
#define QUOTE_ENUM_ENTRY(c, v) #c

typedef enum rgb {
MY_ENUM_LIST(DEF_ENUM_ENTRY)
} rgb;

const char *rgb_names[] = {
MY_ENUM_LIST(QUOTE_ENUM_ENTRY)
};
3. I am fast becoming acquainted with gdb.

4. And a few choice command-line shortcuts really save extraordinary amounts of time. My new fav: the !? bash-history shortcut.

9 comments:

  1. Whoa!

    Okay, re: #2. I get the rgb typedef... But what does is mean to say #RED or #GREEN in C?

    ReplyDelete
  2. It's a CPP-ism, not a C-ism-- when you prefix a macro argument with # it expands into the string literal representing the token source.

    ReplyDelete
  3. Are you hep to bash command completion? Just learned about that neato feature recently.

    ReplyDelete
  4. I use C-r to search backwards in my command history, is that the same thing?

    Admittedly, I use zsh

    ReplyDelete
  5. If you're going to go the preprocessor route, you should take a peek at the Boost Preprocessor Library. Amazing/scary what you can do with it.
    IIRC, C99's preprocessor is expressive enough to write a small lisp interpreter.

    ReplyDelete
  6. Now I remember why I'm writing my own browser and not dealing with yours ;-)

    ReplyDelete
  7. gdb tip: make command scripts.

    e.g. I make a file, 'gdbcmds' that look like:

    b 'avmplus::MathClass::pow'
    r -Dinterp ../../interp64_busted.abc
    finish
    finish
    finish
    step
    step
    next
    next

    And then I run my binary like so:

    % gdb avmshell -x gdbcmds

    Saves a lot of time reestablishing a context where I found some behavior I want to investigate, which can involve a lot of retyping (and more importantly, rethinking and missteps!).

    Of course a script like the one above won't stay useful for very long, but its just meant to be a throwaway during a single day.

    ReplyDelete
  8. Thank you for your sharing. Thanks to this blog I can learn more things. Expand your knowledge and abilities. Actually the article is very practical. Thank you.If you are the one looking for technical help in Roadrunner Email then call us today at Roadrunner Support Number and get connected with our award-winning team of Roadrunner Email. They are capable of resolving the technical bugs and issues.
    Roadrunner Email Not Working
    TWC Email Not Working
    RR Email Login Problems
    RR Email App Not Working
    Recover Forgot Spectrum Email Password
    Change Spectrum WiFi Password
    Forgot Spectrum WiFi Password

    ReplyDelete