我写了一个如下所示的.cpp文件
int main() {
int a, b;
scanf( "%d", &b );
for ( int i = 0 ; i < 1000 ; i++ ) {
a = 0;
if ( b > 10 )
a = 3;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
然后我通过clang -O3选项编译这段代码,输出.ll文件是
define i32 @main() #0 {
entry:
%b = alloca i32, align 4
%call = call i32 (i8*, ...)* @scanf(i8* getelementptr inbounds ([3 x i8]* @.str, i32 0, i32 0), i32* %b)
%0 = load i32* %b, align …Run Code Online (Sandbox Code Playgroud) 我想做一些关于va_list的练习.这是我的代码.
int myscanf( char* fmt, ... ) {
va_list ap;
va_start ( ap, fmt );
vfscanf ( stdin, fmt, ap );
va_end ( ap );
}
int main() {
int a, b;
myscanf( "%d %d", &a, &b );
}
Run Code Online (Sandbox Code Playgroud)
如上所示,我写了一个scanf(),它是有效的.
现在我想重定向myscanf()中参数的值.
例如,我可以将fmt重定向到myscanf()中分配的空间
int myscanf( char* fmt, ... ) {
char newFmt[10] = "%d %d";
va_list ap;
va_start ( ap, fmt );
vfscanf ( stdin, newFmt, ap );
va_end ( ap );
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更改其他参数的值时,我感到困惑.
我可以通过va_arg()获取这些变量参数,但我不能修改它们,因为va_arg()是一个宏.
int myscanf( char* fmt, ... ) …Run Code Online (Sandbox Code Playgroud)