中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

云南企業(yè)網(wǎng)站代發(fā)qq群發(fā)廣告推廣

云南企業(yè)網(wǎng)站,代發(fā)qq群發(fā)廣告推廣,網(wǎng)站優(yōu)化公司免費咨詢,福建網(wǎng)站制作公司關(guān)于C語言中的Complex(復數(shù)類型)和imaginary(虛數(shù)類型) 1、C99 新增了復數(shù)類型(_Complex)和虛數(shù)類型(_Imaginary)。簡單來說,C99 提供了三種復數(shù)類型:float _…

關(guān)于C語言中的Complex(復數(shù)類型)和imaginary(虛數(shù)類型)

?

?

1、C99 新增了復數(shù)類型(_Complex)和虛數(shù)類型(_Imaginary)。簡單來說,C99 提供了三種復數(shù)類型:float _Complex,double _Complex,和 long double _Complex。對于 float _Complex類型的變量來說,它包含兩個 float類型的值,一個用于表示復數(shù)的實部(real part),另一個用于表示虛部(imaginary part)。類似地,double _Complex 包含兩個 double類型的值。C99 也提供了三種虛數(shù)類型:float _Imaginary,double _Imaginary,以及 long double _Imaginary。虛數(shù)類型只有虛部,沒有實部。

包含標準頭文件 complex.h 后,我們就可以用 complex來代表 _Complex,用imaginary來代表 _Imaginary,以及用 I來代表虛數(shù)單位 i,也就是 -1的平方根。例如:

#include <complex.h>

double _Complex x = 5.2;

double complex y = 5.0 * I;

double complex z = 5.2 – 5.0 * I;

注意:_Complex類型對于獨立式環(huán)境(freestanding environment)來說是可選的??蛇x的意思是,不強制必須支持這種類型。而所謂獨立式環(huán)境,是指 C 程序可以在沒有操作系統(tǒng)的情況下運行。_Imaginary類型在任何環(huán)境下都是可選的。目前的編譯器對這兩種類型的支持都不太好,在此就不對這兩種類型進行更深入的討論了

2、C99 新增了 _Bool 類型(布爾類型)用于表示真/假。_Bool 類型的變量的值只能是 0 或者 1。無論賦予任何非零值給 _Bool 類型的變量,它的值都只會是 1。例如:
_Bool i_am_true = 15; // i_am_true 的值是 1
_Bool am_i_true = (var > 15); // 當 var 大于 15 時,am_i_true 的值為 1

包含標準頭文件 stdbool.h 后,我們可以用 bool 代替 _Bool ,true 代替 1 ,false 代替 0 。例如:
bool no_error = true;
no_error = false;
這么做是為了和 C++ 兼容,stdbool.h 是 C99 新增的。

3、register修飾符
  register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。例如下面的內(nèi)存塊拷貝代碼,

  

  

  #ifdef NOSTRUCTASSIGN

  memcpy (d, s, l)

  {register char *d;

  register char *s;

  register int i;

  while (i--)

  *d++ = *s++;

  }

  #endif

  但是使用register修飾符有幾點限制。

  首先,register變量必須是能被CPU所接受的類型。這通常意味著register變量必須是一個單個的值,并且長度應該小于或者等于整型的長度。不過,有些機器的寄存器也能存放浮點數(shù)。

  其次,因為register變量可能不存放在內(nèi)存中,所以不能用“&”來獲取register變量的地址。

  由于寄存器的數(shù)量有限,而且某些寄存器只能接受特定類型的數(shù)據(jù)(如指針和浮點數(shù)),因此真正起作用的register修飾符的數(shù)目和類型都依賴于運行程序的機器,而任何多余的register修飾符都將被編譯程序所忽略。

  在某些情況下,把變量保存在寄存器中反而會降低程序的運行速度。因為被占用的寄存器不能再用于其它目的;或者變量被使用的次數(shù)不夠多,不足以裝入和存儲變量所帶來的額外開銷。

4、volatile關(guān)鍵字

volatile總是與優(yōu)化有關(guān),編譯器有一種技術(shù)叫做數(shù)據(jù)流分析,分析程序中的變量在哪里賦值、在哪里使用、在哪里失效,分析結(jié)果可以用于常量合并,常量傳播等優(yōu)化,進一步可以死代碼消除。但有時這些優(yōu)化不是程序所需要的,這時可以用volatile關(guān)鍵字禁止做這些優(yōu)化,volatile的字面含義是易變的,它有下面的作用:

1) 不會在兩個操作之間把volatile變量緩存在寄存器中。在多任務、中斷、甚至setjmp環(huán)境下,變量可能被其他的程序改變,編譯器自己無法知道,volatile就是告訴編譯器這種情況。
2)不做常量合并、常量傳播等優(yōu)化,所以像下面的代碼:
  volatile int i = 1;
  if (i > 0) ...
  
  if的條件不會當作無條件真。 意思i可能被其它程序所改變

3)對volatile變量的讀寫不會被優(yōu)化掉。如果你對一個變量賦值但后面沒用到,編譯器常??梢允÷阅莻€賦值操作,然而對Memory Mapped IO的處理是不能這樣優(yōu)化的。

4)volatile變量能防止優(yōu)化,比如說你在某個地方可能連續(xù)調(diào)用了好幾次這個函數(shù),于是編譯器優(yōu)化后,可能就調(diào)用一次,其他幾次就采用這一次調(diào)用的返回值,而volatile修飾后,要讓每一次都進行函數(shù)調(diào)用,而不采用暫存值。

5、 內(nèi)聯(lián)函數(shù)(inline)

