程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C

C

編輯:關於C++

C。本站提示廣大學習愛好者:(C)文章只能為提供參考,不一定能成為您想要的結果。以下是C正文


宏列表

在Mozilla的代碼中經常用到。

可以方便地重用標識符列表。

#define FLAG_LIST(_)                   \
    _(InWorklist)                      \
    _(EmittedAtUses)                   \
    _(LoopInvariant)                   \
    _(Commutative)                     \
    _(Movable)                         \
    _(Lowered)                         \
    _(Guard)

FLAG_LIST的參數是一個宏,它將被順次調用與列表中的每一個標識符。

類型

#define DEFINE_FLAG(flag) flag,
   enum Flag {
       None = 0,
       FLAG_LIST(DEFINE_FLAG)
       Total
   };
#undef DEFINE_FLAG

操作

#define FLAG_ACCESSOR(flag) \
bool is##flag() const {\
    return hasFlags(1 << flag);\
}\
void set##flag() {\
    JS_ASSERT(!hasFlags(1 << flag));\
    setFlags(1 << flag);\
}\
void setNot##flag() {\
    JS_ASSERT(hasFlags(1 << flag));\
    removeFlags(1 << flag);\
}
 
FLAG_LIST(FLAG_ACCESSOR)
#undef FLAG_ACCESSOR

指定初始化

數組

/* Entries may not correspond to actual numbers. Some entries omitted. */
#define EINVAL 1
#define ENOMEM 2
#define EFAULT 3
/* ... */
#define E2BIG  7
#define EBUSY  8
/* ... */
#define ECHILD 12
/* ... *


char *err_strings[] = {
         [0] = "Success",
    [EINVAL] = "Invalid argument",
    [ENOMEM] = "Not enough memory",
    [EFAULT] = "Bad address",
    /* ... */
    [E2BIG ] = "Argument list too long",
    [EBUSY ] = "Device or resource busy",
    /* ... */
    [ECHILD] = "No child processes"
    /* ... */
};

構造體和結合體

struct point {
    int x;
    int y;
    int z;
}

struct point p = {.x = 3, .y = 4, .z = 5};

結合體相似,但是只初始化一個字段。

#if 0來正文代碼

#if 0
...
#endif

printf %m

打印errno的出錯內容。

假如errno=0,輸入Success

沒有類型的變量

默許為int

g;main(i){
   printf("g = %d, i = %d \n",g,i);
}

用宏來替代循環

以下代碼打印1~200。

#include<stdio.h>
#define STEP1 step();
#define STEP2 STEP1 STEP1
#define STEP4 STEP2 STEP2
#define STEP8 STEP4 STEP4
#define STEP16 STEP8 STEP8
#define STEP32 STEP16 STEP16
#define STEP64 STEP32 STEP32
#define STEP128 STEP64 STEP64
#define STEP256 STEP128 STEP128

int n = 0;

int step()
{
       if (++n <= 200)
       printf("%d\n", n);
}

int main()
{
      STEP256;
      return 1;
}

構造體置0

struct mystruct a = {0}; 

把printf中的長度控制符放到參數裡

*

#include <stdio.h>
int main()
 {
   int a = 3;
   float b = 6.412355;
   printf("%.*f\n",a,b);
   return 0;
}

scanf無視某個輸出

*

char last[20];

scanf("%*s %s", last);

第一個參數會被疏忽。如輸出John Smith只會把Smith讀到last外面。

scanf掃描字符集

%[...],輸入到字符串,^代表掃描不在此字符集裡的。

char *a;
/* .... */
scanf("%[^,]", a);

把逗號前的一切東西都讀出去。

scanf("%[^,],", a);

把逗號前的一切東西都讀出去,然後把緩沖區裡的逗號吃掉。

拷貝字符串

while (*dest++ = *src++) ;



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved