《c primer plus》
2849 ワード
Page 342
一.static変数
C言語ではstaticキーワードには2つの意味があります.
1.関数の外側に配置すると、ファイルの内部に表示されるグローバル変数が表示されます.
2.関数内に配置して、コードブロックの役割ドメインを持つ静的変数を表す.
プログラム実行結果は2,3である.
二.extern
P350
一緒にコンパイルされたプロジェクトでは、
もう1つのファイル定義の関数は、includeという関数ファイルヘッダがない場合、extern宣言でこのファイルで呼び出すことができます.
例:
rand0.cファイルの内容は以下の通り
r_drive1.cファイルの内容は以下の通り
これで実行できます.
三.union
Unionの定義は以下のように使用できます.
四. __VA_ARGS__およびva_list
出力:message 1:today is a good day.
出力2 3 5 6
一.static変数
C言語ではstaticキーワードには2つの意味があります.
1.関数の外側に配置すると、ファイルの内部に表示されるグローバル変数が表示されます.
2.関数内に配置して、コードブロックの役割ドメインを持つ静的変数を表す.
#include <stdio.h>
void static_test()
{
/* , testVar , , , testVar */
static int testVar = 1;
testVar++;
printf("%d
", testVar);
}
int main()
{
static_test();
static_test();
return 1;
}
プログラム実行結果は2,3である.
二.extern
P350
一緒にコンパイルされたプロジェクトでは、
もう1つのファイル定義の関数は、includeという関数ファイルヘッダがない場合、extern宣言でこのファイルで呼び出すことができます.
例:
rand0.cファイルの内容は以下の通り
static unsigned long int next = 1;
int rand0()
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536)%32768;
}
r_drive1.cファイルの内容は以下の通り
/* rand0.c */
#include <stdio.h>
extern int rand0(void);
int main()
{
int count;
for(count = 0; count < 5; count++)
{
printf("%hd
", rand0());
}
return 0;
}
これで実行できます.
三.union
Unionの定義は以下のように使用できます.
#include <stdio.h>
typedef struct {
int name_id;
int course_id;
union {
int student_id;
int class_id;
}u;
} dhct_attri_profile_t;
int main(int argc, char **argv)
{
dhct_attri_profile_t tmp = {1, 2, .u.student_id = 3};
printf("%d
", tmp.u.student_id);
return 0;
}
四. __VA_ARGS__およびva_list
#include <stdio.h>
#define PR(x, ...) printf("message"#x ":" __VA_ARGS__)
int main(int argc, char **argv)
{
PR(1, "%s", "today is a good day.");
return 0;
}
出力:message 1:today is a good day.
#include <stdarg.h>
void vaTest(int byPort, ...)
{
va_list pvaArgList;
va_start(pvaArgList, byPort);
int iConfigEnum = 0;
int iConfigPara = 0;
for(; ;)
{
if((iConfigEnum = va_arg(pvaArgList, int)) == 0)
{
break;
}
if((iConfigPara = va_arg(pvaArgList, int)) == 0)
{
break;
}
printf("%d %d", iConfigEnum, iConfigPara);
}
va_end(pvaArgList);
}
int main(int argc, char **argv)
{
vaTest(1,2,3,5,6,0);
return 0;
}
出力2 3 5 6