Печать содержимого файла с использованием директивы #include (препроцессор) - PullRequest
0 голосов
/ 14 сентября 2009

Допустим, у меня есть файл t.txt, который содержит следующие две строки:

one    
two

Теперь я хотел бы написать программу, которая каким-то образом #include запишет этот файл и напечатает его содержимое, не более того. То есть я хочу, чтобы содержимое этого файла отображалось в моем коде как статический текст во время компиляции.

Есть идеи?


Причина, по которой я спрашиваю, такова:

Я хотел бы создать квинну, включив свой собственный файл (с ifndefs, чтобы предотвратить рекурсивное включение после первых двух): http://en.wikipedia.org/wiki/Quine_(computing). Так что я все еще хотел бы получить ответ.

Ответы [ 12 ]

0 голосов
/ 21 сентября 2009

Вы можете сделать это в make-файле:

all:  target

TEXT_FILES  = $(wildcard *.txt)
TEXT_OBJS   = $(patsubst %.txt,%.text.o,$(TEXT_FILES))


target: main.o $(TEXT_OBJS)
    $(CXX) -o app $^

%.text.cpp: %.txt
    @echo "Building Text Source $*"
    @echo "char const* $* =" > $@
    @awk '{print "\"" $$0 "\\n\"";}' $^ >> $@
    @echo ";" >> $@

Что это делает.
Если у вас есть текстовый файл с именем plop.txt. Затем он создает файл plop.text.cpp с переменной 'char const * plop ='. После компиляции временный файл удаляется, но если вы измените файл plop.txt, он будет автоматически перестроен в plop.text.o

Затем все это объединяется:

Я протестировал следующий пример:

> cat main.cpp

#include <iostream>
extern char* text;

int main()
{
std::cout << text;
}

> cat text.txt 

Hi there this is a file
with multiple lines
we want to print out.
> make
g++    -c -o main.o main.cpp
Building Text Source text
g++    -c -o text.text.o text.text.cpp
g++ -o app main.o text.text.o
rm text.text.cpp
> ./app

Hi there this is a file
with multiple lines
we want to print out.
> 
0 голосов
/ 14 сентября 2009

Хотелось бы что-нибудь подобное для вас?

example.c

static const char *var = 
#include "staticstring.txt"
;

int main() {
    printf( "%s\n" var );
    return 0;
}

staticstring.txt

"Some string that gets included at compile time"

Я уверен, что есть способ, которым вы можете сделать это без кавычек внутри текстового файла, но сейчас ничего не приходит на ум.

...