#include <stdio.h>
#define NUMBER 255
#define HELLO(name) printf("Hello %s.\n", name);
int main()
{
printf("%d\n", NUMBER);
HELLO("Jane")
return 0;
}
255
Hello Jane.
main( )関数全体を定数(マクロ)にすることもできます。
#include <stdio.h>
#define MAIN( message ) int main()\
{\
printf("%s\n", message);\
return 0;\
}
MAIN("I am a main.")
I am a main.
#define の部分は別のファイルとして分けることができます。
#define MAIN(message) int main()\
{\
printf("%s\n", message);\
return 0;\
}
#include <stdio.h>
#include "mainmacro.h"
MAIN("I am a main.")
gcc mainmacro.c
./a.out
I am main.
#include <stdio.h>
enum DERECTION
{
LEFT = 100,
TOP = 200,
RIGHT = 300,
BOTTOM = 400,
};
int main()
{
printf("%d\t", LEFT);
printf("%d\t", TOP);
printf("%d\t", RIGHT);
printf("%d\n", BOTTOM);
return 0;
}
100 200 300 400
列挙子に、初期値が与えられない場合は、0からの連番になります。
#include <stdio.h>
enum DERECTION
{
LEFT ,
TOP ,
RIGHT ,
BOTTOM ,
};
int main()
{
printf("%d\t", LEFT);
printf("%d\t", TOP);
printf("%d\t", RIGHT);
printf("%d\n", BOTTOM);
return 0;
}
0 1 2 3
最初の列挙子や、途中の列挙子に、特定の値を設定すると、次の列挙子は、その値の +1 になります。
#include <stdio.h>
enum DERECTION
{
LEFT = 100,
TOP ,
RIGHT = 200,
BOTTOM ,
};
int main()
{
printf("%d\t", LEFT);
printf("%d\t", TOP);
printf("%d\t", RIGHT);
printf("%d\n", BOTTOM);
return 0;
}
100 101 200 201
enum もファイルを分けることができます。
enum DIRECTION
{
LEFT = 100,
TOP ,
RIGHT = 200,
BOTTOM ,
};
#include <stdio.h>
#include "enum.h"
int main()
{
printf("%d\t", LEFT);
printf("%d\t", TOP);
printf("%d\t", RIGHT);
printf("%d\n", BOTTOM);
return 0;
}
100 101 200 201
GTK には、いろいろな定数があらかじめ定義されています。 もし、GTK をインストールしていた場合は、次のサンプルも試すことができます。
#include <gtk/gtk.h> // gtk/gtk.hにはstdio.hも含まれています
int main()
{
printf("FALSE is %d\n", FALSE);
printf("TRUE is %d\n", TRUE);
printf("HBOX is %d\n", GTK_ORIENTATION_HORIZONTAL);
printf("VBOX is %d\n", GTK_ORIENTATION_VERTICAL);
printf("RAND_MAX %d\n", RAND_MAX);
return 0;
}
このコードをコンパイルするには、次のようにコマンドします。
gcc gtk_constant.c `pkg-config --cflags --libs gtk+-3.0
実行結果は次のようになります。
FALSE is 0
TRUE is 1
HBOX is 0
VBOX is 1
RAND_MAX 2147483647