char buffer[30];

char len;

... (buffer, len에 값 설정)

buffer[len] = '\0';

 

와 같은 코드로 작성할 경우 len의 값이 음수가 될 수 있기 때문에 경고 문구가 발생

len을 unsigned형으로 해야 안나타날듯 하다.

 

C, C++ 컴파일 에러 메시지

Computer Language/C 2013. 8. 1. 08:49 Posted by AstinLen

- expected specifier-qualifier-list before 'type'
type이 소스코드 내에 정의되지 않았다. 정의해달라.

- expected '=', ',', ';', 'asm' or '__attribute__' before 'type'
? 내 코드에선 왜 발생하는지 원인분석 불가.. 미해결...
 -> 내 코드에선 pthread.h 를 사용했을 때 발생한 문제인데.. gcc 옵션에서 -lpthread 라는 옵션을 주면 된다고 함.

제목 그대로 해보도록 하겠습니다.

기본적으로 윈도우 폼 1개를 생성하여 버튼 클릭시 MS Access 파일을 생성토록 하는 것이 최종 목표 입니다. 저는 DBConnection이라는 프로젝트명으로 생성했습니다.

아래와 같이 폼디자인을 설계했습니다. 컨트롤은 TextBox 1개(tbFilePath), Button 1개(btCreateDB), 그리고 보이지는 않지만 SaveFileDialog(sfdCreateDB)로 이루어져있습니다.


현재 우리가 목표로 하는 기능은 [DB생성]이라는 버튼을 눌렀을 때 원하는 위치에 MS Access에서 정상적으로 인식하는 mdb파일를 생성하는 것이 목표가 되겠습니다.

차후엔 생성된 이 mdb파일을 이용해서 무엇인가 작업을 할 수 있겠죠?


우리는 ADOX를 이용하여 하기때문에 먼저 참조를 추가해줘야 합니다.

Microsoft ADO Ext. 2.8 for DDL and Security 를 추가해 줍니다. 없으신 분들은 마이크로스프트 사이트에서 MDAC 2.8를 다운받으시면 되겠습니다.

다음으로는 데이터베이스에 접속하고 컨트롤할 클래스 하나 만들어보겠습니다. 폼 클래스에서 바로 해도 되지만... 별도로 빼두는 것이 다른 폼에서 이용하기 쉽게 할 수 있기 때문에 나중을 위해 빼두겠습니다.

클래스명은 cDBControl입니다.

// 네임스페이스를 추가
using ADOX;
using System.IO;

