code: def test_domain_c_ast_macro_definitions():
      check("macro", "M", {1: "M"})
      check("macro", "M()", {1: "M"})
      check("macro", "M(arg)", {1: "M"})
      check("macro", "M(arg1, arg2)", {1: "M"})
      check("macro", "M(arg1, arg2, arg3)", {1: "M"})
      check("macro", "M(...)", {1: "M"})
      check("macro", "M(arg, ...)", {1: "M"})
      check("macro", "M(arg1, arg2, ...)", {1: "M"})
      check("macro", "M(arg1, arg2, arg3, ...)", {1: "M"})
      # GNU extension
      check("macro", "M(arg1, arg2, arg3...)", {1: "M"})
      with pytest.raises(DefinitionError):
          check("macro", "M(arg1, arg2..., arg3)", {1: "M"})
  
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 7 for calling a global function with example usage: test_domain_c_ast_macro_definitions() without return types