Communications of the ACM
Encyclopedia of software engineering
Encyclopedia of software engineering
Challenges of refactoring C programs
Proceedings of the International Workshop on Principles of Software Evolution
An Empirical Analysis of C Preprocessor Use
IEEE Transactions on Software Engineering
Preprocessor Conditional Removal by Simple Partial Evaluation
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
IWPC '98 Proceedings of the 6th International Workshop on Program Comprehension
Analyzing Multiple Configurations of a C Program
ICSM '05 Proceedings of the 21st IEEE International Conference on Software Maintenance
On the Design and Development of Program Families
IEEE Transactions on Software Engineering
Parsing C/C++ Code without Pre-processing
CC '09 Proceedings of the 18th International Conference on Compiler Construction: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Dead or Alive: finding zombie features in the Linux kernel
FOSD '09 Proceedings of the First International Workshop on Feature-Oriented Software Development
An analysis of the variability in forty preprocessor-based software product lines
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
Efficient extraction and analysis of preprocessor-based variability
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
TypeChef: toward type checking #ifdef variability in C
FOSD '10 Proceedings of the 2nd International Workshop on Feature-Oriented Software Development
Evolution of the linux kernel variability model
SPLC'10 Proceedings of the 14th international conference on Software product lines: going beyond
Analyzing the discipline of preprocessor annotations in 30 million lines of C code
Proceedings of the tenth international conference on Aspect-oriented software development
Proceedings of the sixth conference on Computer systems
Reverse engineering feature models
Proceedings of the 33rd International Conference on Software Engineering
On the impact of feature dependencies when maintaining preprocessor-based software product lines
Proceedings of the 10th ACM international conference on Generative programming and component engineering
Variability-aware parsing in the presence of lexical macros and conditional compilation
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Type checking annotation-based product lines
ACM Transactions on Software Engineering and Methodology (TOSEM)
SuperC: parsing all of C by taming the preprocessor
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
A robust approach for variability extraction from the Linux build system
Proceedings of the 16th International Software Product Line Conference - Volume 1
Efficient synthesis of feature models
Proceedings of the 16th International Software Product Line Conference - Volume 1
Does the discipline of preprocessor annotations matter?: a controlled experiment
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Hi-index | 0.00 |
The C preprocessor is commonly used to implement variability in program families. Despite the widespread usage, some studies indicate that the C preprocessor makes variability implementation difficult and error-prone. However, we still lack studies to investigate preprocessor-based syntax errors and quantify to what extent they occur in practice. In this paper, we define a technique based on a variability-aware parser to find syntax errors in releases and commits of program families. To investigate these errors, we perform an empirical study where we use our technique in 41 program family releases, and more than 51 thousand commits of 8 program families. We find 7 and 20 syntax errors in releases and commits of program families, respectively. They are related not only to incomplete annotations, but also to complete ones. We submit 8 patches to fix errors that developers have not fixed yet, and they accept 75% of them. Our results reveal that the time developers need to fix the errors varies from days to years in family repositories. We detect errors even in releases of well-known and widely used program families, such as Bash, CVS and Vim. We also classify the syntax errors into 6 different categories. This classification may guide developers to avoid them during development.