A instrução STOP RUN no COBOL é usada para finalizar a execução do programa principal. Ela encerra a unidade de execução atual, fecha todos os arquivos abertos e devolve o controle ao ambiente que iniciou o programa.

📌 Para que serve

  • Encerrar um programa COBOL principal.

  • Finalizar a execução da aplicação (normalmente o programa raiz).

  • Garantir que todos os arquivos sejam corretamente fechados.

  • Liberar recursos e retornar ao sistema operacional ou chamador.

🧾 Sintaxe básica

STOP RUN.

✅ Exemplo prático

DISPLAY "Início do programa".
PERFORM PROCESSA-DADOS.
DISPLAY "Fim do programa".
STOP RUN.

⚙️ Como funciona internamente

Comando Comportamento
STOP RUN Finaliza toda a unidade de execução. Fecha todos os arquivos abertos. Não retorna controle a subprogramas.
GOBACK (em programa principal) Mesmo comportamento que STOP RUN. Encerra tudo.
GOBACK (em subprograma) Retorna para o programa chamador. Não fecha arquivos, a menos que o programa seja INITIAL.
EXIT PROGRAM Retorna ao chamador sem fechar arquivos. Usado em subprogramas.
CANCEL Reinicializa o programa especificado, fecha arquivos abertos, e libera a memória.

⚠️ Regras importantes

  • Somente o programa principal pode usar STOP RUN.

  • Em subprogramas, use preferencialmente GOBACK ou EXIT PROGRAM.

  • Arquivos abertos são automaticamente fechados ao usar STOP RUN.

  • Se o programa tiver o atributo INITIAL, arquivos internos também serão fechados por GOBACK ou EXIT PROGRAM.

🧠 Dicas práticas

  • Use STOP RUN somente no programa principal.

  • Se você estiver criando subprogramas reutilizáveis, prefira GOBACK ou EXIT PROGRAM para não encerrar toda a aplicação acidentalmente.

  • Em programas que produzem relatórios com REPORT WRITER, use TERMINATE para encerrar relatórios, não STOP RUN.

✅ Conclusão

A instrução STOP RUN é simples, direta e essencial para encerrar corretamente a execução de um programa COBOL principal. Seu uso garante o fechamento adequado de arquivos e o retorno ao ambiente chamador. Embora poderosa, deve ser usada com cuidado para não interferir em estruturas de programas compostos por subprogramas.