code: def prepare(self):
      if self.model_ast.output_size > 1:
          print_code = EXECUTE_AND_PRINT_VECTOR_TPL.format(
              size=self.model_ast.output_size
          )
      else:
          print_code = EXECUTE_AND_PRINT_SCALAR
  
      executor_code = EXECUTOR_CODE_TPL.format(
          model_code=self.interpreter.interpret(self.model_ast),
          print_code=print_code,
      )
  
      file_name = self._resource_tmp_dir / f"{self.model_name}.c"
      utils.write_content_to_file(executor_code, file_name)
  
      self.exec_path = self._resource_tmp_dir / self.model_name
      flags = ["-std=c99", "-lm"]
      utils.execute_command(
          ["gcc", str(file_name), "-o", str(self.exec_path), *flags]
      )
  
file_path: m2cgen/tests/e2e/executors/c.py
imports: from m2cgen.assemblers import get_assembler_cls
  from m2cgen.interpreters import CInterpreter
  from tests import utils
  from tests.e2e.executors.base import BaseExecutor
label_desc: Use image node_id 3 for calling the CExecutor obj's underlying member method code with example usage: obj.prepare() without return types