C語言中一些不被熟知的特性

2021-06-28 20:08:30 字數 2308 閱讀 9596

c99允許你對結構體中指定的變數初始化,如

struct 

foo ;

foo foo = ;

這其中x會預設初始化為

0指定初始化也可適用於陣列,

如下面三個等價的陣列定義

int a[5

] = ;

int 

a = ;

int a[5

] = ;

限定詞restricted用於限定乙個指標(如名

,告訴編譯器該指標的記憶體訪問在任何情況下都只能通過該指標進行

,其餘指向無效.如

int f(

const 

int* 

restrict 

x, int

* y) 

會被編譯器優化為

int f(

const 

int* 

restrict 

x, int

* y) 

void f(

int 

a[static 

10]) 

傳遞給f()

的指標如果為

null

或者小於

10編譯器會

warning!

又如void f(

int 

a[const

]) 

中a不可被修改。

使用x maroc(

編譯器會在

compile time

選擇適當的形式

#define cbrt(x) _generic((x), \

long double: cbrtl, \

default: cbrt, \

float: cbrtf \

)(x)

預設形式為cbrt(),

如果實參為

float

就會被替換為

cbrtf(),etc.

case語句可以出現在

if-else

結構和迴圈結構中

switch (a)

else case 3:

}break;

case 4:

// ...

break; }

#include 

int add(int a,int b)

int main() 用

printf()返回值實現

,也可以使用

bitwise

實現注:printf()   

返回乙個int值,表示被列印的字元數

static void foo (void) 

static void bar (void) 

int main (void) 

#include 

void main()

("dayum!\n");

#text in f

ragment.c

這我也無力吐槽

..switch(c) 

c屬於a-z字元時執行

doa();

屬於1-5

時執行dob();

main;

作者沒有提到編譯環境,

雖然我的編譯器會報錯

..a [ i ] == * (a + i) == * (i + a) == i [ a ];

下表左右都是等價的

於是就出現這樣的

(:亂碼

code 

!e() ??!??! c();

#include

int 

main()

} c++ switch-case結構中的

default

可以被任何標籤替換

,如上面的

abc1

奇怪的等價

# 1 "1.c"

# 1 ""

# 1 "/usr/include/stdc-predef.h" 1 3 4

# 1 "" 2

# 1 "1.c"

int main()

等價於#ifdef some_macro

void foo (){}

#endif

int main()

且都能編譯通過(其實就是預處理器- -)

c語言中一些公用的方法

這段由於學業的原因,最近與c有所接觸,面向過程與物件導向還是有點區別。但是方法還是可以寫成公用的.下面幾個函式感覺用的比較經常點,就貼上來了.25 子串判斷 引數 sourcestr源串,desstr判斷串 int stringjudge char sourcestr,char desstr ret...

C語言中一些基本問題

其中的u為unsigned,l為long,f為float c語言中常量的默情況 整形預設為有符號int 浮點型預設為double 如果整形常量大小超出int,預設自然就為long int 如果需要無符號整形常量的話就可以在常量後面加u或是u,如0u或是0u,同理可以在常量後面加ul或ul表示無符號長...

C語言中一些知識點

1.學程式設計 找 讀 改 寫 少看書。但少看不是不看,看一本書要限制在一天內。任務是通讀書中主要的概念,明白大致是幹什麼用的,形成乙個大概的框架 然後一周內乾掉書中全部 不理解再瀏覽書中相關章節,注意是瀏覽。或者刷部落格。實在刷不懂,可以先刷後面,待日後重新刷 因為書中 有些部分可能出自後面的章節...