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

  1. 2016.12.19 MFC / stdlib / qsort example
  2. 2016.12.16 MFC UpdateData()
  3. 2016.04.04 윈도우에서 dll 동적 라이브러리 사용하기
  4. 2016.03.18 가변 매크로 __VA_ARGS__
  5. 2015.12.21 #import ?
  6. 2015.10.12 "\n" 의 cpu 점유율?
  7. 2015.10.05 rand()와 RAND_MAX
  8. 2015.09.30 Cppcheck
  9. 2015.07.14 void형 포인터 ++
  10. 2015.07.07 가변인자를 다시 넘겨주기 2
Programming/C Win32 MFC2016. 12. 19. 09:18

심심해서 만든 로또 프로그램에 정렬기능 추가

qsort()는 첨 써보네..

일단 compare 함수에서 캐스팅 하는 부분을 잘 해주면...

범용으로 쓸수 있을려나? 무리일려나?


int compare (const void *first, const void *second)

{

    if (*(unsigned char*)first > *(unsigned char*)second)

        return 1;

    else if (*(unsigned char*)first < *(unsigned char*)second)

        return -1;

    else 

        return 0;

}


void CLottoDlg::OnButton1() 

{

// TODO: Add your control notification handler code here

int idx;

unsigned char flag[45];

unsigned char genval = 0;

CString *strarray[42] =

{

&m_edit1,&m_edit2,&m_edit3,&m_edit4,&m_edit5,&m_edit6,

&m_edit7,&m_edit8,&m_edit9,&m_edit10,&m_edit11,&m_edit12,

&m_edit13,&m_edit14,&m_edit15,&m_edit16,&m_edit17,&m_edit18,

&m_edit19,&m_edit20,&m_edit21,&m_edit22,&m_edit23,&m_edit24,

&m_edit25,&m_edit26,&m_edit27,&m_edit28,&m_edit29,&m_edit30,

&m_edit31,&m_edit32,&m_edit33,&m_edit34,&m_edit35,&m_edit36,

&m_edit37,&m_edit38,&m_edit39,&m_edit40,&m_edit41,&m_edit42

};


unsigned char row[42];

memset(flag, 0x00, sizeof(unsigned char) * 45);

srand(time(NULL));


for(idx = 0 ;idx < 30;idx++)

{

do

{

genval = rand() % 45;

}

while(flag[genval] != 0);

flag[genval] = 1;

row[idx] = genval;

}


for(idx = 0; idx < 5; idx++)

{

qsort(row + (idx * 6), 6, sizeof(char), compare);

}


for(idx = 0; idx < 30; idx++)

{

strarray[idx]->Format("%d",row[idx] + 1);

}


UpdateData(FALSE);


lotto.zip


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

MFC HTTP GET/POST  (0) 2017.03.02
win32 http 인증 관련  (0) 2017.02.28
MFC UpdateData()  (0) 2016.12.16
윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
가변 매크로 __VA_ARGS__  (0) 2016.03.18
Posted by 구차니
Programming/C Win32 MFC2016. 12. 16. 13:03

심심해서 오랫만에 짜본 초 허접 로또번호 생성 ㅋㅋㅋ

DDX 통해서 값 교환은 처음인가.. 어색하네?


아무튼 class wizard로 변수 연결해주다가 귀찮아서

소스에서 DDX 부분에 손봐서는 변수는 연결했는데

값이 안나오길래 검색해보니 UpdateData()라는 함수 발견


msdn은 설명이 어려운데

true 면은 컨트롤에서 연결된 변수로 값을 가져오고(UI쪽에서 끌어오기)

false 면은 연결된 변수의 값을 컨트롤러 넘겨준다(UI쪽으로 넘겨주기)


void CLottoDlg::OnButton1() 

{

// TODO: Add your control notification handler code here

int idx;

unsigned char flag[45];

unsigned char genval = 0;

CString *strarray[42] =

{

&m_edit1,&m_edit2,&m_edit3,&m_edit4,&m_edit5,&m_edit6,

&m_edit7,&m_edit8,&m_edit9,&m_edit10,&m_edit11,&m_edit12,

&m_edit13,&m_edit14,&m_edit15,&m_edit16,&m_edit17,&m_edit18,

&m_edit19,&m_edit20,&m_edit21,&m_edit22,&m_edit23,&m_edit24,

&m_edit25,&m_edit26,&m_edit27,&m_edit28,&m_edit29,&m_edit30,

&m_edit31,&m_edit32,&m_edit33,&m_edit34,&m_edit35,&m_edit36,

&m_edit37,&m_edit38,&m_edit39,&m_edit40,&m_edit41,&m_edit42

};


memset(flag, 0x00, sizeof(unsigned char) * 45);

srand(time(NULL));


for(idx = 0 ;idx < 42;idx++)

{

do

{

genval = rand() % 45;

}

while(flag[genval] != 0);

flag[genval] = 1;


strarray[idx]->Format("%d",genval + 1);

}


UpdateData(FALSE);


[링크 : http://lazypaul.tistory.com/232]

[링크 : https://msdn.microsoft.com/ko-kr/library/t9fb9hww.aspx]

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

win32 http 인증 관련  (0) 2017.02.28
MFC / stdlib / qsort example  (0) 2016.12.19
윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
가변 매크로 __VA_ARGS__  (0) 2016.03.18
#import ?  (0) 2015.12.21
Posted by 구차니
Programming/C Win32 MFC2016. 4. 4. 09:20

엥.. 왜 이런거 관련 내용이 검색이 안되지 -ㅁ-?


    hInst = LoadLibrary("SmallDll.dll");

    if(hInst == NULL)

        return 1;


    // 호출한 함수를 맵핑

    fAPlusB = (APlusB)GetProcAddress(hInst, "APlusB");

    fAMinusB = (AMinusB)GetProcAddress(hInst, "AMinusB"); 

[링크 : http://wwwi.tistory.com/72]



HMODULE WINAPI LoadLibrary(

  _In_ LPCTSTR lpFileName

);

[링크 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx]



FARPROC WINAPI GetProcAddress(

  _In_ HMODULE hModule,

  _In_ LPCSTR  lpProcName

);

[링크 : https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms683212(v=vs.85).aspx]



lib로 하는거네...

// MathFuncsDll.h

#ifdef MATHFUNCSDLL_EXPORTS

#define MATHFUNCSDLL_API __declspec(dllexport) 

#else

#define MATHFUNCSDLL_API __declspec(dllimport) 

#endif


// MyExecRefsDll.cpp

// compile with: /EHsc /link MathFuncsDll.lib 


[링크 : https://msdn.microsoft.com/ko-kr/library/ms235636.aspx]

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

MFC / stdlib / qsort example  (0) 2016.12.19
MFC UpdateData()  (0) 2016.12.16
가변 매크로 __VA_ARGS__  (0) 2016.03.18
#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
Posted by 구차니
Programming/C Win32 MFC2016. 3. 18. 20:49



[링크 : https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html]

[링크 : https://msdn.microsoft.com/ko-kr/library/ms177415.aspx]

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

MFC UpdateData()  (0) 2016.12.16
윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
Posted by 구차니
Programming/C Win32 MFC2015. 12. 21. 14:54

엥? 이런 넘도 있었나? -ㅁ-?



$ g++ float.c -lm

float.c:1:2: warning: #import is a deprecated GCC extension [-Wdeprecated]

float.c:3:11: error: ‘::main’ must return ‘int’

float.c: In function ‘int main()’:


$ gcc float.c -lm

float.c:1:2: warning: #import is a deprecated GCC extension [-Wdeprecated]

float.c: In function ‘main’:



If you are familiar with C++ and macros, then


#import "Class.h" 

is similar to


{

#pragma once


#include "class.h"

}

[링크 : http://stackoverflow.com/.../what-is-the-difference-between-import-and-include-in-objective-c] 

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

윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
가변 매크로 __VA_ARGS__  (0) 2016.03.18
"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
Posted by 구차니
Programming/C Win32 MFC2015. 10. 12. 10:45

소스상으로는 "%d "와 "%d\n"으로

1바이트 차이일텐데... 이상하게 cpu 사용률이 다르게 나온다.

$ cat sp.c

#include <stdio.h>

#include <omp.h>


int main(int argc, char **argv)

{

        int a = 0;


        for(;;)

        {

        a++;

//      printf("%d ",a);

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

        }


        return 0;

}



물론. -fopenmp의 영향은 받지 않는다.

$ gcc -fopenmp -o b.out sp.c 


printf("%d ",a);

를 활성화


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

를 활성화


fflush(stdout);

을 추가해서 해보니 비슷하게 나온다... printf()가 bufferd output인데

\n에서 강제로 fflush하게 하는건가..

[링크 : http://stackoverflow.com/.../why-does-stdout-need-explicit-flushing-when-redirected-to-file]

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

가변 매크로 __VA_ARGS__  (0) 2016.03.18
#import ?  (0) 2015.12.21
rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
Posted by 구차니
Programming/C Win32 MFC2015. 10. 5. 16:01

잉여짓 하다가 발견


라즈베리 파이에서는 int형의 최대값 같은데..

./stdlib.h:129:#define  RAND_MAX        2147483647


시스템이나 라이브러리에 따라 32767 까지만 되는 것도 있다고 한다.

This value is library-dependent, but is guaranteed to be at least 32767 on any standard library implementation.

[링크 : http://www.cplusplus.com/reference/cstdlib/RAND_MAX/]

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

#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
Posted by 구차니
Programming/C Win32 MFC2015. 9. 30. 15:00

그냥 콘솔창에서도 사용이 가능해 보이니 돌려볼까..


[링크 : http://linuxpoison.blogspot.kr/2010/06/cppcheck-tool-for-static-c-c-code.html]

[링크 : http://cppcheck.sourceforge.net/]

[링크 : http://cppcheck.sourceforge.net/demo/]


우분투에서는 cppcheck 라는 이름으로 있군..

[링크 : http://packages.ubuntu.com/precise/devel/cppcheck]


$ sudo apt-get install cppcheck

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following extra packages will be installed:

  libtinyxml2.6.2

The following NEW packages will be installed:

  cppcheck libtinyxml2.6.2

0 upgraded, 2 newly installed, 0 to remove and 81 not upgraded.

Need to get 604 kB of archives.

After this operation, 1,466 kB of additional disk space will be used.

Do you want to continue [Y/n]?

Get:1 http://archive.ubuntu.com/ubuntu/ precise/universe libtinyxml2.6.2 amd64 2                                      .6.2-1build1 [35.3 kB]

Get:2 http://archive.ubuntu.com/ubuntu/ precise/universe cppcheck amd64 1.52-1 [                                      569 kB]

Fetched 604 kB in 2s (225 kB/s)

Selecting previously unselected package libtinyxml2.6.2.

(Reading database ... 213921 files and directories currently installed.)

Unpacking libtinyxml2.6.2 (from .../libtinyxml2.6.2_2.6.2-1build1_amd64.deb) ...

Selecting previously unselected package cppcheck.

Unpacking cppcheck (from .../cppcheck_1.52-1_amd64.deb) ...

Processing triggers for man-db ...

Setting up libtinyxml2.6.2 (2.6.2-1build1) ...

Setting up cppcheck (1.52-1) ...

Processing triggers for libc-bin ...

ldconfig deferred processing now taking place 


Example usage:

  # Recursively check the current folder. Print the progress on the screen and

    write errors to a file:

    cppcheck . 2> err.txt

  # Recursively check ../myproject/ and don't print progress:

    cppcheck --quiet ../myproject/

  # Check only files one.cpp and two.cpp and give all information there is:

    cppcheck -v -s one.cpp two.cpp

  # Check f.cpp and search include files from inc1/ and inc2/:

    cppcheck -I inc1/ -I inc2/ f.cpp


For more information:

    http://cppcheck.sf.net/manual.pdf


-s를 써보라고 예제가 써있어서 해봤더니 style 체크.. 하지만 deprecated라 경고가 뜬다.

    -s, --style          Deprecated, please use '--enable=style' instead

    -v, --verbose        Output more detailed error information.
    -j <jobs>            Start [jobs] threads to do the checking simultaneously.

의외로 경고 뿜뿜을 안해서 실망.. 복잡한 코드를 돌려봐야 하려나?

암튼. make 처럼 -j 옵션을 지원한다.

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

"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
Posted by 구차니
Programming/C Win32 MFC2015. 7. 14. 16:07



$ gcc -v

Using built-in specs.

COLLECT_GCC=gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper

Target: x86_64-linux-gnu

Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu

Thread model: posix

gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 


$ vi void.c

#include <stdio.h>


void main()

{

        void *fp;

        int a = 0;

        fp = &a;


        printf("sizeof(void) %d\n",sizeof(void));

        printf("fp %8X\n",fp);

        fp++;

        printf("fp %8X\n",fp);

} 

(남자니까) 경고따윈 무시한다!

$ gcc void.c

void.c: In function ‘main’:

void.c:9:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat]

void.c:10:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘void *’ [-Wformat]

void.c:12:2: warning: format ‘%X’ expects argument of type ‘unsigned int’, but argument 2 has type ‘void *’ [-Wformat]


어? 연산이 되네? ㄷㄷㄷ 일단은 byte로 간주..

어? 게다가.. 왜 void의 sizeof가 1?

$ ./a.out
sizeof(void) 1
fp E9F5689C
fp E9F5689D


+

6.23 Arithmetic on void- and Function-Pointers


In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.


A consequence of this is that sizeof is also allowed on void and on function types, and returns 1.


The option -Wpointer-arith requests a warning if these extensions are used.


[링크 : https://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html]


+

Compiler Error CS0242

The operation in question is undefined on void pointers

Incrementing a void pointer is not allowed. For more information, see Unsafe Code and Pointers (C# Programming Guide).

[링크 : https://msdn.microsoft.com/en-us/library/dhyat531(v=vs.90).aspx] 


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

rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
Posted by 구차니
Programming/C Win32 MFC2015. 7. 7. 13:45

현실적으로 불가능 -_-

다만 vsprintf 는 인자를 받으므로 인자를 이용해서 다시 문자열을 생성하는 식으로 쓸 수는 있음


[링크 : http://stackoverflow.com/questions/2060578/is-it-possible-to-write-a-varargs-function-that-sends-it-argument-list-to-anothe]


#include <stdio.h>

int printf(const char *format, ...);

int fprintf(FILE *stream, const char *format, ...);

int sprintf(char *str, const char *format, ...);

int snprintf(char *str, size_t size, const char *format, ...);


#include <stdarg.h>

int vprintf(const char *format, va_list ap);

int vfprintf(FILE *stream, const char *format, va_list ap);

int vsprintf(char *str, const char *format, va_list ap);

int vsnprintf(char *str, size_t size, const char *format, va_list ap);


[링크 : http://linux.die.net/man/3/vsprintf] 


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

Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
Posted by 구차니