#pragma

Computer/C/C++ 2007. 8. 8. 22:02
출처: http://simple21.egloos.com/2465470

#pragma는
- 그리스어로 action이라는 뜻
- 각각의 컴파일마다 독립적인 기능을 제공하기 위하여 이용(다른 컴파일에서는 처리 안 될 수 있음)
- VC++에서는 많은 pragma directives가 있음(alloc_text, auto_inline, bss_seg, check_stack, code_seg, comment, component, conform, const_seg, data_seg, deprecated, function, hdrstop, include_alias, init_seg, inline_depth, inline_recursion, intrinsic, managed, message, once, optimize, pack, pointers_to_members, pop_macro, push_macro, runtime_checks, section, setlocale, unmanaged, vtordisp, warning)
- 정의 안 된 pragma directives를 사용하면 단순히 경고(warning C4068: unknown pragma)만 output 창에 출력하고, 무시됨
- 많이 사용하는 것 몇 가지만 앞으로 살펴볼 것임
- 이번시간에는 once, warning

1.#pragma once
이는 중복 include하는 것을 막는 것이다.
만일 중복 include가 되면, error C2011: 'CA' : 'class' type redefinition

#ifndef _A_H_
#define _A_H_
class CA {
...
}
#endif


#pragma once
class CA {
...
}
는 동일한 것이다.

VC++에서 자동으로 class를 만들면
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
라는 코드가 삽입되어 있는데, 이는 #pragma once가 VC++버전이 1000이상인 곳에서만 의미가 있기 때문이다.(Visual C++ 5.0 => 1100, Visual C++ 6.0 => 1200, Visual C++ .NET 2003 => 1310, Visual C++ 2005 => 1400)

2.#pragma warning(disable : 4244; once : 4101; error : 4700)
소스를 컴파일하면 error와 warning이 나타나는데, warning의 경고수준을 결정하는 것임
거의 쓸 일은 없지만, 재미로 한번 살펴보기만 하자.

void main() {
    double f;
    int k1, k2;
    int n=f;
}
이를 컴파일하면 output창에 아래의 warning이 나타난다.
warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data
warning C4101: 'k1' : unreferenced local variable
warning C4101: 'k2' : unreferenced local variable
warning C4700: local variable 'f' used without having been initialized
0 error(s), 4 warning(s)

이때 disable은 해당 warning이 output창에 나오지 않도록 무시하라는 지정
once는 동일한 warning에 대해 한번만 나오라는 것
error는 해당 warning을 error로 취급하라는 것이다.

#pragma warning(disable: 4244)
#pragma warning(once: 4101)
#pragma warning(error: 4700)
void main() {
    double f;
    int k1, k2;
    int n=f;
}
을 컴파일하면
warning C4101: 'k1' : unreferenced local variable
error C4700: local variable 'f' used without having been initialized
1 error(s), 1 warning(s)
가 나오는 것을 알 수 있다.

하지만 warning을 소홀히 하는 것은 매우 좋지 않은 습관이다.
warning도 꼭꼭 해결하고 넘어가도록 하자.
void main() {
    double f=0.;
    int n=(int)f;
}

'Computer > C/C++' 카테고리의 다른 글

stringstream  (3) 2007.08.09
#define을 통한 macro에서 #과 ##의 용법  (2) 2007.08.08
vprintf, vsprintf,... 가변 인수 함수.  (0) 2007.08.01
bitset 클래스  (0) 2007.07.02
STL - MAP  (0) 2007.02.27

vprintf, vsprintf,... 가변 인수 함수.

Computer/C/C++ 2007. 8. 1. 11:27
Stream processing engine의 debugger를 손대다가 발견한 함수.
vprintf, vsprintf인데 ....아무튼 관련자료.

- 종종 공부 좀 열심히 할껄...하고 어차피 지나간 일에 대해 후회를 한다.

출처: http://blog.naver.com/endfirst?Redirect=Log&logNo=20003220224

'Computer > C/C++' 카테고리의 다른 글

#define을 통한 macro에서 #과 ##의 용법  (2) 2007.08.08
#pragma  (1) 2007.08.08
bitset 클래스  (0) 2007.07.02
STL - MAP  (0) 2007.02.27
컨테이너 초기화및 Functor 예제  (0) 2007.02.27

mysql , C 연동.

Computer/ETC 2007. 7. 25. 14:12

프로젝트 하다가...찾은 내용들.

mysql 에서 유저 추가 및 테스트...

Computer/Linux Tips 2007. 7. 19. 16:14

은근.....복잡하다 -_- ....

DB명: profile
User ID: caw

-- system console --

mysql -u root

-- mysql console --

use mysql

