File tree Expand file tree Collapse file tree 4 files changed +71
-22
lines changed
Expand file tree Collapse file tree 4 files changed +71
-22
lines changed Original file line number Diff line number Diff line change 1- cmake_minimum_required (VERSION 3.9)
2- project (sonar_scanner_example)
1+ cmake_minimum_required (VERSION 3.30)
2+
3+ project (sonar_scanner_example LANGUAGES CXX)
4+
5+ set (CMAKE_CXX_STANDARD 20)
6+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
7+ set (CMAKE_CXX_EXTENSIONS OFF )
8+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
39
4- set (CMAKE_CXX_STANDARD 17)
510set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
611
712add_executable (sonar_scanner_example src/main.cpp)
8-
13+ target_sources (sonar_scanner_example
14+ PRIVATE
15+ FILE_SET CXX_MODULES FILES src/args.cppm
16+ )
Original file line number Diff line number Diff line change @@ -10,3 +10,8 @@ sonar.projectVersion=2.0-MODULES
1010
1111# SQ standard properties
1212sonar.sources =src
13+ # Enable C++20 modules
14+ # TODO: Remove internal
15+ sonar.cfamily.internal.enableModules =true
16+ # TODO: Remove
17+ sonar.cfamily.analysisCache.mode =internal.off
Original file line number Diff line number Diff line change 1+ module ;
2+ #include < iostream>
3+ #include < string_view>
4+ #include < variant>
5+
6+ export module args;
7+
8+ export namespace args {
9+
10+ enum class Error {
11+ Ok,
12+ TooLong,
13+ TooManyArgs,
14+ NullPtr,
15+ };
16+
17+ std::variant<std::string_view, Error> process_args (int argc, char *argv[]) {
18+ int num = argc - 1 ;
19+
20+ if (num == 0 ) {
21+ std::cout << " No arguments provided\n " ;
22+ } else if (num == 0 ) { // intentional mistake
23+ std::cout << " 1 argument provided\n " ;
24+ } else if (num == 2 ) {
25+ std::cout << " 2 arguments provided\n " ;
26+ } else {
27+ std::cout << num << " arguments provided\n " ;
28+ }
29+ if (argv != 0 ) {
30+ std::cout << " argv not null\n " ;
31+ ; // intentional extra-semicolon
32+ }
33+
34+ if (argv == nullptr ) {
35+ return std::string_view (*argv); // intentional nullptr dereference
36+ }
37+
38+ return std::string_view (argv[0 ]);
39+ }
40+ } // namespace args
Original file line number Diff line number Diff line change 11#include < iostream>
2+ #include < variant>
23
3- using namespace std ;
4+ import args ;
45
5- int main (int argc, char * argv[]) {
6- int num = argc - 1 ;
6+ using namespace std ;
77
8- if (num == 0 ) {
9- cout << " No arguments provided\n " ;
10- } else if (num == 0 ) { // intentional mistake
11- cout << " 1 argument provided\n " ;
12- } else if (num == 2 ) {
13- cout << " 2 arguments provided\n " ;
14- } else {
15- cout << num << " arguments provided\n " ;
16- }
17- if (argv != 0 ) {
18- cout << " argv not null\n " ;; // intentional extra-semicolon
19- }
20- if (argv == nullptr ) {
21- return **argv; // intentional nullptr dereference
8+ int main (int argc, char *argv[]) {
9+ auto get_proc_name = args::process_args (argc, argv);
10+ if (std::holds_alternative<args::Error>(get_proc_name)) {
11+ switch (std::get<args::Error>(get_proc_name)) {
12+ case args::Error::TooLong:
13+ std::cout << " Proc name too long\n " ;
14+ return 1 ;
15+ }
16+ return 0 ;
2217 }
2318
19+ auto &&value = std::get<std::string_view>(get_proc_name);
20+ std::cout << value << ' \n ' ;
2421 return 0 ;
2522}
26-
You can’t perform that action at this time.
0 commit comments