C에서 true와 false 사용
내가 볼 수 있는 한 c에서 부란을 사용하는 방법은 세 가지가 있다.
- 불 타입으로, 그때부터 진실과 거짓을 사용했다.
- , preprocessor를 사용한 정의, "Preprocessor"의
#define FALSE 0 ... #define TRUE !(FALSE) - 상수를 직접 사용하는 것(예: 1과 0)
제가 놓친 다른 방법이 있나요?다양한 방법의 장점과 단점은 무엇입니까?
가장 빠른 것은 숫자 3이 될 것이고, 2는 여전히 읽기 쉬울 것입니다(비트를 부정하면 오버헤드가 약간 증가하지만), 1은 모든 컴파일러와 호환되지는 않습니다.
포함시키기만 하면 됩니다.<stdbool.h>를 참조해 주세요.음음음수수수수수수수 that that that that that that 。bool,false , , , , 입니다.true(defined to))_Bool 0 0 1 1).C99의 7.16에 대해 설명하겠습니다.
코드에 직접 0 또는 1을 사용합니다.
C 프로그래머에게 이것은 참 또는 거짓만큼 직관적입니다.
저는 보통 다음을 합니다.
typedef enum {FALSE = 0, TRUE} boolean;
3가지 중 어느 쪽을 선택해도 변수를 FALSE 또는 FALSE와 비교합니다.
지금까지 c 또는 c++의 true (1)과 비교하는 것은 좋지 않습니다.false만이 제로(0)로 보증됩니다.true는 다른 값입니다.많은 컴파일러 벤더의 헤더에는 이러한 정의가 있습니다.
#define TRUE 1
#define FALSE 0
이 때문에 너무 많은 사람들이 정원의 길을 걷게 되었다. 외에도 많은 .chartype이 을 반환하다1가 많이 합니다.동일한 동작을 가진 수많은 레거시 코드가 존재합니다.
0 이외의 int는 true이고 false는 0입니다.이와 같은 코드는 예상대로 계속 작동합니다.
int done = 0; // `int` could be `bool` just as well
while (!done)
{
// ...
done = OS_SUCCESS_CODE == some_system_call ();
}
IMO,bool과대평가된 유형입니다. 아마 다른 언어에서 가져온 것일 수도 있습니다. int부울 타입으로 동작합니다.
stdbool.h 정의 bool 타입에서는 bool 타입을 지원하는 새로운 컴파일러에서 오래된 컴파일러로 코드를 이동해야 할 때 문제가 발생합니다.이 문제는 내장된 프로그래밍 환경에서 이전 버전의 사양을 기반으로 C 컴파일러를 사용하여 새로운 아키텍처로 이동할 때 발생할 수 있습니다.
요약하자면, 휴대성이 중요한 경우 매크로를 계속 사용합니다.그렇지 않으면 다른 사람이 권장하는 대로 하고 bulit을 활자로 사용합니다.
코드를 읽기 쉽게 하기 때문에 #define을 사용했으며, 숫자(0,1)를 사용하는 것에 비해 성능 저하가 없어야 합니다.또한 프리프로세서가 #define을 컴파일 전에 숫자로 변환합니다.애플리케이션이 실행되면 코드가 이미 컴파일되어 있기 때문에 프리프로세서가 다시 작동하지 않습니다.
단, 다음과 같이 해야 합니다.
#define FALSE 0
#define TRUE 1
-1, -2, ...2, 3 등이 모두 참으로 평가된다는 것을 기억하십시오.
당신의 구체적인 상황은 모릅니다.제가 C 프로그램을 쓸 때는 항상 2번을 사용했어요.
#define FALSE = 0
#define TRUE = !FALSE
그렇지 않으면 DOS 또는 인텔 기반 프로세서에 대한 외부 플랫폼 아래에 있을 수 있습니다.하지만 저는 그래픽 라이브러리와 그래픽 IDE를 작성하면서 C와 ASM을 함께 사용하곤 했습니다.저는 Micheal Abrash의 열렬한 팬이었고 텍스처 맵핑 등에 대해 배우려고 했습니다.아무튼!그건 질문의 주제가 아니에요!
이 헤더 파일 stdbool.h는 존재하지 않았기 때문에 이것은 C에서 부울 값을 정의하기 위해 가장 일반적으로 사용되는 형식입니다.
bool이 c99 stdbool.h에 정의되어 있는지 여부를 테스트하려면
#ifndef __bool_true_false_are_defined || __bool_true_false_are_defined == 0
//typedef or define here
#endif
세 번째 솔루션, 즉 1과 0을 사용하는 것이 좋습니다.조건이 참인지 거짓인지를 테스트해야 할 때 특히 유용하기 때문입니다.if 인수에 변수를 사용할 수 있습니다.
다른 방법을 사용하는 경우는, 코드의 나머지 부분과 일관성을 유지하기 위해서, 다음과 같은 테스트를 사용하는 것이 좋다고 생각합니다.
if (variable == TRUE)
{
...
}
다음 대신:
if (variable)
{
...
}
저는 1번으로 하겠습니다.나는 그것과의 비호환성을 만나본 적이 없다.하지만 C standard가 아닌 C++의 일부라고 생각합니다.정의 또는 세 번째 옵션을 사용한 지저분한 해킹은 성능을 얻을 수 없지만 코드를 유지하는 데 어려움이 있을 뿐입니다.
변수를 정의할 때는 (1)을 선호하지만 식에서는 true와 false를 비교하지 않고 if(flag), if(!flag), if(ptr)의 암묵적인 C 정의를 취합니다.그것이 일을 하는 C의 방법이다.
실제 속도 차이는 없습니다.컴파일러에게는 모두 같은 것입니다.차이점은 사람들이 당신의 코드를 사용하고 읽으려고 하는 것입니다.
나는 C++ 코드에서 bool, true, false를 선택하는 것이 최선이다.C 코드에는 Bool을 지원하지 않는 컴파일러가 몇 개 있기 때문에(이전 시스템으로 작업해야 하는 경우가 많기 때문에) 상황에 따라서는 정의를 사용할 수도 있습니다.
1은 모든 컴파일러와 호환성이 있는 것은 아닙니다.
ISO C 컴파일러에는 다음과 같은 기본 제공 유형이 없습니다.boolISO C99 컴파일러의 타입은 다음과 같습니다._Bool, 및 typedef의 헤더bool호환성은 컴파일러가 C99에 준거하지 않은 경우(VC++ 등) 자체 헤더를 제공하는 경우입니다.
물론 더 간단한 방법은 C 코드를 C++로 컴파일하는 것입니다.
사용하는 것을 선호합니다.
#define FALSE (0!=0)
#define TRUE (0==0)
또는 코드에 직접 입력됩니다.
if (flag == (0==0)) { ... }
그것은 컴파일러가 처리하겠습니다.저는 언어를 많이 사용하고 FALSE가 0이라는 것을 기억해야 하기 때문에 매우 신경이 쓰입니다만, 만약 필요하다면, 보통은 스트링 루프를 생각하고 있습니다.
do { ... } while (*ptr);
FALSE가 0인 것을 알 수 있습니다.
언급URL : https://stackoverflow.com/questions/2254075/using-true-and-false-in-c
'programing' 카테고리의 다른 글
| C에서 nanosleep()을 사용하는 방법'tim.tv_sec'과 'tim.tv_nsec'이 뭐죠? (0) | 2022.08.17 |
|---|---|
| 문자열을 한 줄씩 읽다 (0) | 2022.08.17 |
| Vuex에 디스패치된 작업 후 컴포넌트에 데이터를 전달하는 방법 (0) | 2022.08.17 |
| 어떻게 C의 printf의%(%)표시에서 벗어나려는 (0) | 2022.08.17 |
| 포인터를 거부하는 배열 크기 매크로 (0) | 2022.08.17 |