C언어를 하는 사람들이라면 한번씩을 봤을 구문.
전처리 혹은 선행처리기 라고 불리우는 # 구문!

주로 사용하는 #include나 #define는 다 알고있을것이다.
위의 구문또한 어렵진 않지만 헷갈리고 또 사용함에따라 좀더 효율적인 코딩을 할수가있다.
설명에 앞서 사용법을 알아야한다. 이것은 기존에 있는 소스를 코드를 삭제및 수정하지 않고 활성화 비활성화 하는데 사용한다.

#define
말그대로 정의한다.

#define A 10
A를 10이라고 칭하는것이다.

#ifdef A
 code.....
#endif
만약 A가 정의되어있다면 소스코드를 실행함.

#ifndef A
 code.....
#endif
만약 가 선언되지 않았따면 소스코드를 실행함.
보통 선언되었는지 안되었는지 확인하기위해 쓰며, 선언되지 않았을경우 안에다가 #define로 선언해줄수있다. 이는 중복선언으로 인한 에러를 방지하기위해서이다.

#if #defined A || #defined B
두가지가 한번에 나오는데 #if는 말그대로 조건문이다. || 또는 && 등의 연산자를 같이 사용할수있다. #defined는 한번에 여러개를 검사하여 수행할수있다. 위의 것들처럼 하나만 검사하는게 아니라 예제에 있듯이 둘개를 비교하여 둘중 하나라도 정의되어있다면 #endif 전까지의 구문을 실행한다.
반대로 &&를 쓴다면 두개가 다 정의되어있어야만 실행된다.

#undef A
말그대로 정의되어있는 A를 무효화 시킨다. 한마디로 없애버린다. ㅡ_ㅡ;

간단한 설명은 여기까지이고 좀더 사용법을 알기쉽도록 소스를 보고 설명하겠다.

#ifndef lint
#include "Z_READ.h"
#endif
#ifdef A
#include "A_READ.h"
#endif
#ifdef B
#include <B_READ.h>
#else
#include <C_READ.h>
#endif


처음 lint가 정의 되어 있지 않다면  "Z_READ.h"를 포함시킨다.
그리고 첫구문 종료
만약 A가 정의되어있다면 A_READ.h를 포함시킨다.
만약 B가 정의되어있다면 B_READ.h를 포함시키고 아니라면 C_READ.h를 포함시킨다.
그리고 종료.
그렇게 어렵지 않을것이다.

다음예를 보자.


#ifndef lint
#include "Z_READ.h"
#endif
#ifdef A
#include "A_READ.h"
#endif
#ifdef B
#include <B_READ.h>
switch (B)
{
  case 1:
     B++;
     break;
   case 2:
     B--;
     break;
   case 3:
     B=B+B;
     break;
   case 0: 
     break;
 }
#else 
#include <C_READ.h>
 struct C{
    int CC;
    char CCC;
  };

#endif

보는 봐와같이 소스코드를 넣으므로써 다양한 코딩을 할수가 있다.
만약 B가 정의되어있다면 B.READ.h를 포함시키고 아래의 switch문을 실행한다.
아래의 구문역시 정의도어있다면 구조체 C를 만드는 작업이다.

static int A(int A)
{
   int C=A+5;
   #ifndef A_READ
     #include "A_READ.h"
     C=A;
   #endif
   return C;
}

다음 코드는 코딩중간에 선행처리기를 넣어서 쓴 코드이다.
혹시 코딩을 하다가 필요할경우 위처럼 중간에 넣어 사용할수있다.
만약 A_READ.h가 정의되어있지 않다면 A_READ.h를 포함하고 아래의 코드를 실행한다.

즉 정의 되어있다면 C의 값은 A+5가 되는것이고 정의 되어있다면 C의 값은 A가 되는것이다.

이정도면 이해하시고 사용하실 수 있을꺼라 생각합니다. 
그럼 다음에또 ㄷㄷ

  
  





 
Posted by Nvdark
,

이거 2006년도에 수업들으면서 김락현 교수님이 보라고 주신 소스.
그러나...대략 자바 ㅈㅈ


Posted by Nvdark
,
이것도 예전에 검색하다가 나중에 써먹을꺼 같아서 긁어오긴했는데 얼마전에 다시찾은 자료 ;;
출처 : 불분명;;;;

만약 네트워크에서 80포트만 열려있고, 3389포트가 막혀있어 Remote Desktop 접근을 못한다면
아래와같이 80포트로 연결시켜주고,  Remote Desktop 으로 221.10.10.13:80 커넥션이 가능

ex.) datapipe.exe 221.10.10.13 80 221.10.10.13 3389



 

Posted by Nvdark
,
#include <stdio.h>
#include <conio.h>
void main()
{
	//변수선언
	int num[6];
	int *add=num;
	int r,i,l;
	//5개의 숫자 입력
	for(r=0;r<=4;r++)
	{
		printf("\n5개의 숫자를 입력하세요=");
		scanf("%d",&num[r]);		
	}
	//배열의 주소값과 갑들출력
	for(i=0;i<=4;i++)
		printf("address=%u,num[%d]=%d\n",&num[i],i,num[i]);
	//가장높은수를 알아내기위한 비교
	int temp=*add;
	for(l=0;l<5;l++)
	{
		add++;
		for(int a=0;a<5;a++)
		{
			if(temp<=*add)
			{
				temp=*add;		
			}
		}
	}
	//높은수 출력
	printf("max=%d\n",temp);
}


	
	
Posted by Nvdark
,
예전에 락현이형이 짰던거.....

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>

#define LEFT 75
#define RIGHT 77
#define UP 72
#define DOWN 80
#define ESC 27


int x,y;


// 콘솔화면화면(도스화면) 상의 x,y위치로 커서를 이동시킨다.(콘솔화면 가로 0-79, 세로 0-25)
void gotoxy(int x, int y)
{
COORD Cur;
Cur.X=x;
Cur.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}

void prx()
{
gotoxy(x,y);
putchar('*');
}

void main()
{
char usrinput;

x = 30,y=10;

while( usrinput != ESC )
{
prx();

/////////////////////////////////// 키보드로 부터 입력된 값이 특수문자(방향키)임을 먼저 확인하고 만약 방향키라면 어떤 방향인지
usrinput = getch(); //   조사한다.
if( usrinput == 0xE0 ) //
usrinput = getch(); //
///////////////////////////////////

switch(usrinput) {
case UP :
y--;
break;
case DOWN:
y++;
break;
case RIGHT:
x++;
break;
case LEFT:
x--;
break;
default :
break;

}
}

system("cls");
gotoxy(30,10);
printf("프로그램을 종료합니다.");
}
 
Posted by Nvdark
,