我在我的系統中安裝了frama-c。編譯器在創建目標代碼之前是否生成隱式轉換的代碼?
它做的事情,是我所有的代碼轉換爲使用C的所有隱式轉換更加擴大的形式..
(EG)
//我的實際代碼
if(opTab ==NULL || symTab ==NULL || intermediateFile==NULL || sourceCode ==NULL)
{
printf("\nError in opening file streams");
exit(EXIT_FAILURE);
}
//郵資-C轉換代碼
if (opTab == (void *)0) {
printf((char const *)"\nError in opening file streams");
exit(1);
}
else {
if (symTab == (void *)0) {
printf((char const *)"\nError in opening file streams");
exit(1);
}
else {
if (intermediateFile == (void *)0) {
printf((char const *)"\nError in opening file streams");
exit(1);
}
else {
if (sourceCode == (void *)0) {
printf((char const *)"\nError in opening file streams");
exit(1);
}
}
}
}
現在我的疑問是, 創建對象PROG之前RAM,是否C編譯器做所有隱式轉換?
OR
是否創建目標程序的過程中,這些隱式轉換是平行做了什麼?
OR
它是依賴於實現?如果是這樣,爲什麼?
我非常喜歡你的解釋。僅僅爲了澄清,Frama-C沒有'double double =(double)n;'在文本上不僅僅是編譯器。它有一個抽象語法樹,其中轉換是明確的(因爲大多數編譯器可能會這樣做,因爲標準說這就是'x = n;'的意思)。如果您要求將AST打印出來(例如,作爲調試的幫助),則轉換僅以文本形式顯示。 –
@keith Thompson偉大的答案。謝謝 –