test.c: In function `do_change':
test.c:6: warning: passing arg 1 of `strcpy' discards qualifiers from pointer target type
test.c:7: warning: return discards qualifiers from pointer target type
위의 예제와 같이
const를 붙이면 함수내에서 포인터에 대한 조작이 불가능하게되므로
컴파일시 에러가 납니다. (gcc 에서 테스트)
test.c: In function `do_change':
test.c:6: warning: passing arg 1 of `strcpy' discards qualifiers from pointer target type
test.c:7: warning: return discards qualifiers from pointer target type
위의 예제와 같이
const를 붙이면 함수내에서 포인터에 대한 조작이 불가능하게되므로
컴파일시 에러가 납니다. (gcc 에서 테스트)
이것은 포인터에 대한 조작이 불가능하게 되어 나는 에러가 아니라 const char *로 받은 인수를 char * 타입으로 다른 함수에 넘겨주려할 때 발생하는 경고입니다. 즉 const라는 qualifier(수식어,한정어)가 떨어져 나갔다는 뜻이죠. 에러가 아니므로 -Werror를 켜지 않는한 컴파일은 계속 수행됩니다.
const
제가 알기로는
const 로 지정한 인자를
함수내에서 조작, 변형하려 하면 컴파일시 에러가 나는 걸로
알고 있습니다.
무엇이 더 필요하단 말인가...
테스트
결과
aaa
bbb
결과
컴파일시
test.c: In function `do_change':
test.c:6: warning: passing arg 1 of `strcpy' discards qualifiers from pointer target type
test.c:7: warning: return discards qualifiers from pointer target type
위의 예제와 같이
const를 붙이면 함수내에서 포인터에 대한 조작이 불가능하게되므로
컴파일시 에러가 납니다. (gcc 에서 테스트)
최적화에 const를 붙이는게 더 좋다고 하던데..
const로 하면 컴파일러가 더 최적화를 한다는것같던데요.
값이 바뀌지 않는다는 것을 가만해서 컴파일하니까요...
There is more than one way to do it...
Re: 테스트
이것은 포인터에 대한 조작이 불가능하게 되어 나는 에러가 아니라 const char *로 받은 인수를 char * 타입으로 다른 함수에 넘겨주려할 때 발생하는 경고입니다. 즉 const라는 qualifier(수식어,한정어)가 떨어져 나갔다는 뜻이죠. 에러가 아니므로 -Werror를 켜지 않는한 컴파일은 계속 수행됩니다.
함수내 변경이 되어서는 안되는 경우 const를 붙여서 상수로 만드는 것
함수내 변경이 되어서는 안되는 경우 const를 붙여서 상수로 만드는 것입니다.
포인터가 붙는경우, 안붙는경우, const의 위치에 따라서 다른 영향을 미치니 조심해서 사용하여야 합니다.
댓글 달기