신기하지만 위험을 감수하며 쓸 필요없는 방법.


char (&ArrayReturnFunc(int AValue))[10]

{

static __thread char result[10];

memset(result, 0, 10);

std::snprintf(result, 10, "Test %d", AValue);

return result;

}


배열의 크기를 미리 define 하여 사용하는 것은 좀 너저분하다.


sizeof(array) / sizeof(array[0]) 을 이용하여도 되지만, 이것은 배열이 아닌 포인터에도 코드가 돌아가며 오동작을 할 수 있다.


다음은 template 을 이용하여 컴파일러가 컴파일 할 때

같은 개수의 char 배열을 반환하는 형태의 내용없는 함수를 만들어 (반환값이 중요한게 아니라 내용이 없어도 된다.)

sizeof 를 수행하는 방식으로 개수를 알아내는 코드이다.

포인터에 사용하면 컴파일 오류가 날 것이다.


template <typename T, size_t S>

char (&ArraySizeHelper(T (&)[S]))[S];

#define countof(A) (sizeof(ArraySizeHelper(A)))


1. 소문자로 변환

char cSample = 'C';

char cCalc = cSample | 32;


2. 대문자로 변환

char cSample = 'C';

char cCalc = cSample & ~32;


3. 대/소문자 상호변환

char cSample = 'C';

char cCalc = cSample ^ 32;


아래와 같은 이유로 대문자와 소문자의 차이는 세번째 비트에 있다.

세번째 비트의 설정을 바꾸어 변환한다.


'a': 0110 0001

 ~

'z': 0111 1010


'A': 0100 0001

 ~

'Z': 0101 1010

char cSample = '6';

int iSample = cSample & 15; // iSample 에 6 이 설정된다.


아래와 같은 이유로 하위 4비트만 취하면 숫자형 값이 된다.

'0': 0011 0000

'1': 0011 0001

'2': 0011 0010

'3': 0011 0011

'4': 0011 0100

'5': 0011 0101

'6': 0011 0110

'7': 0011 0111

'8': 0011 1000

'9': 0011 1001


'Windows > 스타일링' 카테고리의 다른 글

정적 배열 크기 구하기  (0) 2015.09.25
비트 연산으로 대문자, 소문자 변환  (0) 2012.04.17
1증가 또는 1감소 된 값 얻는 짧은 코드  (0) 2011.10.12
문자정수  (0) 2011.09.26
조건문 간략화  (0) 2011.09.26

int a = 0;
int b = -~a; // 1
int c = ~-a; // -1

a+1 또는 a-1 의 경우는 수식 내부에 쓸 경우 연산자 우선순위때문에 괄호를 붙여야 할 경우가 있는데, 이렇게 사용하면 괄호없이 사용이 가능하다.

문자 정수라는 것은 'a'처럼 작은따옴표로 둘러싼 1문자 이상의 문자열입니다. 문자 정수는 큰따옴표로 둘러싼 문자열 "a"와 의미가 다릅니다. 1문자 문자 정수는 문자 코드에 대응합니다. 예를 들어, ASCII 코드에 대응할 때는 'a'=97, '@'=64 로 정의되어 있습니다. 2문자 이상일 때는 개발 환경에 따라 독자적으로 정의되어 있습니다.

- 알고리즘 트레이닝으로 배우는 코드 단축기법 Short Coding P.99
char d[250000];
-->
char d['abc'];

크기가 정확하지 않아도 되는 경우에 사용하면 코드가 더 짧아질 수 있다.

if (conditon1)
    do_something1();

-->  condition1 && do_something1();


if (condition2 == 0)  // or if (!condition2)
    do_something2();

--> condition2 || do_something2();

+ Recent posts