int a(int b,int c){
return (b + c);
}
●if文
0=false,0以外=trueのため、
if(a == 0) は if(!a)と同じ
if(a != 0) は if(a)と同じ
●関数
#include <stdio.h>
/* 関数 */
int a()
{
printf("this is a()\n");
return 1;
}
main()
{
int i;
i = a();
printf("%d\n",i);
}
●プロトタイプ宣言
メイン関数の中で使用する関数の定義だけあらかじめ宣言しておくこと。
/* プロトタイプ宣言 */
int a(int b,int c);
/* メイン関数 */
int main(){
int d = a(1,2);
}
/* 関数 */
●for文
#include <stdio.h>
int
main()
{
int a;
for (a = 0; a < 10; a--) {
printf("a = %d\n", a);
}
}
●ポインタ
ポインタの参照先に値を設定
*ptr = 'A';
(*ptr) = 222;
ポインタにアドレスを設定
ptr = &func;
[root@rhel74 c]# cat ptr.c
#include <stdio.h>
int
main()
{
char a[8];
char *ptr;
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
a[4] = 'e';
a[5] = 'f';
a[6] = 'g';
a[7] = 'h';
ptr = a;
*ptr = 'A';
printf("%c\n", *ptr);
ptr = ptr +3;
*ptr = 'D';
printf("%c\n", *ptr);
}
●関数ポインタ
[root@rhel74 c]# cat funcptr.c
#include <stdio.h>
void
func()
{
printf("function\n");
}
int
main()
{
void (*ptr)();
ptr = &func;
(*ptr)();
}
●値渡し、参照渡し
[root@rhel74 c]# cat funcAB.c
#include <stdio.h>
void
funcA(int i)
{
i = 7;
}
void
funcB(int *i)
{
(*i) = 222;
}
int
main()
{
int a = 1;
printf("a=%d\n", a);
/* 値渡し(変数の値のみ渡す)
funcA(a);
printf("after funcA() : a=%d\n", a);
/* 参照渡し(変数のアドレスを渡す)
funcB(&a);
printf("after funcB() : a=%d\n", a);
}
実行結果
a=1
after funcA() : a=1
after funcB() : a=222
●最適化
gcc -o hello hello.c -Wall -O2
遅い<速い
-O1<-O2<-O3
-O3はコンパイラのバグを引きやすいので-O2を使っていればよい