TOP Computer Languages GCC C++

Tips

assert


#include <assert.h>
int assert(int expression);
compiler option -DNDEBUG will disable assert .
if( expression is false(==0) , assert will print error message to stdout and exit.

ビット操作

~ビット反転c=0; c=~c; // c= 0xFF
^ ビットXORc=0xF0; c=c^0xAA; // c=0x5A

NOT

!c=0; p= !c // p = 1
c>0; p= !c // p = 0
c<0; p= !c // p = 0

マクロ演算子

#文字列化#define STRING(str) #strstrを""で囲むSTRING(abc) -> "abc"
##Token連結#define VAR(id) var##idvar1, var2 などの変数名を生成VAR(1)->var1

マクロ関数

#define EN_NO_MENSEKI(r) r*r*3.14

ビットフィールド

typedef struct aa2 {
    unsigned short o;
    unsigned short s;
    unsigned short r:5;
    unsigned short t:8;
    unsigned short d:2;
    unsigned short p:1;
    unsigned short h;
}__attribute__ *1 aa;

構造体の入れ子

/*
 * this pair won't work -- error: parse error before "B"
typedef struct A_tag{
    B * bb;
    int i;
}A;
typedef struct B_tag{
A* bb;
    int i;
}B;
*/

struct A_tag{
    struct B * bb;
    int i;
}A;
struct B_tag{
    struct A * bb;
    int i;
}B;
typedef struct A AA;
typedef struct B BB ;

File Handling

func pointer

void (*func)(int c);
  • void *func(); だと戻り値の型が void* の関数のプロトタイプと判断されるのでカッコをつける

Digraphs and trigraphs

Wiki
TrigraphEquivalentDigraph
??=#%:
??/\
??'^
??([<:
??)]>:
??!|
??<{<%
??>}%>
??-~

printf

printf
int c;
char abc[]="abcdefghijklmnopqrstuvwxyz";
for(i=0; i< 10; i++){
    printf("%.*s\n",i,abc);
}
return EXIT_SUCCESS;

a
ab
abc
abcd
abcde
abcdef
abcdefg
abcdefgh
abcdefghi

varargs

#include <stdarg.h>  // or #include <varargs.h> for Win32
char* Func(char* buffer, const char* format, ...){
    va_list ap;
    va_start(ap, format);
    vsprintf(buffer, format, ap);
    va_end(ap);
    return buffer;
}
int Func2(int n, ...){
   int sum;
   va_list ap;
   va_start(ap, n);
   for (int i = 0; i < n; i++){
        sum += va_arg(ap, int);
   }
   va_end(ap);
   return sum;
}

pragma

#pragma pack(push,1)
typedef struct tagS{
    char ch1;
    int i1;
} S;
#pragma pack(pop)
#pragma warning( push )
#pragma warning(disable : 4996)
#pragma warning( pop )
#pragma comment( lib, "abc.lib" )

grammer

implementations

GCC

library

The GNU C Library
curses
newlib
lfds, a portable, license-free, lock-free data structure library written in C.

reference

The C Library Reference Guide?

管理人/副管理人のみ編集できます