Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;实现并传递代码_C++_C - Fatal编程技术网

C++ C/C++;实现并传递代码

C++ C/C++;实现并传递代码,c++,c,C++,C,我有C语言的另一种语言的解释器。我必须将另一种语言的代码(大约200行)传递给这个解释器,这里出现了问题 char* command_line[] = { "", "-e", "print \"Hello from C!\\n\";" }; 此代码由以下人员解析: (..) parser(my_p, NULL, 3, command_line, (char **)NULL); (...) 在代码abobe中,我使用数组,但即使是简单的代码也必须在“;”等字

我有C语言的另一种语言的解释器。我必须将另一种语言的代码(大约200行)传递给这个解释器,这里出现了问题

char* command_line[] = {
    "", 
    "-e", 
    "print \"Hello from C!\\n\";"
};
此代码由以下人员解析:

(..)
    parser(my_p, NULL, 3, command_line, (char **)NULL);
(...)
在代码abobe中,我使用数组,但即使是简单的代码也必须在“;”等字符之前使用\进行包装


如何避免此问题并传递200多行代码?

您可以使用脚本将文本输入作为文件,并将其字符串化(转义双引号和换行符):

!/usr/bin/env python
导入系统
def干管(argv=无):
如果argv为None:
argv=sys.argv
如果len(argv)<2:
sys.stderr.write(“用法:stringify.py input.txt[…input.txt]\n”)
系统出口(1)
i=1
而i
您可以使用脚本将文本输入作为文件,并将其字符串化(转义双引号和换行符):

!/usr/bin/env python
导入系统
def干管(argv=无):
如果argv为None:
argv=sys.argv
如果len(argv)<2:
sys.stderr.write(“用法:stringify.py input.txt[…input.txt]\n”)
系统出口(1)
i=1
而i
如果您使用的是C++11,则可以使用原始字符串文本

R"(print "Hello from C!\n";)"

或者,您可以简单地将所有数据放入一个外部文件,并在开始时读取。无需转义其中的任何数据。

如果您使用的是C++11,则可以使用原始字符串文字

R"(print "Hello from C!\n";)"

或者,您可以简单地将所有数据放入一个外部文件中,并在开始时读取。无需转义那里的任何数据。

不幸的是,C中不支持文字字符串或类似的有用结构,因此如果您想在C程序中编写解释代码,您必须小心,在编写时转义引号和斜杠阿维说

另一种方法是将代码写入文本文件,并将其视为外部资源文件。您可以从代码内部将资源文件读入字符串,然后将其传递给
解析器()


这取决于您使用的平台。Windows很好地支持资源文件并将它们嵌入到.exe文件中。我确信gcc也可以,但我以前没有这样做过。我恐怕有点含糊,但我希望它能有所帮助。

不幸的是,C中不支持文本字符串或类似的有用结构,因此,如果你想在你的C程序中编写解释过的代码,你必须小心,并像你所说的那样转义引号和斜杠

另一种方法是将代码写入文本文件,并将其视为外部资源文件。您可以从代码内部将资源文件读入字符串,然后将其传递给
解析器()


这取决于您使用的平台。Windows对资源文件有很好的支持,并将它们嵌入到.exe文件中。我相信gcc也可以,但我以前没有这样做过。我恐怕有点含糊不清,但我希望它能帮到您。

您可以使用C预处理器为您执行字符串化:

#define STRINGIFY(...) #__VA_ARGS__
#define STRINGIFY_NL(...) #__VA_ARGS__ "\n"

char* command_line[] = {
    "", 
    "-e", 
    STRINGIFY(print "Hello from C!\n";),    //< one element of the array

                                            //< another element of the array
                                            //< with embedded NL
    STRINGIFY_NL(print "Hello from C!")     //< no comma and the next line is glued
    STRINGIFY   ("for a second time";),     //< end of other string
};
#定义字符串化(…)#__
#定义STRINGIFY\u NL(…)\uuu VA\u ARGS\uu\n
字符*命令行[]={
"", 
“-e”,
STRINGIFY(打印“Hello from C!\n”),//<数组的一个元素
//<数组的另一个元素
//<使用嵌入式NL
STRINGIFY_NL(打印“Hello from C!”)//<不使用逗号,下一行是粘合的
STRINGIFY(“第二次”),//<其他字符串的结尾
};

要遵守的唯一限制是,可能的
()
必须在
STRINGIFY
的参数内保持平衡,并且必须将宏放在要转义的每一行上。

可以使用C预处理器为您执行STRINGIFY:

#define STRINGIFY(...) #__VA_ARGS__
#define STRINGIFY_NL(...) #__VA_ARGS__ "\n"

char* command_line[] = {
    "", 
    "-e", 
    STRINGIFY(print "Hello from C!\n";),    //< one element of the array

                                            //< another element of the array
                                            //< with embedded NL
    STRINGIFY_NL(print "Hello from C!")     //< no comma and the next line is glued
    STRINGIFY   ("for a second time";),     //< end of other string
};
#定义字符串化(…)#__
#定义STRINGIFY\u NL(…)\uuu VA\u ARGS\uu\n
字符*命令行[]={
"", 
“-e”,
STRINGIFY(打印“Hello from C!\n”),//<数组的一个元素
//<数组的另一个元素
//<使用嵌入式NL
STRINGIFY_NL(打印“Hello from C!”)//<不使用逗号,下一行是粘合的
STRINGIFY(“第二次”),//<其他字符串的结尾
};

唯一需要遵守的限制是可能的
()
必须在
STRINGIFY
的参数中保持平衡,并且必须将宏放在要转义的每一行上。

就目前而言,这是一个可怕的问题。
解析器
做什么?你不能从这个问题中分辨出任何东西。这不太糟糕!我的理解是,他只是想为其编写代码“C语言”或“C++”(C语言)中的“C语言”或“C++”(11)在C++中没有这样的选择。在C中,没有这样的运气。但是为什么不读FRO?