1 /* $NetBSD: opt_bacc.c,v 1.13 2023/06/15 09:19:07 rillig Exp $ */ 2 3 /* 4 * Tests for the options '-bacc' and '-nbacc' ("blank line around conditional 5 * compilation"). 6 * 7 * The option '-bacc' forces a blank line around every conditional compilation 8 * block. For example, in front of every #ifdef and after every #endif. 9 * Other blank lines surrounding such blocks are swallowed. 10 * 11 * The option '-nbacc' leaves the vertical spacing as-is. 12 */ 13 14 15 /* Example code without surrounding blank lines. */ 16 //indent input 17 int a; 18 #if 0 19 int b; 20 #endif 21 int c; 22 //indent end 23 24 //indent run -bacc 25 int a; 26 27 #if 0 28 int b; 29 #endif 30 31 int c; 32 //indent end 33 34 /* The option '-nbacc' does not remove anything. */ 35 //indent run-equals-input -nbacc 36 37 38 /* Example code containing blank lines. */ 39 //indent input 40 int space_a; 41 42 #if 0 43 44 int space_b; 45 46 #endif 47 48 int space_c; 49 //indent end 50 51 //indent run-equals-input -bacc 52 53 /* The option '-nbacc' does not remove anything. */ 54 //indent run-equals-input -nbacc 55 56 57 /* 58 * Preprocessing directives can also occur in function bodies. 59 */ 60 //indent input 61 const char * 62 os_name(void) 63 { 64 #if defined(__NetBSD__) || defined(__FreeBSD__) 65 return "BSD"; 66 #else 67 return "unknown"; 68 #endif 69 } 70 //indent end 71 72 //indent run -bacc 73 const char * 74 os_name(void) 75 { 76 77 #if defined(__NetBSD__) || defined(__FreeBSD__) 78 return "BSD"; 79 #else 80 return "unknown"; 81 #endif 82 83 } 84 //indent end 85 86 //indent run-equals-input -nbacc 87 88 89 /* 90 * Test nested preprocessor directives. 91 */ 92 //indent input 93 #if outer 94 #if inner 95 int decl; 96 #endif 97 #endif 98 //indent end 99 100 //indent run-equals-input -di0 -bacc 101 102 //indent run-equals-input -di0 -nbacc 103 104 105 /* 106 * Test nested preprocessor directives that are interleaved with declarations. 107 */ 108 //indent input 109 #ifdef outer 110 int outer_above; 111 #ifdef inner 112 int inner; 113 #endif 114 int outer_below; 115 #endif 116 //indent end 117 118 //indent run -di0 -bacc 119 #ifdef outer 120 int outer_above; 121 122 #ifdef inner 123 int inner; 124 #endif 125 126 int outer_below; 127 #endif 128 //indent end 129 130 //indent run-equals-input -di0 -nbacc 131 132 133 //indent input 134 /* before */ 135 #if 0 136 /* between if and else */ 137 #else 138 #if 1 139 #endif 140 #endif 141 /* after */ 142 //indent end 143 144 //indent run -bacc 145 /* before */ 146 // $ XXX: The 'before' comment may refer to the '#if', so it is not obvious 147 // $ XXX: that this blank line is useful. 148 149 #if 0 150 /* between if and else */ 151 #else 152 // $ XXX: This blank line looks unintended, as both lines are preprocessing 153 // $ XXX: directives. 154 155 #if 1 156 #endif 157 #endif 158 159 /* after */ 160 //indent end 161