小编hwl*_*liu的帖子

LLVM优化器无法处理简单的情况?

我写了一个如下所示的.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)

c++ optimization llvm

7
推荐指数
1
解决办法
103
查看次数

如何替换va_list中的值?

我想做一些关于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)

c variable-length

7
推荐指数
2
解决办法
1766
查看次数

标签 统计

c ×1

c++ ×1

llvm ×1

optimization ×1

variable-length ×1