C / C ++,你可以#将一个文件包含到字符串中吗?

这个问题在这里已经有了答案:

  • “#include”一个C程序中的文本文件为char [] 15个答案

  • C / C ++预处理器以令牌为单位进行操作,字符串文字是单个令牌。 因此,您不能像这样干预字符串的中间。

    您可以将script.py预处理为如下所示的内容:

    "some coden"
    "some more code that will be appendedn"
    

    然而#include那。 或者,您可以使用xxd ​ -i生成一个C静态数组,以供包含。


    这不会让你一直在那里,但它会让你相当接近。

    假设script.py包含这个:

    print "The current CPU time in seconds is: ", time.clock()
    

    首先,像这样包装它:

    STRINGIFY(print "The current CPU time in seconds is: ", time.clock())
    

    然后,在包含它之前,请执行以下操作:

    #define STRINGIFY(x) #x
    
    const char * script_py =
    #include "script.py"
    ;
    

    有可能比这更严格的答案,但我仍在寻找。


    执行此类操作的最佳方法是,如果您的环境/工具集具有该功能,则将该文件包含为资源。

    如果没有(像嵌入式系统等),你可以使用bin2c工具(如http://stud3.tuwien.ac.at/~e0025274/bin2c/bin2c.c)。 它将采用文件的二进制表示形式并吐出包含初始化为该数据的字节数组的C源文件。 如果希望数组终止' 0',您可能需要对工具或输出文件进行一些调整。

    将bin2c工具运行到你的makefile中(或者作为你用来驱动你的编译的预编译步骤)。 然后,只需将文件编译并链接到您的应用程序,并且您的字符串(或文件的其他图像)位于数组表示的内存块中。

    如果您将文本文件包含为字符串,则应注意的一件事是线路结尾可能与功能预期不匹配 - 这可能是您希望添加到bin2c实用程序的另一件事,或者您希望确保你的代码正确处理文件中的任何行尾。 也许修改bin2c工具有一个'-s'开关,表明你想要一个文本文件作为一个字符串被包含,所以行结束将被标准化,并且一个零字节将在数组的末尾。

    链接地址: http://www.djcxy.com/p/72119.html

    上一篇: C/C++, can you #include a file into a string literal?

    下一篇: C++ multiline string literal