D.gnu - va_start
- nix (24/24) Nov 24 2004 Hello,
- David Friedman (6/44) Nov 24 2004 Argh, I didn't implement va_start correctly. As a workaround, you can
- Manfred Hansen (3/50) Nov 24 2004 Thank you for the quick answer
Hello,
this programm compile successfully with dmd but with
gdc i get the following error message:
v_args1.d:6: template instance va_start!(char[]) va_start is not a template
declaration, it is a function
v_args1.d:6: function expected before (), not 'void'
import std.c.stdarg;
int foo(char[] x, ...) {
va_list ap;
va_start!(typeof(x))(ap, x);
printf("&x = %p, ap = %p\n", &x, ap);
printf("%.*s\n",x);
int i;
i = va_arg!(typeof(i))(ap);
printf("i = %d\n", i);
va_end(ap);
return i;
}
int main() {
int j;
j = foo("hello", 3);
printf("j = %d\n", j);
return 0;
}
Nov 24 2004
nix wrote:
Hello,
this programm compile successfully with dmd but with
gdc i get the following error message:
v_args1.d:6: template instance va_start!(char[]) va_start is not a template
declaration, it is a function
v_args1.d:6: function expected before (), not 'void'
import std.c.stdarg;
int foo(char[] x, ...) {
va_list ap;
va_start!(typeof(x))(ap, x);
printf("&x = %p, ap = %p\n", &x, ap);
printf("%.*s\n",x);
int i;
i = va_arg!(typeof(i))(ap);
printf("i = %d\n", i);
va_end(ap);
return i;
}
int main() {
int j;
j = foo("hello", 3);
printf("j = %d\n", j);
return 0;
}
Argh, I didn't implement va_start correctly. As a workaround, you can
use "va_start(ap,x);"
Is foo supposed to be an "extern(C)" function? If not, you can use the
predefined variable "_argptr" and there is no need to call va_start.
David
Nov 24 2004
Thank you for the quick answer Manfred David Friedman wrote:nix wrote:Hello, this programm compile successfully with dmd but with gdc i get the following error message: v_args1.d:6: template instance va_start!(char[]) va_start is not a template declaration, it is a function v_args1.d:6: function expected before (), not 'void' import std.c.stdarg; int foo(char[] x, ...) { va_list ap; va_start!(typeof(x))(ap, x); printf("&x = %p, ap = %p\n", &x, ap); printf("%.*s\n",x); int i; i = va_arg!(typeof(i))(ap); printf("i = %d\n", i); va_end(ap); return i; } int main() { int j; j = foo("hello", 3); printf("j = %d\n", j); return 0; }Argh, I didn't implement va_start correctly. As a workaround, you can use "va_start(ap,x);" Is foo supposed to be an "extern(C)" function? If not, you can use the predefined variable "_argptr" and there is no need to call va_start. David
Nov 24 2004








Manfred Hansen <manfred toppoint.de>