c語言庫函數編譯的最佳化

來源:互聯網
上載者:User

c語言的有些庫函數會在編譯的時候被最佳化

如gcc中

log2(1)會被最佳化成常數

但是log2(20)就會在運行時計算值

fabs會被最佳化成機器(彙編)指令fabs

所以即使你沒有包含含有fabs聲明的標頭檔也可以成功編譯運行

帶有fabs函數的程式

.....................................................................

(int&)a和*((int*)&a)是一樣的

把&a這個地址上32位元看作int型

..................................................................

C語言標準提供了一種資料類型long long

目前的平台上 long long是8位元組的64位整數

表示的數範圍是[-2^63, 2^63-1]

那麼如何輸入輸出這個類型的資料呢

long long test;

scanf("%lld",&test);

printf("%lld",test);

在gcc4+Linux(2.6.15)下面,這樣的輸入輸出是沒有問題的

但是在Windows下面

一些老的編譯器,這樣的代碼是沒法正確工作的

原因是C-Runtime-Library不支援這個參數

在XP+DevC++4.9下面

這個得變成windows的特殊方式指定類型

%lld得用%I64d替換

---------------------------------------------------------------

怎樣讀取一個double的全部記憶體資料

typedef union
{
double value;
struct
{
unsigned int lsw;
unsigned int msw;
} parts;
} ieee_double_shape_type;
/* Get two 32 bit ints from a double. */

#define EXTRACT_WORDS(ix0,ix1,d)
do {
ieee_double_shape_type ew_u;
ew_u.value = (d);
(ix0) = ew_u.parts.msw;
(ix1) = ew_u.parts.lsw;
} while (0)

怎樣輸出一個完整的浮點數

double d1;
char str1[64];
d1=0.681638760023334166733241952779893935; //36
dtoa(str1, d1, 40);
printf(" d1 = %s \r\n",str1);

---------------------------------------------------------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.