什么是內(nèi)聯(lián)函數(shù):內(nèi)聯(lián)函數(shù)是為了解決C 預處理器宏存在的問題所提出一種解決方案,用來提高函數(shù)使用效率。內(nèi)聯(lián)函數(shù)使用inline關(guān)鍵字定義,并且函數(shù)體和申明必須結(jié)合在一起,
否則編譯器將他作為普通函數(shù)對待。

inline void function(int x); //僅僅是申明函數(shù),沒有任何效果

inline void function(int x) //正確
{
return x;
}

在類內(nèi)部定義的函數(shù)自動的為內(nèi)聯(lián)函數(shù),
不需要加關(guān)鍵字inline。
class point
{
int i;
public:
void SetValue(int x) //內(nèi)聯(lián)函數(shù)
{
i = x;
}
}

內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別

普通函數(shù):編譯器在它的符號表中放入函數(shù)類型(包含名字和參數(shù)類型的函數(shù)原型及函數(shù)的返回類型)。

內(nèi)聯(lián)函數(shù):函數(shù)的代碼也被放入符號表,代碼是以源程序形式還是以編譯過的匯編指令形式存放取決于編譯器。
當內(nèi)聯(lián)函數(shù)太復雜,編譯器將不能執(zhí)行內(nèi)聯(lián)。

6、restrict的含義和用法

概括的說,關(guān)鍵字restrict只用于限定指針;該關(guān)鍵字用于告知編譯器,所有修改該指針所指向內(nèi)容的操作全部都是基于(base on)該指針的,即不存在其它進行修改操作的途徑;這樣的后果是幫助編譯器進行更好的代碼優(yōu)化,生成更有效率的匯編代碼。舉個簡單的例子
int foo (int* x, int* y)
...{
*x = 0;
*y = 1;
return *x;
}
很顯然函數(shù)foo()的返回值是0,除非參數(shù)x和y的值相同??梢韵胂?#xff0c;99%的情況下該函數(shù)都會返回0而不是1。然而編譯起必須保證生成100%正確的代碼,因此,編譯器不能將原有代碼替換成下面的更優(yōu)版本

int f (int* x, int* y)
...{
*x = 0;
*y = 1;
return 0;
}
現(xiàn)在我們有了restrict這個關(guān)鍵字,就可以利用它來幫助編譯器安全的進行代碼優(yōu)化了
int f (int *restrict x, int *restrict y)
...{
*x = 0;
*y = 1;
return *x;
}
此時,由于指針 x 是修改 *x的唯一途徑,編譯起可以確認 “*y=1; ”這行代碼不會修改 *x的內(nèi)容,因此可以安全的優(yōu)化為
int f (int *restrict x, int *restrict y)
...{
*x = 0;
*y = 1;

return 0;
}
最后注意一點,restrict是C99中定義的關(guān)鍵字,C++目前并未引入;在GCC可通過使用參數(shù)" -std=c99"來開啟對C99的支持

?

?

http://www.risenshineclean.com/news/65495.html

相關(guān)文章:

  • 成都網(wǎng)頁設(shè)計班百度seo系統(tǒng)
  • 做消費信貸網(wǎng)站百度天眼查公司
  • 網(wǎng)站制作需求分析中國營銷網(wǎng)
  • 手機微網(wǎng)站怎么做的開封網(wǎng)絡(luò)推廣哪家好
  • 效果型網(wǎng)站建設(shè)seo查詢5118
  • 織夢如何做幾種語言的網(wǎng)站技術(shù)培訓學校機構(gòu)
  • 自己做電臺直播的網(wǎng)站自己建網(wǎng)站流程
  • div css快速做網(wǎng)站西安seo外包行者seo06
  • 黑龍江省建設(shè)局網(wǎng)站太原做網(wǎng)站的
  • 如何做招聘網(wǎng)站分析google官方下載安裝
  • 品牌設(shè)計需要多少錢關(guān)鍵詞首頁優(yōu)化
  • 手機網(wǎng)站源代碼seo網(wǎng)站內(nèi)部優(yōu)化方案
  • 做網(wǎng)站的技術(shù)哪個簡單seo關(guān)鍵詞優(yōu)化怎么收費
  • asp.net網(wǎng)站開發(fā)項目源碼百度收錄怎么做
  • 彩票網(wǎng)站我想自己做網(wǎng)絡(luò)推廣員有前途嗎
  • 深圳企業(yè)網(wǎng)站制作設(shè)計深圳網(wǎng)絡(luò)營銷推廣專員
  • 網(wǎng)站文檔設(shè)置index.php哈市今日頭條最新
  • 如何查詢網(wǎng)站建設(shè)時間太原seo網(wǎng)站排名
  • 廣告設(shè)計培訓機構(gòu)哪家好seo推廣優(yōu)化外包公司
  • java怎么做直播網(wǎng)站鄭州網(wǎng)站優(yōu)化平臺
  • 有了域名 做網(wǎng)站seo查詢愛站網(wǎng)
  • wordpress 自定義頁面一鍵優(yōu)化是什么意思
  • 企業(yè)網(wǎng)站做的好網(wǎng)絡(luò)營銷咨詢公司
  • 求推薦軟件畢設(shè)代做靠譜網(wǎng)站上海發(fā)布微信公眾號
  • 網(wǎng)站設(shè)計公司 北京點擊器
  • 自己建網(wǎng)站做淘寶客靠譜嗎廣告軟文小故事200字
  • discuz 仿h5 網(wǎng)站模板seo職業(yè)培訓學校
  • 網(wǎng)站建設(shè)合同 免責聲明怎么推廣自己的公司
  • 淄博做網(wǎng)站seo網(wǎng)頁搜索快捷鍵
  • 免費注冊店鋪位置整站優(yōu)化要多少錢