Clean up cdecl.py a bit
diff --git a/examples/cdecl.py b/examples/cdecl.py
index 92ac715..a510087 100644
--- a/examples/cdecl.py
+++ b/examples/cdecl.py
@@ -6,9 +6,8 @@
 #
 # The AST generated by pycparser from the given declaration is traversed
 # recursively to build the explanation. Note that the declaration must be a
-# valid external declaration in C. All the types used in it must be defined with
-# typedef, or parsing will fail. The definition can be arbitrary - pycparser
-# doesn't really care what the type is defined to be, only that it's a type.
+# valid external declaration in C. As shown below, typedef can be optionally
+# expanded.
 #
 # For example:
 #
@@ -17,7 +16,7 @@
 #   explain_c_declaration(c_decl)
 #   => ar is a pointer to array[10] of pointer to const Node
 #
-# struct and typedef are expanded when according arguments are set:
+# struct and typedef can be optionally expanded:
 #
 #   explain_c_declaration(c_decl, expand_typedef=True)
 #   => ar is a pointer to array[10] of pointer to const int
@@ -48,8 +47,11 @@
     """ Parses the declaration in c_decl and returns a text
         explanation as a string.
 
-        The last external node of the string is used, to allow
-        earlier typedefs for used types.
+        The last external node of the string is used, to allow earlier typedefs
+        for used types.
+
+        expand_struct=True will spell out struct definitions recursively.
+        expand_typedef=True will expand typedef'd types.
     """
     parser = c_parser.CParser()
 
@@ -125,32 +127,35 @@
                 ('containing {%s}' % members if members else ''))
 
 
-def expand_struct_typedef(cdecl, file_ast, expand_struct=False, expand_typedef=False):
-    """Expand struct & typedef in context of file_ast and return a new expanded node"""
+def expand_struct_typedef(cdecl, file_ast,
+                          expand_struct=False,
+                          expand_typedef=False):
+    """Expand struct & typedef and return a new expanded node."""
     decl_copy = copy.deepcopy(cdecl)
     _expand_in_place(decl_copy, file_ast, expand_struct, expand_typedef)
     return decl_copy
 
 
 def _expand_in_place(decl, file_ast, expand_struct=False, expand_typedef=False):
-    """Recursively expand struct & typedef in place, throw Exception if
+    """Recursively expand struct & typedef in place, throw RuntimeError if
        undeclared struct or typedef are used
     """
     typ = type(decl)
 
     if typ in (c_ast.Decl, c_ast.TypeDecl, c_ast.PtrDecl, c_ast.ArrayDecl):
-        decl.type = _expand_in_place(decl.type, file_ast, expand_struct, expand_typedef)
+        decl.type = _expand_in_place(decl.type, file_ast, expand_struct,
+                                     expand_typedef)
 
     elif typ == c_ast.Struct:
         if not decl.decls:
             struct = _find_struct(decl.name, file_ast)
             if not struct:
-                raise Exception('using undeclared struct %s' % decl.name)
+                raise RuntimeError('using undeclared struct %s' % decl.name)
             decl.decls = struct.decls
 
         for i, mem_decl in enumerate(decl.decls):
-            decl.decls[i] = _expand_in_place(mem_decl, file_ast, expand_struct, expand_typedef)
-
+            decl.decls[i] = _expand_in_place(mem_decl, file_ast, expand_struct,
+                                             expand_typedef)
         if not expand_struct:
             decl.decls = []
 
@@ -158,7 +163,7 @@
           decl.names[0] not in ('int', 'char')):
         typedef = _find_typedef(decl.names[0], file_ast)
         if not typedef:
-            raise Exception('using undeclared type %s' % decl.names[0])
+            raise RuntimeError('using undeclared type %s' % decl.names[0])
 
         if expand_typedef:
             return typedef.type