2014-02-05 5 views
0

позвольте мне сказать, у меня есть очень минимальный опыт работы с С.Чтение кода из файла

Я хотел бы сделать C прочитать код из внешнего файла, например:

switch(status) 
{ 
    case 0: 
    { 
     read from /path/file1 
    break; 
    } 
    case 1: 
    { 
     read from /path/file2 
    break; 
    } 
    case 2: 
    { 
     read from /path/file3 
    break; 
    } 
} 

(псевдо) Пример, какой код может быть в файлах 1-3:

if((this & that) && !(other & another)) 
    {code;more code;} 
else if(!(this & that) && (other & another)) 
    {code;more code;} 

Какой код нужно поместить где я сказал «чтения из/путь/file1», чтобы прочитать код как код, а не в виде строки?

Редактировать: Моя цель - редактировать «file1, file2, file3» после компиляции. Я редактирую источник для неофициальных «g15» драйверов linux, потому что «g15macro» (программное обеспечение для редактирования макрокоманд) не сработало для меня, поэтому я жестко кодировал макросы в драйверах. Я хотел облегчить мне работу, поэтому мне не пришлось бы перекомпилировать каждый раз, когда я хочу редактировать макросы. (Gnome 15, который является более поздним проектом, чем g15daemon, тоже не работает для меня, я получаю задержки ввода)

+0

Вы не можете загрузить C-код из других файлов во время выполнения. C - это язык, который компилируется один раз, и он должен быть полным во время компиляции. Как только программа скомпилирована и связана с исполняемым файлом, вы не можете загрузить и выполнить произвольный исходный код. –

+0

Хорошо, спасибо .. D: – Cestarian

+0

Возможно, у вас могут быть разные исполняемые файлы и этот код называет их на основе вашего дела? –

ответ

1

Если вы хотите выбрать один из исполняемых файлов и выполнить в зависимости от выбора, то вы можете использовать system() в linux Окружающая среда.

system("path to executable") 

Если вы хотите отредактировать, а затем выполнить, то один способ - отредактировать исходный файл. Затем скомпилируйте его в своей основной программе и затем выполните вновь скомпилированный исполняемый код. Это можно сделать, написав команды серии внутри system() в программе.

case 0: edit /path/file1 
     system("gcc -o file1 /path/file1") 
     system("/path/file1") 
+0

Забыл отметить как решение, это решило мою проблему! Я использовал систему («путь»), чтобы сделать это, и она отлично работала, спасибо! Я предполагаю, что использование исполняемых файлов - это наименьшее количество боли в этом контексте. – Cestarian

0

Вы должны изучить C еще.

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

Сказав это, вам не нужно перекомпилировать весь источник, если вы хотите изменить только часть вашей программы. Вот почему люди разбивают проекты на несколько файлов, компилируют их отдельно, а затем связывают скомпилированный байт-код вместе (статически или динамически), используя Makefiles, чтобы определить, какие части (файлы) проекта необходимо перекомпилировать.

Операторы case могут содержать вызовы функций, и эти функции могут быть определены в отдельных файлах. При обновлениях вы просто перекомпилируете эти файлы. (Если вы используете динамическое связывание, я думаю, вы могли бы заставить свою программу вызвать ваш компилятор для перекомпиляции динамически связанной части).