@@ -35,6 +35,21 @@ const std::vector<std::tuple<int, int, int>> BenchmarkConfig::DEFAULT_CASES = {
3535 {511 , 513 , 1025 },
3636};
3737
38+ // ============================================================================
39+ // CLI 解析结果
40+ // ============================================================================
41+
42+ /* *
43+ * CLI 解析结果枚举
44+ *
45+ * 自文档化的返回类型,替代 int 返回码。
46+ */
47+ enum class ParseResult {
48+ Success, // 解析成功,继续执行
49+ Error, // 解析错误,返回错误码
50+ HelpShown // 显示帮助后正常退出
51+ };
52+
3853// ============================================================================
3954// CLI 解析器
4055// ============================================================================
@@ -86,28 +101,26 @@ class CliParser {
86101 * 解析命令行参数
87102 *
88103 * @param config 输出配置对象
89- * @return 0 成功,1 错误,2 显示帮助后退出
104+ * @return ParseResult 枚举指示解析结果
90105 */
91- int parse (BenchmarkConfig &config) {
106+ ParseResult parse (BenchmarkConfig &config) {
92107 for (int i = 1 ; i < argc_; ++i) {
93108 std::string arg = argv_[i];
94109
95110 if (arg == " -h" || arg == " --help" ) {
96111 printUsage (argv_[0 ]);
97- return 2 ;
112+ return ParseResult::HelpShown ;
98113 }
99114
100115 if (arg == " -s" || arg == " --size" ) {
101- int result = parseSizeArg (i, config);
102- if (result != 0 )
103- return result;
116+ if (!parseSizeArg (i, config))
117+ return ParseResult::Error;
104118 continue ;
105119 }
106120
107121 if (arg == " --dims" ) {
108- int result = parseDimsArg (i, config);
109- if (result != 0 )
110- return result;
122+ if (!parseDimsArg (i, config))
123+ return ParseResult::Error;
111124 continue ;
112125 }
113126
@@ -117,30 +130,28 @@ class CliParser {
117130 }
118131
119132 if (arg == " --warmup" ) {
120- int result = parseWarmupArg (i, config);
121- if (result != 0 )
122- return result;
133+ if (!parseWarmupArg (i, config))
134+ return ParseResult::Error;
123135 continue ;
124136 }
125137
126138 if (arg == " --benchmark" ) {
127- int result = parseBenchmarkArg (i, config);
128- if (result != 0 )
129- return result;
139+ if (!parseBenchmarkArg (i, config))
140+ return ParseResult::Error;
130141 continue ;
131142 }
132143
133144 fprintf (stderr, " Unknown argument: %s\n " , arg.c_str ());
134145 printUsage (argv_[0 ]);
135- return 1 ;
146+ return ParseResult::Error ;
136147 }
137148
138149 // 默认添加 1024x1024x1024
139150 if (config.empty ()) {
140151 config.addCase (1024 , 1024 , 1024 );
141152 }
142153
143- return 0 ;
154+ return ParseResult::Success ;
144155 }
145156
146157 void printUsage (const char *program) const {
@@ -163,82 +174,82 @@ class CliParser {
163174 }
164175
165176 private:
166- int parseSizeArg (int &i, BenchmarkConfig &config) {
177+ bool parseSizeArg (int &i, BenchmarkConfig &config) {
167178 if (i + 1 >= argc_) {
168179 fprintf (stderr, " Error: -s requires a size argument\n " );
169- return 1 ;
180+ return false ;
170181 }
171182
172183 int size;
173184 if (!detail::safeStrToInt (argv_[++i], &size, " size" )) {
174- return 1 ;
185+ return false ;
175186 }
176187 if (size <= 0 ) {
177188 fprintf (stderr, " Error: Size must be positive\n " );
178- return 1 ;
189+ return false ;
179190 }
180191
181192 config.addCase (size, size, size);
182- return 0 ;
193+ return true ;
183194 }
184195
185- int parseDimsArg (int &i, BenchmarkConfig &config) {
196+ bool parseDimsArg (int &i, BenchmarkConfig &config) {
186197 if (i + 3 >= argc_) {
187198 fprintf (stderr, " Error: --dims requires M K N arguments\n " );
188- return 1 ;
199+ return false ;
189200 }
190201
191202 int M, K, N;
192203 if (!detail::safeStrToInt (argv_[++i], &M, " M dimension" ) ||
193204 !detail::safeStrToInt (argv_[++i], &K, " K dimension" ) ||
194205 !detail::safeStrToInt (argv_[++i], &N, " N dimension" )) {
195- return 1 ;
206+ return false ;
196207 }
197208 if (M <= 0 || K <= 0 || N <= 0 ) {
198209 fprintf (stderr, " Error: Dimensions must be positive\n " );
199- return 1 ;
210+ return false ;
200211 }
201212
202213 config.addCase (M, K, N);
203- return 0 ;
214+ return true ;
204215 }
205216
206- int parseWarmupArg (int &i, BenchmarkConfig &config) {
217+ bool parseWarmupArg (int &i, BenchmarkConfig &config) {
207218 if (i + 1 >= argc_) {
208219 fprintf (stderr, " Error: --warmup requires a number argument\n " );
209- return 1 ;
220+ return false ;
210221 }
211222
212223 int warmup;
213224 if (!detail::safeStrToInt (argv_[++i], &warmup, " warmup" )) {
214- return 1 ;
225+ return false ;
215226 }
216227 if (warmup < 0 ) {
217228 fprintf (stderr, " Error: Warmup runs must be non-negative\n " );
218- return 1 ;
229+ return false ;
219230 }
220231
221232 config.warmup_runs = warmup;
222- return 0 ;
233+ return true ;
223234 }
224235
225- int parseBenchmarkArg (int &i, BenchmarkConfig &config) {
236+ bool parseBenchmarkArg (int &i, BenchmarkConfig &config) {
226237 if (i + 1 >= argc_) {
227238 fprintf (stderr, " Error: --benchmark requires a number argument\n " );
228- return 1 ;
239+ return false ;
229240 }
230241
231242 int bench;
232243 if (!detail::safeStrToInt (argv_[++i], &bench, " benchmark" )) {
233- return 1 ;
244+ return false ;
234245 }
235246 if (bench <= 0 ) {
236247 fprintf (stderr, " Error: Benchmark runs must be positive\n " );
237- return 1 ;
248+ return false ;
238249 }
239250
240251 config.benchmark_runs = bench;
241- return 0 ;
252+ return true ;
242253 }
243254
244255 int argc_;
0 commit comments