반응형

C 59

C의 반환 값을 둘러싼 괄호

C의 반환 값을 둘러싼 괄호 ANSI C 코드에서는 단일 반환값을 둘러싼 괄호를 자주 볼 수 있습니다. 다음과 같이:- int foo(int x) { if (x) return (-1); else return (0); } 이러한 경우 반환값 주위에()을 사용하는 이유는 무엇입니까?좋은 생각 있어요?나는 그것에 대한 이유를 모르겠다.원래 C 사양에서는 반환값 주위에 괄호가 필요했습니다.최신 C 컴파일러 및 ANSI C 규격은 이러한 컴파일러를 필요로 하지 않지만 괄호가 있어도 반환값에 영향을 주지 않으며 프로그래머는 표준이 익숙하지 않거나 표준이 필요한 스타일 규칙과의 정합성이 유지되거나 하위 호환성을 위해 이러한 컴파일러를 포함할 수 있습니다. C++를 생각하고 있는 분들을 위해 덧붙입니다.이 질문은 C와..

source 2022.12.18

매크로에서 1과 0을 정의하기 위해 3진 연산자를 사용하는 이유는 무엇입니까?

매크로에서 1과 0을 정의하기 위해 3진 연산자를 사용하는 이유는 무엇입니까? 임베디드 프로젝트에 SDK를 사용하고 있습니다.이 소스코드에서 최소한 이상하다고 생각되는 코드를 찾았습니다.SDK의 많은 부분에는 다음과 같은 형식의 소스 코드가 있습니다. #define ATCI_IS_LOWER( alpha_char ) ( ( (alpha_char >= ATCI_char_a) && (alpha_char = ATCI_CHAR_A) && (alpha_char 0) 와 같은 #define BAR ( (1 > 0) ? 1 : 0) ? 평가하려고 했는데 printf("%d", FOO == BAR); 결과 1을 얻으면 같은 값인 것 같습니다.그들이 했던 것처럼 코드를 쓸 이유가 있나요?맞아요, C에서는 tautologo..

source 2022.12.18

나가는 것과 돌아오는 것의 차이는 무엇입니까?

나가는 것과 돌아오는 것의 차이는 무엇입니까? 이 질문에는 이미 답변이 있습니다. return 스테이트먼트 vs exit() in main() (8개의 답변) 닫힘5년 전에요. C 프로그램의 어느 곳에서 호출되었을 때 C 프로그래밍에서 return 문과 exit 문 사이의 차이점은 무엇입니까? 현재 함수에서 반환됩니다.이것은 언어 키워드입니다.for또는break. exit()는 프로그램 전체를 종료합니다(stdio 버퍼 플러시 후 등). 양쪽이 (거의) 같은 일을 하는 유일한 경우는main()메인으로부터의 복귀가, 기능으로서exit(). 대부분의 C 실장에서는main기동 코드에 의해서 호출되는 실제의 함수입니다.int ret = main(argc, argv); exit(ret);C 표준은 다음과 같은 일..

source 2022.12.08

C 구조의 메모리 얼라인

