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

  1. 2016.04.04 윈도우에서 dll 동적 라이브러리 사용하기
  2. 2016.03.18 가변 매크로 __VA_ARGS__
  3. 2015.12.21 #import ?
  4. 2015.10.12 "\n" 의 cpu 점유율?
  5. 2015.10.05 rand()와 RAND_MAX
  6. 2015.09.30 Cppcheck
  7. 2015.07.14 void형 포인터 ++
  8. 2015.07.07 가변인자를 다시 넘겨주기 (2)
  9. 2015.06.18 printf 가변인자의 비밀?
  10. 2015.05.19 gcc 컴파일러 -D 옵션

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


    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
윈도우에서 dll 동적 라이브러리 사용하기  (0) 2016.04.04
가변 매크로 __VA_ARGS__  (0) 2016.03.18
#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
Posted by 구차니

댓글을 달아 주세요



[링크 : 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
가변 매크로 __VA_ARGS__  (0) 2016.03.18
#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
Posted by 구차니

댓글을 달아 주세요

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



$ 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
#import ?  (0) 2015.12.21
"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
Posted by 구차니

댓글을 달아 주세요

소스상으로는 "%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
"\n" 의 cpu 점유율?  (0) 2015.10.12
rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
Posted by 구차니

댓글을 달아 주세요

잉여짓 하다가 발견


라즈베리 파이에서는 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
rand()와 RAND_MAX  (0) 2015.10.05
Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
Posted by 구차니

댓글을 달아 주세요

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


[링크 : 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
Cppcheck  (0) 2015.09.30
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
Posted by 구차니

댓글을 달아 주세요



$ 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
void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
Posted by 구차니

댓글을 달아 주세요

현실적으로 불가능 -_-

다만 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
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
Posted by 구차니

댓글을 달아 주세요

  1. 가변인자를 받아서 다시 넘기는게 가능할겁니다.
    printf를 구현하기 위해서 가변인자를 받아서 처리한 기억이 있어요.

    2015.07.10 15:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 가변인자 "리스트"를 인자로 받는 녀석이 있더라구요 ㅎㅎ
      이런 특수한 녀석이 아니면 프로토타입을 ... 으로 쓰는 식으로는 못넘긴다는 거죠 ㅠㅠ

      잘지내고 계시죠?

      2015.07.11 21:41 신고 [ ADDR : EDIT/ DEL ]

느낌적인 느낌으로는 가변인자는 가장 큰 변수형인 void 형을 취할테니..

printf 함수에서 %f를 double로 처리하면서 float에서는 오류가 발생하는 느낌?


아무튼.. 먼가 미묘한 작동을 하네..


[링크 : http://stackoverflow.com/questions/7295066/using-printf-to-print-out-floating-values]

[링크 : http://todayhumor.com/?programmer_11386]

신고

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

void형 포인터 ++  (0) 2015.07.14
가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
Posted by 구차니

댓글을 달아 주세요

배치빌드 하거나 할 경우 유용하게 쓰이는 옵션


-D name

Predefine name as a macro, with definition 1. 


-D name=definition

The contents of definition are tokenized and processed as if they appeared during translation phase three in a ‘#define’ directive. In particular, the definition will be truncated by embedded newline characters.

If you are invoking the preprocessor from a shell or shell-like program you may need to use the shell's quoting syntax to protect characters such as spaces that have a meaning in the shell syntax.


If you wish to define a function-like macro on the command line, write its argument list with surrounding parentheses before the equals sign (if any). Parentheses are meaningful to most shells, so you will need to quote the option. With sh and csh, -D'name(args...)=definition' works.


-D and -U options are processed in the order they are given on the command line. All -imacros file and -include file options are processed after all -D and -U options. 


-U name

Cancel any previous definition of name, either built in or provided with a -D option. 


-undef

Do not predefine any system-specific or GCC-specific macros. The standard predefined macros remain defined. 


[링크 : https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html] 


+

Visual studio에서는 /D로 적용된다.

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

신고

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

가변인자를 다시 넘겨주기  (2) 2015.07.07
printf 가변인자의 비밀?  (0) 2015.06.18
gcc 컴파일러 -D 옵션  (0) 2015.05.19
setjmp, longjmp  (0) 2015.05.19
inline 함수..  (0) 2015.05.12
혼돈의 카오스 - 교차참조 헤더  (0) 2015.05.11
Posted by 구차니

댓글을 달아 주세요