The C programming language
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
Syntax macros and extended translation
Communications of the ACM
Exploiting the map metaphor in a tool for software evolution
ICSE '01 Proceedings of the 23rd International Conference on Software Engineering
An Empirical Analysis of C Preprocessor Use
IEEE Transactions on Software Engineering
IEEE Transactions on Software Engineering
Handling Preprocessor-Conditioned Declarations
SCAM '02 Proceedings of the Second IEEE International Workshop on Source Code Analysis and Manipulation
Preprocessor Conditional Removal by Simple Partial Evaluation
WCRE '01 Proceedings of the Eighth Working Conference on Reverse Engineering (WCRE'01)
WPC '97 Proceedings of the 5th International Workshop on Program Comprehension (WPC '97)
Experiences Developing and Maintaining Software in a Multi-Platform Environment
ICSM '97 Proceedings of the International Conference on Software Maintenance
Refactoring Browser with Preprocessor
CSMR '03 Proceedings of the Seventh European Conference on Software Maintenance and Reengineering
Global Analysis and Transformations in Preprocessed Languages
IEEE Transactions on Software Engineering
ASTEC: a new approach to refactoring C
Proceedings of the 10th European software engineering conference held jointly with 13th ACM SIGSOFT international symposium on Foundations of software engineering
Isolating Idiomatic Crosscutting Concerns
ICSM '05 Proceedings of the 21st IEEE International Conference on Software Maintenance
Analyzing Multiple Configurations of a C Program
ICSM '05 Proceedings of the 21st IEEE International Conference on Software Maintenance
Program refactoring in the presence of preprocessor directives
Program refactoring in the presence of preprocessor directives
A quantitative analysis of aspects in the eCos kernel
Proceedings of the 1st ACM SIGOPS/EuroSys European Conference on Computer Systems 2006
Proceedings of the 6th international conference on Aspect-oriented software development
C-CLR: a tool for navigating highly configurable system software
Proceedings of the 6th workshop on Aspects, components, and patterns for infrastructure software
On the feasibility of an AOSD approach to Linux kernel extensions
Proceedings of the 2008 AOSD workshop on Aspects, components, and patterns for infrastructure software
"Cloning considered harmful" considered harmful: patterns of cloning in software
Empirical Software Engineering
Can we refactor conditional compilation into aspects?
Proceedings of the 8th ACM international conference on Aspect-oriented software development
Combining preprocessor slicing with C/C++ language slicing
Science of Computer Programming
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
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
A model of refactoring physically and virtually separated features
GPCE '09 Proceedings of the eighth international conference on Generative programming and component engineering
Type-Checking Software Product Lines - A Formal Approach
ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering
Configuration Lifting: Verification meets Software Configuration
ASE '08 Proceedings of the 2008 23rd IEEE/ACM International Conference on Automated Software Engineering
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
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
The Choice Calculus: A Representation for Software Variation
ACM Transactions on Software Engineering and Methodology (TOSEM)
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
Understanding linux feature distribution
Proceedings of the 2012 workshop on Modularity in Systems Software
Proceedings of the 7th Workshop on Programming Languages and Analysis for Security
Code-based variability model extraction for software product line improvement
Proceedings of the 16th International Software Product Line Conference - Volume 2
Scalable analysis of variable software
Proceedings of the 2013 9th Joint Meeting on Foundations of Software Engineering
SPLLIFT: statically analyzing software product lines in minutes instead of years
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Do background colors improve program comprehension in the #ifdef hell?
Empirical Software Engineering
Does the discipline of preprocessor annotations matter?: a controlled experiment
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Investigating preprocessor-based syntax errors
Proceedings of the 12th international conference on Generative programming: concepts & experiences
Adoption and use of Java generics
Empirical Software Engineering
Hi-index | 0.00 |
The C preprocessor cpp is a widely used tool for implementing variable software. It enables programmers to express variable code (which may even crosscut the entire implementation) with conditional compilation. The C preprocessor relies on simple text processing and is independent of the host language (C, C++, Java, and so on). Language-independent text processing is powerful and expressive - programmers can make all kinds of annotations in the form of #ifdefs - but can render unpreprocessed code difficult to process automatically by tools, such as refactoring, concern management, and variability-aware type checking. We distinguish between disciplined annotations, which align with the underlying source-code structure, and undisciplined annotations, which do not align with the structure and hence complicate tool development. This distinction raises the question of how frequently programmers use undisciplined annotations and whether it is feasible to change them to disciplined annotations to simplify tool development and to enable programmers to use a wide variety of tools in the first place. By means of an analysis of 40 medium-sized to large-sized C programs, we show empirically that programmers use cpp mostly in a disciplined way: about 84% of all annotations respect the underlying source-code structure. Furthermore, we analyze the remaining undisciplined annotations, identify patterns, and discuss how to transform them into a disciplined form.