C 구조의 메모리 얼라인 32비트 머신을 사용하고 있기 때문에 메모리 얼라인먼트는 4바이트가 될 것입니다.예를 들어 다음과 같은 구조를 가지고 있습니다. typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; } myStruct; 플레인 추가 사이즈는 6바이트이고 정렬 사이즈는 8바이트라고 생각합니다만,sizeof(myStruct)6이 반환됩니다. 하지만 내가 쓴다면: typedef struct { unsigned short v1; unsigned short v2; unsigned short v3; int i; } myStruct; 플레인 덧셈 사이즈는 10바이트, 정렬 사이즈는 12바이트, 그리고 이번에는sizeof(myStr..

source 2022.11.19

어레이 인덱스가 바인딩되지 않은 동작

어레이 인덱스가 바인딩되지 않은 동작 어레이 인덱스가 경계를 벗어나는 경우 C/C++가 구별되는 이유 #include int main() { int a[10]; a[3]=4; a[11]=3;//does not give segmentation fault a[25]=4;//does not give segmentation fault a[20000]=3; //gives segmentation fault return 0; } 프로세스 또는 스레드에 할당된 메모리에 액세스하려고 하는 것을 알고 있습니다.a[11]또는a[25]스택 경계에서 벗어나고 있습니다.a[20000]. 컴파일러 또는 링커가 어레이 크기를 인식하지 못하는 이유는 무엇입니까?그렇지 않으면 어떻게 해야 합니까?sizeof(a)올바르게 동작합니까?문제..

source 2022.10.30

대규모 어레이를 선언할 때 스택 오버플로 예외가 발생하는 중

대규모 어레이를 선언할 때 스택 오버플로 예외가 발생하는 중 다음 코드가 스택 오버플로 오류를 생성하고 있습니다. int main(int argc, char* argv[]) { int sieve[2000000]; return 0; } 이걸 어떻게 극복하지?Turbo C++를 사용하지만 코드를 C로 유지하고 싶습니다. 편집: 조언해 주셔서 고마워요.위의 코드는 예를 들어 서브메인이 아닌 함수에서 어레이를 선언하는 것에 불과합니다.또한 어레이를 0으로 초기화해야 했기 때문에 malloc을 검색해보니 calloc이 제 목적에 딱 맞는다는 것을 알게 되었습니다. 또한 Malloc/calloc은 변수를 사용하여 크기를 선언할 수 있는 스택에 할당하는 것보다 장점이 있습니다.어레이가 너무 커서 스택에 넣을 수 없습..

source 2022.10.20

정규화된 UTF-8이란 무엇입니까?

정규화된 UTF-8이란 무엇입니까? ICU 프로젝트(현재 PHP 라이브러리도 있음)에는 UTF-8 문자열을 정규화하는 데 필요한 클래스가 포함되어 있어 검색 시 값을 쉽게 비교할 수 있습니다. 하지만, 저는 이것이 어플리케이션에 어떤 의미인지 알아내려고 합니다.예를 들어 "호환성 등가성" 또는 "비교적 등가성" 대신 "표준 등가성"을 원하는 경우는 무엇입니까?Unicode 정규화에 대해 알고 싶지 않은 모든 것 표준 정규화 유니코드에는 일부 문자(특히 악센트 문자)를 인코딩하는 여러 방법이 있습니다.표준 정규화는 코드 포인트를 표준 인코딩 형식으로 변경합니다.생성된 코드 포인트는 글꼴 또는 렌더링 엔진의 버그를 제외하고 원래 코드 포인트와 동일하게 표시됩니다. 사용 시기 결과는 동일하기 때문에 입력과 동..

source 2022.10.02

C/C++의 작은따옴표, 큰따옴표 및 크기('a')

C/C++의 작은따옴표, 큰따옴표 및 크기('a') 나는 C 또는 C++에서 작은따옴표 대 큰따옴표 대 큰따옴표를 보고 있었다.설명을 완전히 이해할 수 없어서 프로그램을 만들었습니다. #include int main() { char ch = 'a'; printf("sizeof(ch) :%d\n", sizeof(ch)); printf("sizeof(\'a\') :%d\n", sizeof('a')); printf("sizeof(\"a\") :%d\n", sizeof("a")); printf("sizeof(char) :%d\n", sizeof(char)); printf("sizeof(int) :%d\n", sizeof(int)); return 0; } gcc와 g++를 모두 사용하여 컴파일했습니다.다음 출력은..

source 2022.09.15

'do'가 필요할 때가 있나요?}, ( )" 루프 중?

'도(do)'가 필요할 때가 있나요?}, ( )" 루프 중? Bjarne Strostrup(C++ 크리에이터)은 "do/while" 루프를 피하고 대신 "while" 루프의 관점에서 코드를 쓰는 것을 선호한다고 말한 적이 있다.[아래 인용문 참조] 이 말을 듣고 나는 이것이 사실이라는 것을 알았다.어떻게 생각하세요?대신 "while"을 사용하는 경우보다 "do/while"이 훨씬 깨끗하고 이해하기 쉬운 예가 있습니까? 몇 가지 답변에 대해: 예, "do/while"과 "while"의 기술적 차이를 이해합니다.이것은 루프를 수반하는 가독성과 코드 구조에 관한 보다 깊은 질문입니다. 다른 방법으로 묻겠습니다: "do/while"을 사용하는 것이 금지되었다고 가정해 보겠습니다. "while"을 사용하여 부정한..

source 2022.09.13
반응형