code: def cmd_preprocess(
      filenames, *, raw=False, iter_filenames=None, **kwargs
  ):
      if "get_file_preprocessor" not in kwargs:
          kwargs["get_file_preprocessor"] = _get_preprocessor()
      if raw:
  
          def show_file(filename, lines):
              for line in lines:
                  print(line)
                  # print(line.raw)
  
      else:
  
          def show_file(filename, lines):
              for line in lines:
                  linefile = ""
                  if line.filename != filename:
                      linefile = f" ({line.filename})"
                  text = line.data
                  if line.kind == "comment":
                      text = "/* " + line.data.splitlines()[0]
                      text += (
                          " */" if "\n" in line.data else r"\n... */"
                      )
                  print(f" {line.lno:>4} {line.kind:10} | {text}")
  
      filenames = main_for_filenames(filenames, iter_filenames)
      for filename in filenames:
          lines = _iter_preprocessed(filename, **kwargs)
          show_file(filename, lines)
  
file_path: cpython/Tools/c-analyzer/c_parser/preprocessor/__main__.py
imports: import logging
  import sys
  from c_common.scriptutil import add_verbosity_cli, add_traceback_cli, add_kind_filtering_cli, add_files_cli, add_failure_filtering_cli, add_commands_cli, process_args_by_key, configure_logger, get_prog, main_for_filenames
  from .None import errors, get_preprocessor
label_desc: Use image node_id 4 for calling a global function with example usage: cmd_preprocess(filenames) without return types