'Programming/C Win32 MFC'에 해당되는 글 163건

  1. 2014.06.27 순열생성관련
  2. 2014.03.19 2중 포인터 사용이유
  3. 2014.03.11 typeof
  4. 2014.02.25 const / pointer
  5. 2013.12.18 assert()
  6. 2013.06.15 printf의 %s와 %S
  7. 2013.06.15 win32api - joystick 예제
  8. 2013.02.14 Windows IME
  9. 2013.01.06 == 와 = 의 실수를 피하기 위한 트릭 2
  10. 2012.07.02 c 변수범위 헤더
Programming/C Win32 MFC2014. 6. 27. 17:03
Junit이나 CUnit 등에서 테스트 시 입력값들을 생성해서
경우의 수대로 입력하기 위해서는 순열을 생성하는게 유리하다.

아무튼..
Unit Test시 Range로 테스트 하려면 순열을 쓰기에는..
int 나 float / double에는 맞지 않는것 같고.. 어떻게 해야하려나? 

'Programming > C Win32 MFC' 카테고리의 다른 글

include guard  (0) 2014.11.05
vc++ vector와 Vector 차이점?  (0) 2014.07.03
2중 포인터 사용이유  (0) 2014.03.19
typeof  (0) 2014.03.11
const / pointer  (0) 2014.02.25
Posted by 구차니
Programming/C Win32 MFC2014. 3. 19. 14:15
2중 포인터는 포인터에 대한 포인터 이다.
라고 하면 먼가 중의적인 설명인데...

간단하게
포인터 변수를 다른 함수에게 포인터로 넘겨주어
포인터 변수의 값(다르게 말하면 malloc()한 주소)을
변경(용량 부족으로 realloc() 하거나 새롭게 malloc() 하거나) 하는데 사용한다.

예전에 linked list를 하면서 알았던거 같은데 왜 까먹었을까 ㅠㅠ

