2015-06-04 4 views
1

В frama-C, когда я загружаю исходный файл, он выполняет предварительную обработку и выполняет автоматическую коррекцию ошибок, такую ​​как «автоматический тип», как показано ниже (int is typecasted to float).Как отслеживать различия между исходным кодом C и предварительно обработанным кодом Frama-C?

Теперь, как я могу увидеть все изменения, сделанные после предварительной обработки.

Есть ли способ или файл журнала или предупреждающее сообщение, которое показывает все изменения, сделанные рамкой-c.! Это мой исходный код:

int main() { 
int a, b; 

printf("Input two integers to divide\n"); 
scanf("%d%d", &a, &b); 
printf("%d/%d = %.2f\n", a, b, a/(float)b); 

} 

Это мой Frama-C препроцессор кода: API

extern int (/* missing proto */ printf)(); 
extern int (/* missing proto */ scanf)(); 
int main(void) { 
int a; 
int b; 
int __retres; 
printf("Input two integers to divide\n"); 
scanf("%d%d", &a, &b); 
printf("%d/%d = %.2f\n", a, b, (float)a/(float)b); 
__retres =0; 
return (__retres); 
} 

ответ

5

FRAMA-C прелагает определенное количество крючков, которые будут запускаемыми для разностных случаев нормализации. Обратите внимание, что он не выполняет «автоматическую коррекцию ошибок». Преобразования, которые выполняются, не изменяют семантику программы.

Эти крючки расположены в cil/src/frontc/cabs2cil.mli Например, вы найти там:

val typeForInsertedCast: 
    (Cil_types.exp -> Cil_types.typ -> Cil_types.typ -> Cil_types.typ) ref 

typeForInsertedCast e t1 t2 вызывается, когда выражение e типа t1 должен быть неявно преобразован в тип t2 (в условиях, описанных в разделе 6.3 стандарта C о неявных преобразованиях). Предоставляя свою собственную функцию через плагин, вы можете отслеживать все неявные преобразования, которые происходят в вашей программе.

Учебник по написанию плагинов Frama-C доступен в user manual (требуется знание OCaml).