D - arguments and return value of main function
Following codes can be compiled and executed!
void main(int a, int b, int c, int d) {
printf("%08X\n", a);
printf("%08X\n", b);
printf("%08X\n", c);
printf("%08X\n", d);
}
$ ./main blah blah blah
00000004 <- argv.length
0012FF18 <- &argv[0]
0022E174
00000001
class Main {
public static int main(int argc, char[]* argv) {
for(int i = 0; i < argc; ++i) {
printf("%.*s\n", argv[i]);
}
return 0;
}
}
$ ./main hoge hoge
/main
hoge
hoge
struct Main {
private /* static */ double main(char[]* argv) {
int argc = (cast(int*)&argv)[-1];
for(int i = 0; i < argc; ++i) {
printf("%.*s\n", argv[i]);
}
return 2.3;
}
}
$ ./main foo bar
/main
foo
bar
Pls check main's format, D compiler!
"int main(int argc, char* argv[])" is a standard prototype of C/C++'s main
function.
But, the `argv' is an array object of pointers in D.
So, this prototype goes wrong in D
("int main(int argc, char[]* argv)" works because `argv' is a pointer of array
objects.)
I think that it's confusable for C/C++ programmers
(In fact, I saw one who suffers from it.)
Robert (Japanese)
Dec 08 2003
Hmm. I think you're right! "Robert" <Robert_member pathlink.com> wrote in message news:br21cq$1isd$1 digitaldaemon.com...Following codes can be compiled and executed! void main(int a, int b, int c, int d) { printf("%08X\n", a); printf("%08X\n", b); printf("%08X\n", c); printf("%08X\n", d); } $ ./main blah blah blah 00000004 <- argv.length 0012FF18 <- &argv[0] 0022E174 00000001 class Main { public static int main(int argc, char[]* argv) { for(int i = 0; i < argc; ++i) { printf("%.*s\n", argv[i]); } return 0; } } $ ./main hoge hoge /main hoge hoge struct Main { private /* static */ double main(char[]* argv) { int argc = (cast(int*)&argv)[-1]; for(int i = 0; i < argc; ++i) { printf("%.*s\n", argv[i]); } return 2.3; } } $ ./main foo bar /main foo bar Pls check main's format, D compiler! "int main(int argc, char* argv[])" is a standard prototype of C/C++'s main function. But, the `argv' is an array object of pointers in D. So, this prototype goes wrong in D ("int main(int argc, char[]* argv)" works because `argv' is a pointer ofarrayobjects.) I think that it's confusable for C/C++ programmers (In fact, I saw one who suffers from it.) Robert (Japanese)
Dec 08 2003








"Walter" <walter digitalmars.com>