Hello World 출력하는 함수를 만들고 싶은데
매개변수에 const 안붙여주면 오류 뜨던데 왜그러는고야??
void PrintString(char* message); <--- const char *" 형식의 인수가 "char *" 형식의 매개 변수와 호환되지 않습니다.
일케떠 ㅠㅠ
Hello World 출력하는 함수를 만들고 싶은데
매개변수에 const 안붙여주면 오류 뜨던데 왜그러는고야??
void PrintString(char* message); <--- const char *" 형식의 인수가 "char *" 형식의 매개 변수와 호환되지 않습니다.
일케떠 ㅠㅠ
문자형 리터럴은 const char[]이니까
왜요?
왜 const가 붙는데요
문자형이랜다 문자열 문자열 리터럴을 수정하려는 시도는 미정의 동작을 일으키기 때문 c에서야 문자열 리터럴이 char*이니까 오소독스 c++에서는 인정했지만 모던에서는 컴파일 에러 뜸
미정의 동작이 어떤거죠?
먼진 모르겠지만 아무튼 에러가 발생하고 그걸 컴파일러마다 처리할 수 있느냐 없느냐가 나뉜다고 이해하면되는건가요?
그럼 비쥬얼 스튜디오에서는 미정의 동작을 방지하기위해 'const를 붙여주라'고 에러를 발생시키는 것?
c 컴파일러 개발 당시에는 일반 char* 가 일으키는 미정의 동작을 알지 못했거나 고의로 무시한건가요?
미정의 동작 == Undefined Behaviour, 통칭 UB 컴파일러마다 다르다기보다 c++03 이전에는 비추천 기능이지만 어쨌든 char *에 대입하는걸 허용했는데 c++11이후로는 허용 안한다고 보면 됨 보통 c++11은 대부분 지키니까 그냥 char*은 안된다고 생각하고 애초에 c++이면 std::string 써
감사요
니가 넣어준게 Printstring("hello"); 이런거 겠지 리터럴이니까 const char*인거고 니가 작성한 함수의 매개변수를 그대로 쓰고 싶으면char형배열 char text[] ="hello"선언해서 printstring(text); 이렇게 넣어줘야지
아하 오호 이히 이해함 ㄱㄱㅅㄱㅅㄱㅅㄱㅅ