跳到主要內容

古老的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時都不知道呢....

留言

這個網誌中的熱門文章

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

如何將較高版本SQL Server複製到低版本SQL Server (降級為舊版)並保留權限及資料庫圖表

一般若是要將SQL Server裡的Database轉往其他Server時,最簡單的方式就是備份(Backup)後再還原(Restore),或者是䣃離(detach)後附加(attach)。 但是很不幸地,若是由較低版本(e.g. 2008)到較高版本(e.g. 2012)要怎麼辦呢?