[C/C++] 잡기술
2022. 7. 7. 16:41
C++
이곳저곳에서 남의 코드 구경하다 발견한 잡기술들이다. C/C++가 아닌 다른 언어들에서도 응용할 수 있는 것들이 많이 있다. 이런 잡기술들이 가독성을 안 좋게 만드는 것도 있지만 더 좋을 때도 있다고 생각한다. 상황에 따라 잘 사용하면 될 것 같다. 잡기술들을 발견하면 하나씩 추가할 예정이다. (최종 수정 2022/07/07) char을 if문으로 여러 개 걸어야 할 때 if (c == 'A' || c == 'B' || c == 'C' || c == 'D') 위와 같은 코드를 아래와 같이 줄일 수 있다 if (strchr("ABCD", c)) 나눗셈 올림 std::ceil(x / n) 위의 함수는 리턴 값이 실수이다. 1. x / n + !!(x % n) 2. (x + n - 1) / n 위의 두 방법으..
[C/C++] Sequencing (Sequence Point)
2022. 5. 1. 19:16
C++
Sequencing / Sequence Point란? c++11부터 Sequence Point가 Sequencing으로 말이 바뀌었다고 한다. 이 글에선 sequence point란 말을 쓰겠다. 모든 연산의 결과가 완료되는 시점 쉽게 말하면, 한 시퀀스 포인트에서 다음 시퀀스 포인트로 가기 전에 이전의 모든 연산이 완료된다는 의미다. Sequence Point 1. ; (세미콜론) 2. ||, &&, ? : 와 같은 논리 연산 예를 들어, a || b에서 b가 되기 전에 a의 연산이 모두 완료된다. (a) ? (b) : 는 ?가 sequence point로 무조건 a가 먼저 완료된다. 3. , (쉼표) a = f1(), b = f2()와 같이 , 로 연결된 표현 4. 함수의 리턴 함수가 return..
[C/C++] printf에 float만을 위한 변환 명세가 없는 이유
2022. 4. 28. 01:41
C++
printf("%f", 1.0f)와 같이 printf에 float형을 넘겨줘도 절대 printf 함수에 float형을 넘겨줄 수 없다는 재밌는 사실을 알게 됐다. double lf = 1.0; printf("%lf\n", lf); // double lf 사용 printf("%f\n", lf); // double에 f도 가능 위와 같이 double을 출력할 땐 %lf와 %f 둘 다 사용할 수 있는데 이건 C99에 생긴 기능으로 scanf에서 double형을 %lf로 받기 때문에 편의성?을 위해 생긴 기능이라고 한다. 종종 float은 %f, double은 %lf로 출력해야 한다는 사람들이 있는데 이건 완전한 오개념이다. 아래 사진을 봐도 f는 명확히 double을 위한 변환 명세다. 그런데 float형을 ..