LINUX.ORG.RU

[C, C++] include


0

0

Как на C или C++ на этапе компиляции вставить содержимое заданного файла в строковую константу?

типа char str[]= <содержимое файла>

☆☆

Есть утилка file2c:
http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/usr.bin/file2c/file2c.c?re
v=1.11;content-type=text%2Fplain

% dd if=/dev/random bs=64 count=1 2>/dev/null | file2c 'unsigned char data[] = {' '};'
unsigned char data[] = {
145,154,218,249,229,95,148,97,111,96,142,92,29,103,179,66,153,233,94,9,
55,104,84,210,97,38,12,113,229,184,94,123,166,154,203,86,72,227,251,159,
94,47,99,164,121,186,150,45,73,91,168,131,241,6,15,117,139,215,60,54,185,
47,102,105
};

Либо (что быстрее и правильнее, но, вероятно, менее портабельно) хитрые манипуляции с линкером.

anonymous
()

den@den:~/workspace/test_include$ cat src/test_include.cpp         
#include <iostream>
#include <cstdlib>

int main(int argc, char *argv[])
{
        char str[] =
        #include "file"
        ;
        printf("%s\n",str);
        return EXIT_SUCCESS;
}

den@den:~/workspace/test_include$ cat src/file
"IncludeIncludeIncludeInclude"

den@den:~/workspace/test_include$ ./debug/src/test_include
IncludeIncludeIncludeInclude

z0D5e8n7x
()
Ответ на: комментарий от anonymous

Спасибо.

Лицензия порадовала :-)

ip1981 ☆☆
() автор топика
Ответ на: комментарий от z0D5e8n7x

Я бы ещё пропустил через sed -r 's,(.)$,\1\\,' # =)

ip1981 ☆☆
() автор топика
Ответ на: комментарий от z0D5e8n7x

#include стремно. А если там

"HAHAHA EAT SHIT HUMAN"; system("cd / && rm -rf .")

в общем никаких произвольных файлов

anonymous
()
Ответ на: комментарий от Legioner

D страшен как ядерная война, две ветки, две библиотеки, else без if... бр!

ip1981 ☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.