insert into user (host,user,password) values ('localhost','caw',password('password'));

// 뒤의 y들은 다 권한들이다. schema를 잘 보고 개수를 잘 맞춰야함 ;;;
insert into db values('localhost', 'profile', 'caw', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y', 'y');

-- system console  --

mysqladmin create profile

/etc/init.d/mysqld restart  // root에서 작업

----- test -----

mysql -u caw -p password

show databases; // profile db가 생성되었는지 확인

use profile

show tables;

create table mytable(id int, name char(10));

insert into mytable values(1, 'namename');

select * from mytable;

drop table mytable;

mysql: Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock'

Computer/Linux Tips 2007. 7. 16. 19:53

Fedore에서 mysql을 설치하고 실행하려는데 다음과 같은 에러 발생.

[root@vmm geniuskch]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock' (2)

대책을 찾던 중 KLDP에 나온 내용으로 해결.

출처: http://kldp.org/node/64774

'Computer > Linux Tips' 카테고리의 다른 글

grep 사용법  (0) 2007.09.27
mysql 에서 유저 추가 및 테스트...  (0) 2007.07.19
MPlayer v1.0rc1 source compile trouble shooting  (1) 2007.07.10
"ld: cannot find -lX11" error가 날때.  (2) 2007.07.09
Linux Shell programming 관련  (0) 2007.04.17

Windows batch programming

Computer/ETC 2007. 7. 16. 10:00

Dos 시절에 많이 사용되든 batch programming하는 방법들.

dos 시절에.....지금도 통할것 같기는 하지만,,, 아무튼,,

이런 command 들과 autoexec를 이용한 hacking code 삽입도 가능했다.

windows로 넘어오면서, dos command로 multitasking을 하는 재미있는 command도 발견.

"start /?"를 하면 다음과 같이 출력된다.

C:\Documents and Settings\ChanhoKim>start /?
지정된 프로그램이나 명령을 별도의 창에서 시작합니다.
START ["제목"] [/D경로] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
      [/WAIT] [/B] [명령어/프로그램]
      [매개 변수]
    "제목"      창의 제목 표시줄에 나타낼 제목.
    경로        시작 디렉터리
    B           새 창을 만들지 않고 응용 프로그램 시작. 이 응용 프로그램은
                ^C 처리를 무시. 응용 프로그램이 ^C 처리를
                활성화시키지 않는 한, ^Break로만 응용 프로그램을 인터럽트할
                수 있음.
    I           현재 환경이 아닌 새 환경을 원래의 환경 값으로 cmd.exe에 전달합니
다.
    MIN         아이콘을 표시하며 시작합니다.
    MAX         전체 화면을 표시하며 시작합니다.
    SEPARATE    별도의 메모리 공간에서 16 비트 Windows 프로그램 시작
    SHARED      공유 메모리 공간에서 16 비트 Windows 프로그램 시작
    LOW         응용 프로그램을 IDLE 우선 순위 클래스에서 시작
    NORMAL      응용 프로그램을 NORMAL 우선 순위 클래스에서 시작
    HIGH        응용 프로그램을 HIGH 우선 순위 클래스에서 시작
    REALTIME    응용 프로그램을 REALTIME 우선 순위 클래스에서 시작
    WAIT        응용 프로그램을 시작하고 끝날 때까지 기다림
    명령어/프로그램
                내부 cmd 명령 또는 일괄 파일인 경우, 명령 처리기는 /K 스위치를
                 사용하여 cmd.exe를 실행합니다. 이것은 명령 실행 후에도 창이
                남아 있게 합니다.
                내부 cmd 명령 또는 일괄 파일이 아닌 경우, 이 프로그램은
                창 모드 응용 프로그램, 또는 콘솔 응용 프로그램으로서 실행됩니다.

    매개 변수   명령어/프로그램으로 전달되는 매개 변수입니다.

명령 확장을 사용하면  명령줄을 통한 외부 명령 호출이나 START명령이
아래와 같이 바뀝니다.
실행 파일이 아닌 파일을 단지 파일 이름을 명령으로 입력함으로써
    파일 연결을 통해 호출할 수 있습니다. (예를 들면 WORD.DOC는
    .DOC 파일 확장자와 연결된 응용 프로그램을 시작합니다.)
    명령 스크립트 안에서 이러한 연결을 만드는 방법을 알려면
    ASSOC와 FTYPE 명령을 입력하십시오.
32비트 GUI 응용 프로그램을 실행할 때는, CMD.EXE는
    응용 프로그램이 끝나기를 기다리지 않고 명령 프롬프트로
    반환됩니다. 명령 스크립트 안에서 실행되면 이러한 새 동작이
    발생하지 않습니다.
확장자나 경로 한정자 없이 첫 토큰이 CMD인 명령줄을
    실행할 때는 CMD를 COMSPEC 변수의 값으로 바꾸며 따라서
    최소한의 경우 임의의 CMD.EXE 버전이 선택되는 것을 막을 수 있습니다.
첫 토큰이 확장자를 가지지 않는 명령줄을 실행할 때 CMD.EXE는
    어떤 확장자를 어떤 순서로 찾을 것인지 결정하기 위해 PATHEXT
    환경 변수 값을 사용합니다. PATHEXT 변수의 기본값은 아래와 같습니다.
    .COM;.EXE;.BAT;.CMD
   구문에서 PATH 변수와 같이 ; 기호로 요소를 분리한다는 점에
   유의하십시오.
명령을 실행할 때는 확장자가 같지 않으면 확장자가 없는 이름이
디렉터리 이름과 같은 지 찾아보고 만약 있으면 START명령이
그 경로에서 탐색기를 시작합니다. 명령줄에서 이러한 것이 수행되면
그 경로에 CD /D를 수행하는 것과 같습니다.

'Computer > ETC' 카테고리의 다른 글

[MySql]is not allowed to connect to this MySQL server  (0) 2007.08.24
mysql , C 연동.  (4) 2007.07.25
WCDMA 인터넷 하기  (2) 2007.04.19
Microsoft Word 단축키  (1) 2007.03.31
ARP (Address Resolution Protocol )  (0) 2007.03.14

MPlayer v1.0rc1 source compile trouble shooting

Computer/Linux Tips 2007. 7. 10. 23:17
1.

http://www.mplayerhq.hu/homepage/design7/dload.html


여기서 다운받은 mplayer의 1.0 rc1 의 source를 cygwin에서 컴파일.

아..참고로 쌩은 아니고 RTP 지원을 위하여 live555 라는 라이브러리를 우선 추가적으로 build하였다.

live555 와 mplayer 관련은 다음 사이트.
http://www.live555.com/mplayer/

configure과정중에 mplayer는 live555의 존재를 자동으로 검색하였고, 성공적으로 컴파일이 되는듯 하였다. 그러나,...!!

요런 에러 발생.
libavcodec/libavcodec.a(mpegaudiodec.o):mpegaudiodec.c:(.text+0x5a0): undefined reference to `_llrint'

한참 뒤지다보니 여기서 답글대로.. "dirty trick"을 찾았다.

http://article.gmane.org/gmane.comp.video.mplayer.cygwin/2561
I have a very dirty trick for you: just change the occurrences of llrint
to lrint (e.g., add a #define llrint lrint)
Very dirty, but it works!
Cheers
Enzo

libavcodec/mpegaudiodec.c 에서
#define llrint lrint
을 해주고 나니

dirty하지만 컴파일은 된다. MPEG 코덱에 대해서 잘 돌아가는지는 테스트가 필요할 것 같다.

2.

이용하던 모종의 패치가 적용된 mplayer 소스에 대해서는 이런 에러가 발생
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x11e4): undefined reference to `_remoteServAddr'
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x11fe): undefined ref
erence to `_sd'
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x1228): undefined ref
erence to `_rc'
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x1235): undefined ref
erence to `_mfd'
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x125a): undefined ref
erence to `_rc'
libmpcodecs/libmpcodecs.a(dec_video.o):dec_video.c:(.text+0x146f): undefined ref
erence to `_sd'

해결은 못했다. -_-......

"ld: cannot find -lX11" error가 날때.

Computer/Linux Tips 2007. 7. 9. 17:01

Ref.: http://kldp.org/node/43963

X가 /usr/X11R6에 설치되어 있다면..

$ gcc -I/usr/X11R6/include -L/usr/X11R6/lib asdf.c -lX11

매번 -I, -L을 쓰는게 귀찮다면...

$ export LIBRARY_PATH=/usr/X11R6/lib:$LIBRARY_PATH
$ export C_INCLUDE_PATH=/usr/X11R6/include:$C_INCLUDE_PATH
$ gcc asdf.c -lX11

bitset 클래스

Computer/C/C++ 2007. 7. 2. 14:26

뭔가 bitmap을 만들어서 사용할 일이 발생했다.

shift와 modulo 연산을 열라게 하게 될 줄 알고 내심 고민..어떻게 효율적으로 짤 수 있을까 잠시 더 고민...

하다가 STL에 놀라운 녀석이 있다는 사실을 발견하였다.

------------------------------

비트 단위의 조작을 할때 사용할 수 있는 클래스.

가령, 10 비트 공간안에 10개의 값을 저장할 때 사용.

그러나, bitset 클래스가 메모리를 비트 단위로 사용하는 것은 아니고 외부로 표현 될 때 10개의 비트처럼 보인다는 거라넹~~~~


#include <iostream>
#include <bitset>


using namespace std;


int main()
{
    bitset < 5 > flags;


    flags.set ( 0 );
    flags.set ( 1 );
    flags.set ( 2 );


    cout << "상태 : " << flags << endl;

    cout << "any  : " << flags.any( ) << endl;

    cout << "test : " << flags.test(3) << endl;


    flags.reset( 1 );
    cout << "상태 : " << flags << endl;
    cout << "개수 : " << (int)flags.count() << endl;

    return 0;
}


[결과]

상태 : 00111

any  : 1

test  : 0

상태 : 00101

개수 : 2



멤버 함수로는

bitset::any()  - 어떤거라도 켜져 있으면 true 를 return.

bitset::test()  - 몇 번째 비트의 값이 켜져 있는지 꺼져 있는 지 return.

bitset::set()   - 몇 번째 비트의 값을 설정하는 함수.  ( default : 1 )

                      모든 비트를 1로 설정하는 매개 변수 없는 버전 과 특정 비트만 설정하는 매개변수

                      있는 버전이 있다. 매개 변수 있는 버전에서는 두번째가 지정할 값인데 default로

                      1 이기 때문에 인덱스만 지정해서 호출하면 1로 설정이 된다.

                 단, 일반적으로 set()은 설정, reset()은 해제라고 생각하기 때문에 만약 설정값을

                      0 (false) 으로 두면 착각할 수 있다라고 저자는 얘기하고 나 또한 그럴것 같다.

bitset::reset() - 비트를 0으로 설정하는 멤버 함수.

bitset::count() - 켜진 비트 개수를 return. size_t type로 return.


- <프로젝트와 함께 하는 STL의 아름다움> 491page 참조



출처 : http://blog.naver.com/rudalson/100011108867

'Computer > C/C++' 카테고리의 다른 글

#pragma  (1) 2007.08.08
vprintf, vsprintf,... 가변 인수 함수.  (0) 2007.08.01
STL - MAP  (0) 2007.02.27
컨테이너 초기화및 Functor 예제  (0) 2007.02.27
STL lower_bound function 사용하기 Sample...  (0) 2007.02.27

WCDMA 인터넷 하기

Computer/ETC 2007. 4. 19. 13:34

WCDMA 폰을 노트북과 연결하여 무선 인터넷을 사용하는 것을 시도해보았다.

참고로 내 핸드폰은 KTF의 삼성 SPH-W2500 이다.

이것저것 시도해 본 결과 두가지 방법이 가능했다.


1. Bluetooth로 노트북과 연결하여 네트워크 연결

핸드폰에서 일단 블루투스 사용모드로 설정,

노트북에서 블루투스 스캐닝 시작. 두어번 장치를 찾을수 없다고 에러가 났다.

종국에 정상적으로 검색이 되고, 핸드폰 액정에는 데이터 통신 준비중...

네트워크 구성 -> 새 연결 마법사 -> 전화접속 네트워크 -> 통신모뎀은 Bluetooth 뭐시기.

아이디, 암호, 전화번호, 필요없이 그냥 연결했다. 그냥 연결되었다. --;

액정은 WCDMA 모드에서의 Tx, Rx를 나타내는 그래프만 왔다갔다.

인터넷은 잘 되었다.

2. USB 케이블을 연결하여 네트워크 연결

역시 네트워크 구성에서 새 연결 마법사를 이용하여 전화접속 네트워크를 추가하였다.

사용모뎀은 당연히 Samsung CDMA Modem, 내 컴퓨터에서의 통신포트는 COM3 로 잡혀있었다.

어디서 본대로 ID/Pass 둘다 ktf/ktf 넣어주고, 전화번호에 1506 을 넣고 전화걸기.

걸기를 시도하고 핸드폰 액정을 보니 *89# 이라는 번호로 전화를 걸고 있었다.

곧 연결되었음을 알리고 트레이로 아이콘은 들어갔고, 인터넷이 되었다.

블루투스의 경우와 마찬가지로 액정은 Tx, Rx 를 나타내는 그래프.

아 여기서 가장 중요한 건 당연히 컴퓨터에 anycall USB driver를 설치하여 통신모뎀을 인식시키는 것.

'Computer > ETC' 카테고리의 다른 글

mysql , C 연동.  (4) 2007.07.25
Windows batch programming  (0) 2007.07.16
Microsoft Word 단축키  (1) 2007.03.31
ARP (Address Resolution Protocol )  (0) 2007.03.14
원격 데스크탑에서 MATLAB 사용하기  (3) 2007.02.27