An empirical study of goto in C code

Department of Software Engineering, Rochester Institute of Technology, Rochester, NY, USA
PLEIAD Lab, Computer Science Dept (DCC), University of Chile, Santiago, Chile
Principles of Software Languages Group (POSL), Kyushu University, Nishi-ku, Japan
Software Analysis and Intelligence Lab (SAIL), Queen's University, Kingston, Canada
Department of Electrical Engineering and Computer Science, University of Tennessee-Knoxville, Knoxville, Tennessee, USA
DOI
10.7287/peerj.preprints.826v1
Subject Areas
Data Science, Social Computing, Programming Languages, Software Engineering
Keywords
Goto, Empirical study, OSS, Dijkstra, C Code
Copyright
© 2015 Nagappan et al.
Licence
This is an open access article distributed under the terms of the Creative Commons Attribution License, which permits unrestricted use, distribution, reproduction and adaptation in any medium and for any purpose provided that it is properly attributed. For attribution, the original author(s), title, publication source (PeerJ PrePrints) and either DOI or URL of the article must be cited.
Cite this article
Nagappan M, Robbes R, Kamei Y, Tanter É, McIntosh S, Mockus A, Hassan AE. 2015. An empirical study of goto in C code. PeerJ PrePrints 3:e826v1

Abstract

It is nearly 50 years since Dijkstra argued that goto obscures the flow of control in program execution and urged programmers to abandon the goto statement. While past research has shown that goto is still in use, little is known about whether goto is used in the unrestricted manner that Dijkstra feared, and if it is ‘harmful’ enough to be a part of a post-release bug. We, therefore, conduct a two part empirical study - (1) qualitatively analyze a statistically representative sample of 384 files from a population of almost 2 million C programming language files collected from over 11K Github repositories and find that developers use goto in C files for error handling (80.21 ± 5%) and cleaning up resources at the end of a procedure (40.36 ± 5%); and (2) quantitatively analyze the commit history from the release branches of six OSS projects and find that no goto statement was removed/modified in the post-release phase of four of the six projects. We conclude that developers limit themselves to using goto appropriately in most cases, and not in an unrestricted manner like Dijkstra feared, thus suggesting that goto does not appear to be harmful in practice.

Author Comment

This report contains our entire work. Parts of this paper will be submitted to IEEE SW or a similar journal with a high readership of software developers.