[링크 : http://eirenehue.egloos.com/1000688]
[링크 : http://debugjung.tistory.com/258]
[링크 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MaeulNo=20&no=794484&ref=794461

'Programming > C Win32 MFC' 카테고리의 다른 글

vc++ vector와 Vector 차이점?  (0) 2014.07.03
순열생성관련  (0) 2014.06.27
typeof  (0) 2014.03.11
const / pointer  (0) 2014.02.25
assert()  (0) 2013.12.18
Posted by 구차니
Programming/C Win32 MFC2014. 3. 11. 16:30
gcc의 확장 기능으로
형의 종류를 알려준다고 하는데.. c++용인지 c용인지 모르겠다 -_-

[링크 : http://stackoverflow.com/questions/12081502/typeof-operator-in-c]
[링크 : http://codecat.tistory.com/entry/GCC-typeof]

If you are writing a header file that must work when included in ISO C programs, write __typeof__ instead of typeof.

[링크 : http://gcc.gnu.org/onlinedocs/gcc/Typeof.html
[링크 : http://en.wikipedia.org/wiki/Typeof]
[링크 : http://en.wikipedia.org/wiki/Typeid]

'Programming > C Win32 MFC' 카테고리의 다른 글

순열생성관련  (0) 2014.06.27
2중 포인터 사용이유  (0) 2014.03.19
const / pointer  (0) 2014.02.25
assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
Posted by 구차니
Programming/C Win32 MFC2014. 2. 25. 10:37
c++ 레퍼런스를 보다 보니
포인터에 const가 붙으면 어떻게 접근보호가 될지 궁금해 검색을 해보니 똭! ㅋㅋ

const 포인터
const void *p = &ori;
포인터의 주소 변경 불가(레퍼런스 화?) 내용 변경 가능

포인터 const
void const *p;
포인터 주소 내의 내용  변경 불가

const 포인터 const
const void const *p
포인터 주소 및 주소 내의 내용 변경 불가

[링크 : https://kldp.org/node/48414]
[링크 : http://quoobit.egloos.com/1379839]

+ 특이사항으로는..
const 변수를
포인터로는 조작이 가능하다는거.. 당연한걸지도 모르겠지만... ㄷㄷㄷ 

int main()
{
        const int a = 0;
        int *p;

        p = &a;

        printf("%d %d\n",a,*p);

        *p = 2;
//      a = 1;

        printf("%d %d\n",a,*p);

        return 0;
} 

$ ./a.out
0 0
2 2

어짜피 const는 컴파일 타임에 결정되는 것 이기에
메모리 상에 주소로 접근시에는 해당 메모리 영역이 read-only인지 알 수 없기에
포인터로 (const 포인터 const라면 안되겠지만) const 영역의 데이터를 조작이 가능하다는 놀라운(?) 사실 ㄷㄷ

---
2014.3.5 추가
gcc 에서는 문제없이 되지만 vs2008에서는 에러가 난다. 
1> error C2440: '=' : 'const int *'에서 'int *'(으)로 변환할 수 없습니다.
1>        변환하면서 한정자가 손실됩니다. 

또한 gcc에서 되던 문법이 경고가 발생한다.
const int const *p1;
1> warning C4114: 동일한 형식 한정자를 두 번 이상 사용했습니다.  



'Programming > C Win32 MFC' 카테고리의 다른 글

2중 포인터 사용이유  (0) 2014.03.19
typeof  (0) 2014.03.11
assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
win32api - joystick 예제  (0) 2013.06.15
Posted by 구차니
Programming/C Win32 MFC2013. 12. 18. 01:55
한번쯤은 써봐야지하는 것 중에 하나
가장 강력하고 원초적인 디버깅 중에 하나로 printf()가 있다면
꽤나 상큼하고 스마트한 방법이라는데

assert()에서 비교문이 false 일 경우 강제종료 + 덤프를 한다고 한다.
일단 C/C++ 다 지원하는 듯..

NDEBUG가 정의되면 assert() 가 수행되지도 컴파일 되지도 않는다고 한다.
 #define NDEBUG // disable assert() calls

#include <assert.h>
void assert(scalar expression);
[링크 : http://linux.die.net/man/3/assert

[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=408376&mid=C_LIB]
[링크 : http://www.cplusplus.com/reference/cassert/assert/]


---
2013.12.19
//#include <assert.h>
로 주석처리 하고 assert()를 부르면 컴파일 부터 배짼다 -_-
$ gcc c.c
/tmp/ccpSwySM.o: In function `main':
c.c:(.text+0x11): undefined reference to `assert'
collect2: ld returned 1 exit status 

#include "stdio.h"
#include "assert.h"

int main()
{
        assert(0);

        return 0;
}

음.. 우분투 12.04 LTS desktop에서 코어 덤프를 안하도록 해놔서 그런가..
덤프 파일이 생성되진 않았다.
$ gcc c.c
/tmp/ccpSwySM.o: In function `main':
c.c:(.text+0x11): undefined reference to `assert'
collect2: ld returned 1 exit status 

'Programming > C Win32 MFC' 카테고리의 다른 글

typeof  (0) 2014.03.11
const / pointer  (0) 2014.02.25
printf의 %s와 %S  (0) 2013.06.15
win32api - joystick 예제  (0) 2013.06.15
Windows IME  (0) 2013.02.14
Posted by 구차니
Programming/C Win32 MFC2013. 6. 15. 19:13
유니코드 문자열 출력에 %S를 사용하면 매우 좋다
(웬지 리빙 포인트 기분인데?)

조이스틱 이름 받아오는데
JOYCAPS pjc;
pjc.szPname 에 조이스틱의 이름이 'M' 만 출력되서 혹시나 출력을 바꾸어 보니
"Microsoft PC-joystick driver"

윈7은 내부적으로도 문자열을 유니코드로 사용하나 -ㅁ-?

[링크 : http://www.jiniya.net/wp/archives/4299]

'Programming > C Win32 MFC' 카테고리의 다른 글

const / pointer  (0) 2014.02.25
assert()  (0) 2013.12.18
win32api - joystick 예제  (0) 2013.06.15
Windows IME  (0) 2013.02.14
== 와 = 의 실수를 피하기 위한 트릭  (2) 2013.01.06
Posted by 구차니
Programming/C Win32 MFC2013. 6. 15. 19:06
어디다 넣어야 하는지 몰라서 대충.. 투척
일단 winmm.lib를 링크 해야 하고
winmm.dll을 해도 된다는데 dll은 쓸줄 모르니 패스 -ㅁ-


windows.h와 MMSystem.h를 포함하면된다.
사용한 함수들은 아래 예제 참고.

요즘 조이스틱은 4축 지원(X/Y/Z/R)를 많이 지원하므로
joyGetPos보다는 joyGetPosEx를 사용하는 것이 좋을듯 하다.
버튼은 1번 부터 1bit씩 LBS에서 MBS로 하나씩 올라간다(버튼이 12개 있으면 2^12 = 2048까지 올라가게 된다.

드라이버의 이름(제품명)은 Unicode로 저장되어 있으니 필요하면 %S로 출력하면 된다.

#include "stdafx.h"
#include "windows.h"
#include "MMSystem.h"

int _tmain(int argc, _TCHAR* argv[])
{

	JOYINFO joyinfo; 
	JOYINFOEX joyinfo2; 
	JOYCAPS pjc;
	UINT wNumDevs, wDeviceID; 
	BOOL bDev1Attached, bDev2Attached; 

	if((wNumDevs = joyGetNumDevs()) == 0) 
	{
		return MMSYSERR_NODRIVER;
	}

	joyGetDevCaps(JOYSTICKID1, &pjc, sizeof(JOYCAPS));

	printf("%d %d %S\n%d %d %d %d %d %d\n%d %d %d\n%d %d %d %d %d %d\n%d %d %d %d\n%S %S\n",
	pjc.wMid, 
	pjc.wPid, 
	pjc.szPname, 

	pjc.wXmin, 
	pjc.wXmax, 
	pjc.wYmin, 
	pjc.wYmax, 
	pjc.wZmin, 
	pjc.wZmax, 

	pjc.wNumButtons, 
	pjc.wPeriodMin, 
	pjc.wPeriodMax, 

	pjc.wRmin, 
	pjc.wRmax, 
	pjc.wUmin, 
	pjc.wUmax, 
	pjc.wVmin, 
	pjc.wVmax, 

	pjc.wCaps, 
	pjc.wMaxAxes, 
	pjc.wNumAxes, 
	pjc.wMaxButtons, 
	pjc.szRegKey, 
	pjc.szOEMVxD);

	printf("%d\n",wNumDevs);
#if 1
	for(;;)
	{
		bDev1Attached = joyGetPosEx(JOYSTICKID1,&joyinfo2) != JOYERR_UNPLUGGED; 
		printf("X:%05d Y:%05d Z:%05d R:%05d H:%d %d\n",
			joyinfo2.dwXpos, // X
			joyinfo2.dwYpos, // Y
			joyinfo2.dwZpos, // Z(throttle)
			joyinfo2.dwRpos, // R(Rudder)
			joyinfo2.dwPOV,  // POV(Hat)
			joyinfo2.dwButtons);

		Sleep(100);
	}
#else
	for(;;)
	{
		bDev1Attached = joyGetPos(JOYSTICKID1,&joyinfo) != JOYERR_UNPLUGGED; 
			printf("%d %d %d %d\n",
			joyinfo.wXpos,
			joyinfo.wYpos,
			joyinfo.wZpos,
			joyinfo.wButtons);

		Sleep(100);
	}
#endif
	system("pause");

	return 0;
}


[링크 : http://msdn.microsoft.com/en-us/library/ms709377.aspx]

[링크 : http://msdn.microsoft.com/en-us/library/ms709352.aspx] joyGetPos
  [링크 : http://msdn.microsoft.com/en-us/library/ms709359.aspx] JOYINFO
[링크 : http://msdn.microsoft.com/en-us/library/ms709354.aspx] joyGetPosEx
  [링크 : http://msdn.microsoft.com/en-us/library/ms709358.aspx] JOYINFOEX
[링크 : http://msdn.microsoft.com/en-us/library/ms709350.aspx] joyGetDevCaps
  [링크 : http://msdn.microsoft.com/en-us/library/ms709348.aspx] JOYCAPS
 

'Programming > C Win32 MFC' 카테고리의 다른 글

assert()  (0) 2013.12.18
printf의 %s와 %S  (0) 2013.06.15
Windows IME  (0) 2013.02.14
== 와 = 의 실수를 피하기 위한 트릭  (2) 2013.01.06
c 변수범위 헤더  (0) 2012.07.02
Posted by 구차니
Programming/C Win32 MFC2013. 2. 14. 22:52

'Programming > C Win32 MFC' 카테고리의 다른 글

printf의 %s와 %S  (0) 2013.06.15
win32api - joystick 예제  (0) 2013.06.15
== 와 = 의 실수를 피하기 위한 트릭  (2) 2013.01.06
c 변수범위 헤더  (0) 2012.07.02
엔디안 / endian  (2) 2012.06.14
Posted by 구차니
Programming/C Win32 MFC2013. 1. 6. 23:11
c언어 강좌를 하다가 윈도우 서버 프로그래머 분이 오셔서 이야기를 듣는데
이건 꼭! 내것으로 만들어야 겠다 싶은게 있어서 기록 (오유 i2kas 님)



if(idx == 0)
이라는 문구가 있을경우
idx = 0 으로 쳐도 문법적인 에러는 발생하지 않고
찾기가 상당히 어려운 버그중에 하나인데


if(0 == idx) 로 순서만 바꾸면 문법적으로는 아무런 하자가 없으면서도
== 를 잘못입력하여 = 로 입력했을시 
if(0 = idx)로 lvalue가 constant로 에러가 발생함으로 유용하게 논리에러를 잡아내는데 사용될수 있다.


오홍!!!! 

'Programming > C Win32 MFC' 카테고리의 다른 글

win32api - joystick 예제  (0) 2013.06.15
Windows IME  (0) 2013.02.14
c 변수범위 헤더  (0) 2012.07.02
엔디안 / endian  (2) 2012.06.14
localtime의 return값을 조심하세요  (2) 2012.06.12
Posted by 구차니
Programming/C Win32 MFC2012. 7. 2. 22:11
limits.h 와 float.h 두개에서 변수의 범위에 대한 define을 포함한다.

[링크 :  http://publications.gbdirect.co.uk/c_book/chapter9/limits.html ]
Posted by 구차니