cDBControl 클래스 안에는 아래와 같은 내용을 넣어줍니다.
		private string strFilePath = "";
		private string strDBConnection = "";

		public cDBControl(string strPath)
		{
			// 파일의 경로를 저장
			this.strFilePath = strPath;
			// DB에 연결하기위한 명령줄 생성
			this.strDBConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";";
			// 데이터베이스에 암호를 설정하고 싶다면 아래내용을 strDBConnection에 추가하면된다.
			// 예시)
			// this.strDBConnection += "Jet OLEDB:Database Password=1234";
		}

		public void funcAccessCreate()
		{
			try
			{
				FileInfo fiStaticDB = new FileInfo(this.strFilePath);
				if (!fiStaticDB.Exists)	// 파일의 유무를 확인, 없으면
				{
					// 생성
					funcCreate();
				}
				else	// 있으면
				{
					// 기존 파일을 제거
					fiStaticDB.Delete();
					// 생성
					funcCreate();
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		private void funcCreate()
		{
			try
			{
				// MDB파일을 동적으로 생성
				ADOX.CatalogClass adoxCC = new ADOX.CatalogClass();
				adoxCC.Create(strDBConnection);

				// 연결을 끊기위해 null을 할당.
				adoxCC.ActiveConnection = null;
				adoxCC = null;

				// 연결을 끊었다고 adoxCC = null을 해줘도 가비지컬렉션이 작동안하면,
				// 프로그램 실행 중에는 언제될지 모른다. 수동으로 가비지컬렉션 작동
				GC.Collect();
			}
			catch (Exception ex)
			{
				throw new Exception("데이터베이스를 생성 중 에러 발생.", ex);
			}
		}

 

그리고 혹시 특이사항으로...
cAccessCarete 메소드의 CatalogClass 부분에서 에러가 발생할 경우 아래처럼 해결해주시면 되겠습니다.


3번박스의 ADOX를 클릭 후 4번박스의 True를 False로 변경하시면 되겠습니다.

완성된 cDBControl.cs는 그대로 두고 다시 첫 메인 폼으로 이동해서 버튼 클릭시 발생하는 이벤트메소드를 생성해줍니다.

        private void btCreateDB_Click(object sender, EventArgs e)
        {
			// SaveFileDialog에서 예를 누를 경우
            if (sfdCreateDB.ShowDialog() == DialogResult.OK)
            {
				string strFilePath = sfdCreateDB.FileName;
                cDBControl cdbc = new cDBControl(strFilePath);	// DBControl 클래스 생성
				cdbc.funcAccessCreate();	// Access DB를 생성
                tbFilePath.Text = strFilePath;	// 화면상의 텍스트박스에 경로를 보여줌
            }
        }

 

아차차..

그리고 SaveFileDialog 컨트롤을 선택해서 Filter부분에

MS Access 파일|*.mdb
을 넣어주세요


이제 컴파일 하여 실행시켜보세요.

그리고 버튼을 클릭하면 SaveFileDialog가 뜨면서.. 파일이름을 정해주고

저장버튼을 누르면 저장된 파일의 경로가 TextBox에 뜨면서...


아래와 같이 저장되어있음을 알 수 있습니다.
(여기서는 abc라는 이름을 사용했습니다.)
(위의 Filter를 설정해줘야 자동으로 mdb로 저장됩니다.)


여기까지 입니다.

C Programming 시작하기 1 - 소개

Computer Language/C 2007. 8. 28. 23:40 Posted by AstinLen

1. C는?

 벨 연구소에서 1971년경부터 리치(D.M.Ritchie) 등에 의해서 설계 개발된 시스템 기술용의 프로그래밍 언어입니다. UNIX 오퍼레이팅 시스템의 기술에 사용할 것을 목적으로 설계한 언어로 UNIX OS의 대부분이 이 언어로 개발되었습니다. 컴퓨터의 구조에 밀착한 기초 기술이 가능한 것과 간결한 표기가 될 수 있는 것 등을 특징으로 하고 있습니다.

 시스템 기술용 언어의 경우에는 기억장치의 주소(address) 등과 같은 하드웨어 자원까지 기술의 대상으로 할 것을 요구하고 있는데, C 언어에서는 이러한 수준의 개념을 데이터 형이나 함수 등의 고수준 언어의 개념에 잘 대응하고 있습니다. 따라서 언어의 성격상 일반적인 범용의 언어와 거의 다를 바가 없습니다. 프로그램을 다른 종류의 컴퓨터에 이식하는 것도 용이하며, 범용 언어이기는 하지만 강력하고 고수준의 언어로 하는 것을 목표로 하고 있지 않습니다.

 C 언어는 프로그램 오류를 쉽게 발견하기 위한 기능은 부족하지만, 고수준 언어에서 자주 볼 수 있는 기술상의 제약이 적기 때문에 오히려 프로그래밍하기 쉬운 편리한 언어로 평가되며, 프로그램을 간결하게 쓰기 위하여 많은 연구를 한 언어입니다.

 C 언어의 기본 특징은 ASCII코드 체계로 영문 소문자 집합을 바탕으로 하고 있으며, 함수(function)의 정의문들의 집합으로 구성되어 있고, 분할 컴파일을 할 수 있어 함수 정의부 밖의 외부 변수를 정의함으로써 컴파일 단위가 다른 함수의 외부 변수를 참조할 수 있게 되어 있습니다. 또한 프로그램의 함수 기능에는 FORTRAN의 SUBROUTINE 기능과 FUNCTION 기능을 가지고 있으며, 함수 호출시 매개변수의 값만 넘겨주는 호출 방식을 따르고 있고, 자료의 주소를 자유롭게 조작할 수 있는 점들입니다.


2. C의 특징

  • 이식성
     C 언어는 다른 프로그램 언어보다 높은 호환성을 가지고 있고 C언어의 표준함수로만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일 되고 실행될 수 있습니다. 예를 들면 소형 컴퓨터에서 작성된 프로그램이 대형 컴퓨터에서도 완벽하게 사용될 수 있는 것 입니다.

  • 다양성
     C 언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphics User Interface), 시스템 프로그램(system pr ogram), 응용 프로그램(application program) 등과 같이 컴퓨터의 모든 분야에서 사용할 수 있도록 설계된 효율적인 프로그램 언어입니다.

  • 유연성
     C 언어의 가장 큰 특징중의 하나는 소프트웨어의 부품화를 실현 할 수 있다는 것입니다. 소프트웨어의 부품화란 새로운 프로그램을 개발하기 위해 이미 작성된 프로그램 모듈들을 그대로 사용하는 곳을 의미합니다.
     C 언어를 부품과 같이 사용할 수 있는 대표적인 응용 소프트웨어로는 클리퍼, 폭스프로, 윈도우, 오토캐드 등이 있습니다. 또 다른 의미로는 기계어(어셈블리)에 준하면서 고급프로그래밍 언어로 집적된 표현을 할 수 있다는 것입니다.
     즉 저급 언어이면서 고급 언어의 성격을 가진 것을 말합니다.

  • 혼합성
     C 언어는 다른 프로그램 언어와 함께 혼합되어 사용될 수 있으며, 혼합 프로그램을 개발하는 프로그램의 혼합성을 극대화시키기는데 사용됩니다.
     C 언어와 함께 가장 많이 사용되는 프로그램 언어는 어셈블리이며 패키지 언어에는 클리퍼 등이 있습니다.

  • UNIX 시스템
     C 언어와 UNIX가 거의 동시에 개발되었으며 UNIX 시스템 자체가 C 언어로 대부분 작성되었기 때문에 최근에 UNIX와 같은 운영체제가 급속히 성장하고 있습니다. UNIX 시스템은 C 언어로 프로그램을 작성하고, 실행하는데 가장 적합한 환경으로 1980년대 이후 수퍼 미니 컴퓨터(super mini computer), 미니 컴퓨터(mini compiuter), 16비트 퍼스널 컴퓨터의 공통 운용 체제로 애용되고 있습니다. 널리 애용되고 있는 이유로 파일의 사용이 쉽고, 입출력(I/O)과 파일의 교체가 간단하며, 명령어(command)와 명령어가 파이프라인(pipeline)으로 연결되고, AT & T사와 정식 계약을 맺고 있어 원시 코드(source code)가 제공되기 때문입니다.
     UNIX 시스템의 C 컴파일러(compiler)는 'cc'로 UNIX 시스템 구조에서 가장자리에 있습니다. 'cc'는 C프리프로세서(preprocessor), 2 패스 컴파 일러(2-pass compiler), 어셈블러(assemler) 및 로더(loader:link,editor), 그리고 각각의 저수준 프로그램(low-level program)들을 호출합니다.
     C 프로그램의 개발은 UNIX 상에서 하는 것이 좋다라고 말하는데 그 이유는 UNIX사의 개발 툴 집단(development tools group)이 풍부하기 때문이다. 예를 들어 대표적인 툴들을 보면 프로그램 개발시에 유용한 명령어들(commands)과 디버거(debugger), yacc, lex, make, sccs 등이 있습니다.
     UNIX시스템에서 C가 특별한 언어이지만 그렇다고 해서 C 언어에만 국한되지 않는다는 것을 미리 생각해 두시기 바랍니다.

1. JDK(Java Development Kit) 설치

Java를 사용하기 위해서는 Java가 실행이 가능한 환경을 만들어 주어야 합니다.
Sun Microsystems 사에서 JDK의 다운로드 주소는 아래와 같습니다.

http://java.sun.com/javase/downloads/index.jsp

첫 화면

현재(07년 08월 28일)는 JDK 6 Update 2 가 최신버전입니다. Download를 선택합니다.

사용자 동의
다운로드

다운로드가 완료 되면 설치합니다.


2. Eclipse 설치

Eclipse는 Java 개발툴로서 무료프로그램입니다. (프리웨어)
설치없이 다운로드 후 압축 풀기 방식으로 사용하실 수 있습니다.

Eclipse를 다운로드하는 방법은 Eclipse 홈페이지를 접속하여, 프로그램을 다운로드합니다.
홈페이지는 아래와 같습니다.

http://www.eclipse.org

첫 화면

Download Eclipse를 선택 후 Eclipse Classic 를 다운로드 받습니다.

다운로드

다운로드가 완료 되면 원하는 위치에 압축을 해제 합니다.

1. Java는?

 네트워크상에서 쓸 수 있도록 Sun Microsystems 사에서 개발한 객체 지향 프로그래밍 언어입니다.

 1995년 5월에 발표, 1996년 1월부터 정식 버전을 배포하였습니다. C++를 바탕으로 언어 규격을 규정하였습니다. 버그의 원인이 되기 쉬운 기능, 예를 들면 지시자(pointer) 연산을 생략하였으며, C++에서는 사용이 끝난 객체(object)를 명시적으로 폐기하도록 프로그램에 기술하였으나 그 대신 자동 폐영역 회수(garbage collection) 기능을 추가하였습니다. 이와 같이 기억 장치 관리의 오류에서 기인하는 버그를 방지합니다.

 Java는 객체 클래스의 계승(inheri-tance) 관계를 실행할 때에 확정하는 동적 모델을 채용하였습니다. C++에서는 컴파일 시에 확정하기 때문에 상위 클래스에 새로운 기능을 추가하면 그 클래스와 계승 관계가 있는 모든 클래스를 재컴파일 해야 합니다. 자바에서는 클래스의 계승 관계를 실행할 때 확정하기 때문에, 하위의 클래스를 재컴파일 할 필요가 없습니다.

 자바로 작성한 프로그램의 원시 코드는 자바 컴파일러로 컴파일합니다. 자바 컴파일러는 바이트 코드라는 중간 코드를 생성합니다. 이 중간 코드를 자바 가상 머신이라는 소프트웨어로 해석해서 실행합니다. 이 소프트웨어를 설치한 컴퓨터라면 컴퓨터의 명령 집합 아키텍처나 운영 체계(OS)에 관계없이 같은 바이트 코드를 변경하지 않고 실행할 수 있습니다. 자바의 원시 코드를 고쳐 쓰거나 재컴파일 할 필요가 없습니다. 그렇기 때문에 자바는 기종이나 운영 체계와 무관한 응용 프로그램의 개발 도구로 각광받고 있습니다.

 자바 가상 머신의 실현 방법으로는 현재 3종류가 있습니다. 즉, 바이트 코드를 해석하여 축차적으로 실행하는 자바 해석기, 바이트 코드를 일괄적으로 2진 코드로 변환하고 실행하는 JIT 컴파일러, 바이트 코드를 고속으로 해석하여 실행하기 위한 자바 칩(마이크로프로세서)입니다.


2. Java의 특징

  • 간단(Simple)합니다.
     자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.

  • 객체지향적(Object-Oriented)입니다.
     자바는 C++와는 달리 처음부터 객체지향 개념을 기반으로 하여 설계되었고, 객체지향 언어가 제공해 주어야 하는 추상화(Abstraction), 상속(Inheritance), 그리고 다형성(Polymorphism) 등과 같은 특성들을 모두 완벽하게 제공해 주고 있습니다. 또한, 자바의 이러한 객체지향적 특성은 분산 환경, 클라이언트/서버 기반 시스템이 갖는 요구사항도 만족시켜 줄 수 있습니다.

  • 높은 신뢰성(Reliability)을 가집니다.
     자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터 및 포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.

  • 보안성(Security)을 가집니다.
     자바는 분산환경에서 작동하도록 설계 되었습니다. 그러나, 자바는 자바 언어와 자바 런타임 시스템 내에 보안 기능이 내재되어 있기 때문에 보안성이 있는 프로그램을 개발할 수 있도록 해 줍니다. 이러한 특성은 자바 프로그램이 네트웍 환경에서 바이러스 등과 같은 프로그램이 파일 시스템을 파괴하려는 것을 막을 수 있도록 해 줍니다.

  • 아키텍쳐 중립적(Architecture-neutral)이고 이식성(Portable)이 높습니다.
     자바는 서로 다른 이종(Heterogeneous)의 네트워크 환경에서 분산 되어 실행될 수 있도록 설계되었습니다. 이와 같은 환경에서는 응용 프로그램들이 다양한 하드웨어 아키텍쳐 위에서 실행될 수 있어야만 합니다. 이를 위해 자바 컴파일러는 이종의 하드웨어 및 소프트웨어 플랫폼에서 효율적으로 코드를 전송하기 위해 설계된 아키텍쳐 중립적인 중간 코드인 바이트코드를 생성합니다. 이는 동일한 자바 프로그램의 자바 바이트코드가 자바 가상머신이 설치되어 있는 어떤 플랫폼에서도 실행될 수 있도록 하는 것입니다. 또한, 자바는 기본 언어 정의를 엄격하게 함으로써 효율적인 이식성을 제공해 주고 있습니다. 예를 들어, int 형과 같은 기본 데이터형의 크기를 플랫폼과 무관하게 일정하게 하고, 연산자의 기능을 확실하게 규정하고 있습니다. C 언어를 이용하여 int 형을 선언할 때, 도스에서는 16비트, 윈도우 95/98/NT 등 32비트 운영 체제 환경에서는 32비트, 유닉스에서는 32비트 등 그 플랫폼에 따라 크기가 다르지만, 자바에서는 플랫폼에 상관없이 32비트로 고정되도록 하였습니다. 이는 자바 프로그램이 실행되는 환경이 자바 가상머신으로 동일하기 때문입니다.

  • 높은 수행성능(High-performance)을 제공합니다.
     자바에서는 인터프리터가 런타임 환경을 검사할 필요 없이 실행될 수 있도록 구성하였기 때문에 뛰어난 성능을 제공해 줍니다. 쓰레기 수집기(garbage collector) 즉 메모리 관리자는 자동으로 낮은 우선순위의 백그라운드 스레드로 실행되어 메모리가 필요할 때에만 동작하도록 함으로써, 자바 가상머신에게 무리를 주지 않으면서 보다 나은 수행 성능을 제공할 수 있도록 해 줍니다. 또한, 방대한 양의 계산을 수행하는 프로그램은 계산이 많은 부분을 본래의 플랫폼에 해당하는 기계어 코드로 재작성하여 자바 프로그램과 인터페이스 할 수 있도록 하였습니다.

  • 인터프리터(Interpreter) 방식입니다.
     자바 언어로 작성된 자바 프로그램을 중간언어 형태인 자바 바이트코드로 컴파일하고, 이렇게 생성된 자바 바이트코드를 자바 인터프리터가 해석함으로써, 자바 인터프리터와 런타임 시스템이 이식(porting)된 모든 플랫폼에서 자바 바이트코드를 직접 실행할 수 있습니다.

  • 다중 스레드(Multi-thread)를 지원합니다.
     자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.