星期一, 12月 04, 2006

古老的Turbo C 2.0 Bug

今天有同事在開發Embedded System應用,使用"類DOS"系統,開發工具是Turbo C 2.0。
因為他不會C語言,所以我簡單地教他用指標與atof等函數,但卻在如此簡單的範例出錯:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
    double ret;
    char *xxx="32.3";
    /* sin(0); */
    /*加上面這行才會自己連結math library */
    ret = atof(xxx);
    printf ( "%f \n" , ret);
    return 0;
}
輸入 tcc a.c 再執行 a.exe
會出現
scanf : floating point formats not linked
Abnormal program termination
實在是很怪異,換別的compiler當然沒問題。看起來是沒有連結到math library,但我手動連結也沒用。
我拿以前寫的轉換程式來執行,卻完全正常。
後來經過幾次測試,發現只要有三角函數就會自動連結math lib,結果真是做夢也沒想到,居然需要加一行dummy指令才有用。

這麼大的Bug,為什麼我十幾年前玩Turbo C時都不知道呢....

沒有留言: