Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:13

0001 // gcc ArgsTest.cc -lstdc++ -Wvla -o /tmp/ArgsTest && /tmp/ArgsTest red green blue cyan magenta yellow black  
0002 // head -1 ArgsTest.cc | perl -pe 's,//,,' - | sh  
0003 
0004 #include <string.h>
0005 #include <stdio.h>
0006 
0007 
0008 void check(int argc, char** argv)
0009 {
0010     char** args = new char*[argc] ; 
0011     for(int i=0 ; i < argc ; ++i ) args[i] = strdup(argv[i]) ; 
0012     for(int i=0 ; i < argc ; ++i ) printf(" %2d : [%s] \n", i, args[i] ); 
0013 }
0014 
0015 void check1()
0016 {
0017     int argc(1);
0018     //  char* argv[argc] ;   // <-- ok with clang, but with juno options -Wvla :  warning: ISO C++ forbids variable length array ‘argv’
0019 
0020     char** argv = new char*[argc] ; 
0021     argv[0] = (char*)"ArgsTest.cc" ; 
0022     check(argc, argv);  
0023     delete [] argv ; 
0024 
0025 }
0026 
0027 void check1fix()
0028 {
0029     //enum { argc = 1 } ;
0030     const int argc = 1 ; 
0031     char* argv[argc] ; 
0032     argv[0] = (char*)"ArgsTest.cc" ;  
0033     check(argc, argv);  
0034 }
0035 
0036 
0037 void check2()
0038 {
0039 
0040     //int argc(2); 
0041     //char* argv[argc] ; 
0042     enum { argc = 2 } ;
0043     char* argv[argc] ; 
0044 
0045     argv[0] = (char*)"ArgsTest.cc" ; 
0046     argv[1] = (char*)"red" ; 
0047 
0048     check(argc, argv);  
0049 }
0050 
0051 int main(int argc, char** argv)
0052 {
0053     //check(argc, argv); 
0054 
0055     //check1(); 
0056     check1fix(); 
0057     check2(); 
0058 
0059     return 0 ; 
0060 }