【问题标题】:C++ Expected string literal before argsargs 之前的 C++ 预期字符串文字
【发布时间】:2017-09-14 14:59:04
【问题描述】:
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
    string argstr[argc];
    for(int c = 1; c++; c<argc) {
        argstr[c].assign(argv[c]);
    }

    for(int c = 1; c++; c<argc) {
        __asm__(argstr[c]); //This is where the error occurs
        cout << argstr[c] << endl;
    }
}

如果我尝试用 MinGW 编译它,我会收到以下错误:

Main.cpp:在函数'int main(int,char**)'中: Main.cpp:15:6:错误:“args”之前的预期字符串文字 asm(参数);

我知道这一点,这就是我将参数分配给字符串向量的原因。

【问题讨论】:

  • A std::string 不是字符串文字。
  • 字符串文字是一个字符串,其值在源代码中表示为用引号括起来的字符"like this"。在运行时不可能组装任何东西。

标签: c++


【解决方案1】:

__asm__() 是一个 编译时 构造。参数 必须 是字符串文字,而不是变量。

【讨论】:

    【解决方案2】:

    您不能像这样动态执行汇编代码。编译器需要在编译时了解汇编指令,以便检查它们是否有效,但您试图在运行时传递它们。

    编辑:一种解决方法是在 python 中编写一个包装程序(例如),将字符串文字注入到您的 C++ __asm__ 构造中,然后编译并为您执行它。

    【讨论】:

    • 这是一个可怕的解决方法,请不要这样做。
    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    相关资源
    最近更新 更多