sourcecode

{0}, {0,}을(를) 사용하여 어레이를 초기화하시겠습니까?

codebag 2023. 8. 11. 21:46
반응형

{0}, {0,}을(를) 사용하여 어레이를 초기화하시겠습니까?

어레이를 초기화하고 싶다고 말합니다.

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

그들은 모두 같습니까, 아니면 다른 것보다 선호되는 것입니까?

감사해요.

사실 C++에서는 개인적으로 다음을 추천합니다.

char myArray[MAX] = {};

그들은 모두 같은 일을 하지만, 저는 C++로 된 것이 더 좋습니다; 그것은 가장 간결합니다. (불행히도 이것은 C.에서는 유효하지 않습니다.)

그건 그렇고, 주의하세요.char myArray[MAX] = {1};모든 값이 1로 초기화되지는 않습니다!첫 번째 값만 1로 초기화하고 나머지 값은 0으로 초기화합니다.이 때문에, 저는 당신이 글을 쓰지 않는 것을 추천합니다.char myArray[MAX] = {0};올바르게 작동하지만 일부 사람들에게는 약간 오해를 불러일으킬 수 있기 때문입니다.

어레이가 다음으로 초기화될 경우 생성된 코드(최적화된 빌드에서는)와 동일합니다.{0}구문, 명시적으로 지정되지 않은 모든 값은 0으로 암시적으로 초기화되며 컴파일러는 호출을 삽입할 수 있을 정도로 충분히 알 수 있습니다.memset.

따라서 유일한 차이점은 스타일입니다.선택은 사용하는 코딩 표준 또는 사용자의 개인적인 선호에 따라 달라집니다.

저는 첫 번째 해결책이 가장 좋다고 생각합니다.

char myArray[MAX] = {0};  //best of all

둘 중 하나를 사용할 수 있습니다.

하지만 저는 아래의 것들이 더 이해가 되고 읽을 수 있다고 느낍니다.

  char myArray[MAX]; 
  memset(myArray, 0, MAX);

항상 0으로 초기화하려고 한다고 가정합니다.

--> 당신의 첫 번째 방법과 두 번째 방법은 같습니다.저는 1등이 더 좋습니다.

--> 세 번째 방법memset()초기화 이외의 0을 할당하려는 경우 사용해야 합니다.

--> 이 배열이 한 번만 초기화될 것으로 예상되는 경우, 다음과 같이 입력할 수 있습니다.static컴파일러가 작업을 수행할 수 있도록(런타임 오버헤드 없음) 앞에 키워드를 지정합니다.

bzero fn(0값 바이트 쓰기)도 사용할 수 있습니다.

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero

언급URL : https://stackoverflow.com/questions/5591492/array-initialization-with-0-0

반응형