code: def test_domain_c_ast_function_definitions():
      check("function", "void f()", {1: "f"})
      check("function", "void f(int)", {1: "f"})
      check("function", "void f(int i)", {1: "f"})
      check("function", "void f(int i, int j)", {1: "f"})
      check("function", "void f(...)", {1: "f"})
      check("function", "void f(int i, ...)", {1: "f"})
      check("function", "void f(struct T)", {1: "f"})
      check("function", "void f(struct T t)", {1: "f"})
      check("function", "void f(union T)", {1: "f"})
      check("function", "void f(union T t)", {1: "f"})
      check("function", "void f(enum T)", {1: "f"})
      check("function", "void f(enum T t)", {1: "f"})
  
      # test from issue #1539
      check("function", "void f(A x[])", {1: "f"})
  
      # test from issue #2377
      check(
          "function",
          "void (*signal(int sig, void (*func)(int)))(int)",
          {1: "signal"},
      )
  
      check("function", "extern void f()", {1: "f"})
      check("function", "static void f()", {1: "f"})
      check("function", "inline void f()", {1: "f"})
  
      # tests derived from issue #1753 (skip to keep sanity)
      check("function", "void f(float *q(double))", {1: "f"})
      check("function", "void f(float *(*q)(double))", {1: "f"})
      check("function", "void f(float (*q)(double))", {1: "f"})
      check("function", "int (*f(double d))(float)", {1: "f"})
      check("function", "int (*f(bool b))[5]", {1: "f"})
      check("function", "void f(int *const p)", {1: "f"})
      check("function", "void f(int *volatile const p)", {1: "f"})
  
      # from breathe#223
      check("function", "void f(struct E e)", {1: "f"})
      check("function", "void f(enum E e)", {1: "f"})
      check("function", "void f(union E e)", {1: "f"})
  
      # array declarators
      check("function", "void f(int arr[])", {1: "f"})
      check("function", "void f(int arr[*])", {1: "f"})
      cvrs = [
          "",
          "const",
          "volatile",
          "restrict",
          "restrict volatile const",
      ]
      for cvr in cvrs:
          space = " " if len(cvr) != 0 else ""
          check("function", f"void f(int arr[{cvr}*])", {1: "f"})
          check("function", f"void f(int arr[{cvr}])", {1: "f"})
          check(
              "function", f"void f(int arr[{cvr}{space}42])", {1: "f"}
          )
          check(
              "function",
              f"void f(int arr[static{space}{cvr} 42])",
              {1: "f"},
          )
          check(
              "function",
              f"void f(int arr[{cvr}{space}static 42])",
              {1: "f"},
              output=f"void f(int arr[static{space}{cvr} 42])",
          )
      check(
          "function",
          "void f(int arr[const static volatile 42])",
          {1: "f"},
          output="void f(int arr[static volatile const 42])",
      )
  
      with pytest.raises(DefinitionError):
          parse("function", "void f(int for)")
  
      # from #8960
      check(
          "function", "void f(void (*p)(int, double), int i)", {1: "f"}
      )
  
imports: import itertools
  import zlib
  from xml.etree import ElementTree
  import pytest
  from sphinx import addnodes
  from sphinx.addnodes import desc, desc_content, desc_name, desc_parameter, desc_parameterlist, desc_sig_name, desc_sig_space, desc_signature, desc_signature_line, pending_xref
  from sphinx.domains.c import DefinitionError, DefinitionParser, Symbol, _id_prefix, _macroKeywords, _max_id
  from sphinx.ext.intersphinx import load_mappings, normalize_intersphinx_mapping
  from sphinx.testing import restructuredtext
  from sphinx.testing.util import assert_node
  from sphinx.writers.text import STDINDENT
label_desc: Use image node_id 9 for calling a global function with example usage: test_domain_c_ast_function_definitions() without return types