함수의 원형은 과연 무엇일까? 그보다  프로그래밍 언어 해석 방식을 알아야 한다.

컴파일방식 : 실행 전 소스를 읽어 기계어로 한꺼번에 번역
인터프리터방식 : 실행하면서 기계어로 번역 

컴파일 방식은 소스를 차례대로 읽어가는 방식이다. C언어도 컴파일 방식임

main 
함수

이런 방식으로 선언하였을 경우 main에서 함수를 실행시 에러가 난다.

함수 
main  

할 경우 에러가 나지 않는다. 

이런 경우를 대비해 함수의 원형을 미리 선언해 둘 수 있다. 

#include "Turboc.h"

int Max(int a, int b);

void main(){
	
	int a, b, m;

	printf("두 수를 입력하세요 : ");
	scanf("%d%d", &a,&b);
	m=Max(a,b);
	printf("두 수 중 큰 값은 %d입니다.\n", m);
}

int Max(int a, int b)
{
	if(a > b){
		return a;
	}else{
		return b;
	}
}
#include "Turboc.h"

char Dec2HexChar(int d)
{
	if(d >= 16){
		return '?';
	}

	printf("%d, %d, %d\n", d , d + '0', d > 9);

	return d+'0'+(d>9)*7;
}

void main()
{
	int input;

	for(;;){
		printf("0~255사이의 수를 입력하시오(끝낼 때 -1) :");
		scanf("%d", &input);
		if(input == -1){
			break;
		}

		printf("입력한 수의 16진 표기 = %c%c\n",
			Dec2HexChar(input >>4), Dec2HexChar(input & 0xf));
	}
}
10진수를 16진수로 변환과정이다. 함수로 만들어넣고 참고한다. 앞의 비트와 뒤의 비트를 각각 넘기므로 한자리의 
16진수가 리턴된다.  그런데 d+'0'+(d>9)*7 과연 이것은 무엇일까? 생각했다. 

그러다 아스키코드 표를 보고 이해를 하게 되었다. 0은 아스키코드로 48을 나타낸다. 그래서 d로 넘어온 숫자면 그냥 더하면
 0  1  2  4  5  6
 48  49 50   51 52  53  54  55  56  57 

이렇게 순서대로 보여지게 된다. 

그렇다면 (d>9)*7은 무엇일까. 아스키코드 57 즉 9 이후에는 특수문자가 7개 이후에 
 A B
65   66 67   68 69   70  71  72 73  74 

즉 9이상 클경우에는 영어로 표현되기 때문에 9이하는 0*7이 되서 아무것도 안 되지만 9 이상일경우 7을 더해 영어를 표현하였다. 


CTS(Common Type System)
닷넷 프레임워크는 여러 다른 언어가 동일한 데이터형을 사용하도록 공통언어를 사용하고 있다. 



값형은 데이터를 메모리의 스택영역에 저장(값) - 변수 복하면 새로운 영역으로 저장됨
int, float, struct, enum 등
참조형은 데이터를 힙영역에 저장(주소저장)
class, interface, delegate

+ Recent posts