아래의 소스를 맥에서 컴파일 하려면,
cc voltest.m -o voltest -Wall -framework Foundation
#import <Foundation/NSObject.h> #import <stdio.h> @interface Volume : NSObject { int val; int min, max, step; } - (id)initWithMin:(int)a max:(int)b step:(int)s; - (int)value; - (id)up; - (id)down; @end @implementation Volume - (id)initWithMin:(int)a max:(int)b step:(int)s { self = [super init]; if (self != nil) { val = min = a; max = b; step = s; } return self; } - (int)value { return val; } - (id)up { if ( (val += step) > max ) val = max; return self; } - (id)down { if ( (val -= step) < min ) val = min; return self; } @end int main(void) { id v, w; v = [ [Volume alloc] initWithMin:0 max:10 step:2]; w = [ [Volume alloc] initWithMin:0 max:9 step:3]; // v = [ [Volume alloc] init]; // w = [ [Volume alloc] init]; [v up]; printf( "%d %d\n", [v value], [w value] ); [v up]; [w up]; printf( "%d %d\n", [v value], [w value] ); [v down]; [w down]; printf( "%d %d\n", [v value], [w value] ); return 0; }
리눅스에서 컴파일을 하려면 다음과 같이 수정하고,
gcc voltest.m -o voltest -Wall -lobjc
#import <objc/Object.h> #import <stdio.h> @interface Volume : Object { int val; int min, max, step; } - (id)initWithMin:(int)a max:(int)b step:(int)s; - (int)value; - (id)up; - (id)down; @end @implementation Volume - (id)initWithMin:(int)a max:(int)b step:(int)s { self = [super init]; if (self != nil) { val = min = a; max = b; step = s; } return self; } - (int)value { return val; } - (id)up { if ( (val += step) > max ) val = max; return self; } - (id)down { if ( (val -= step) < min ) val = min; return self; } @end int main(void) { id v, w; v = [ [Volume alloc] initWithMin:0 max:10 step:2]; w = [ [Volume alloc] initWithMin:0 max:9 step:3]; // v = [ [Volume alloc] init]; // w = [ [Volume alloc] init]; [v up]; printf( "%d %d\n", [v value], [w value] ); [v up]; [w up]; printf( "%d %d\n", [v value], [w value] ); [v down]; [w down]; printf( "%d %d\n", [v value], [w value] ); return 0; }