/* $NetBSD: opt_bacc.c,v 1.13 2023/06/15 09:19:07 rillig Exp $ */ /* * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional * compilation"). * * The option '-bacc' forces a blank line around every conditional compilation * block. For example, in front of every #ifdef and after every #endif. * Other blank lines surrounding such blocks are swallowed. * * The option '-nbacc' leaves the vertical spacing as-is. */ /* Example code without surrounding blank lines. */ //indent input int a; #if 0 int b; #endif int c; //indent end //indent run -bacc int a; #if 0 int b; #endif int c; //indent end /* The option '-nbacc' does not remove anything. */ //indent run-equals-input -nbacc /* Example code containing blank lines. */ //indent input int space_a; #if 0 int space_b; #endif int space_c; //indent end //indent run-equals-input -bacc /* The option '-nbacc' does not remove anything. */ //indent run-equals-input -nbacc /* * Preprocessing directives can also occur in function bodies. */ //indent input const char * os_name(void) { #if defined(__NetBSD__) || defined(__FreeBSD__) return "BSD"; #else return "unknown"; #endif } //indent end //indent run -bacc const char * os_name(void) { #if defined(__NetBSD__) || defined(__FreeBSD__) return "BSD"; #else return "unknown"; #endif } //indent end //indent run-equals-input -nbacc /* * Test nested preprocessor directives. */ //indent input #if outer #if inner int decl; #endif #endif //indent end //indent run-equals-input -di0 -bacc //indent run-equals-input -di0 -nbacc /* * Test nested preprocessor directives that are interleaved with declarations. */ //indent input #ifdef outer int outer_above; #ifdef inner int inner; #endif int outer_below; #endif //indent end //indent run -di0 -bacc #ifdef outer int outer_above; #ifdef inner int inner; #endif int outer_below; #endif //indent end //indent run-equals-input -di0 -nbacc //indent input /* before */ #if 0 /* between if and else */ #else #if 1 #endif #endif /* after */ //indent end //indent run -bacc /* before */ // $ XXX: The 'before' comment may refer to the '#if', so it is not obvious // $ XXX: that this blank line is useful. #if 0 /* between if and else */ #else // $ XXX: This blank line looks unintended, as both lines are preprocessing // $ XXX: directives. #if 1 #endif #endif /* after */ //indent end