首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C/ C++实现和传递代码

C/ C++实现和传递代码
EN

Stack Overflow用户
提问于 2013-08-21 17:42:37
回答 4查看 186关注 0票数 1

我在C中有来自另一种语言的解释器,我必须将代码(大约200行)从另一种语言传递给这个解释器,然后问题就出现了。

代码语言:javascript
运行
复制
char* command_line[] = {
    "", 
    "-e", 
    "print \"Hello from C!\\n\";"
};

此代码通过以下方式进行解析:

代码语言:javascript
运行
复制
(..)
    parser(my_p, NULL, 3, command_line, (char **)NULL);
(...)

在上面的代码中,我使用了数组,但即使是简单的代码,也必须在字符之前加上\,比如“;|\”。

如何避免这个问题并轻松传递200多行代码呢?

EN

回答 4

Stack Overflow用户

发布于 2013-08-21 17:48:14

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

代码语言:javascript
运行
复制
R"(print "Hello from C!\n";)"

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

票数 5
EN

Stack Overflow用户

发布于 2013-08-21 18:02:36

您可以使用C预处理器来为您完成字符串化:

代码语言:javascript
运行
复制
#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的参数中保持平衡,并且必须将宏放在要转义的每一行上。

票数 1
EN

Stack Overflow用户

发布于 2013-08-21 17:49:35

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18354029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档