ESP32 softAP SSID가 const가 아닙니다.
setup ()에서 wifi SSID를 설정할 수 있기를 원하므로 MAC 주소 또는 이와 유사한 것을 기반으로 사용자 정의 할 수 있습니다. (같은 SSID를 가진 동일한 코드를 사용하는 ESP를 피합니다). 그러나 const가 필요하기 때문에 불가능한 것 같거나 뭔가 빠졌습니까?
중요한 경우 platformIO를 사용하고 있습니다.
답변
const함수에 대한 매개 변수는 전달할 수있는 것을 정의하지 않습니다. 대신 전달하는 데이터를 수정하지 않을 것이라는 함수의 "약속"입니다.
C에서 "문자열"(실제로 문자 배열)을 함수에 전달할 때 실제로 문자열을 전달하지 않습니다 (내용에서와 같이). 실제로 문자열이 저장된 메모리의 위치에 대한 포인터를 전달합니다.
함수가 전달 된 "문자열"을 수정하여 메모리의 원래 데이터를 수정하는 것이 완벽하게 가능합니다. 그것은 많은 상황에서 실제로 바람직하지 않습니다.
따라서 const컴파일러에게 "이 순간부터이 변수가 가리키는 데이터는 변경되지 않아야합니다"라고 말하면서 매개 변수에 플래그를 지정합니다 . 해당 변수를 사용하여 메모리에 쓰려는 모든 시도는 컴파일러에 의해 차단됩니다.
예를 들어 a char *와 a 사이 const char *에는 컴파일러가 쓰기 시도를 처리하는 방법 외에는 실제적인 차이가 없습니다 .
를 char *예상하는 함수에 전달 const char *하면 포인터가 상수로 "업그레이드"되어 데이터를 변경하려는 시도가 허용되지 않습니다.
그러나 그 반대는 허용되지 않습니다 . 일부 시스템 (단일 모 놀리 식 메모리 주소 공간이있는 "Princeton"아키텍처 시스템) const char *에서 a를 char *as 로 변환 할 수 없습니다 (또는 변환해서는 안됩니다 ). 포인터가 저장된 데이터를 가리킬 수 있습니다. 플래시, 쓰기 시도는 분명히 실패합니다.
SSID를 설정하기 위해 호출하는 함수는 전달하는 데이터를 변경하지 않을 것이라고 약속하는 것입니다. 상수인지 여부는 중요하지 않습니다. 둘 다 상수로 처리되고 변경되지 않습니다.
라이브러리 WifiManager 는 당신을 위해 작동 할 수 있으며, 그것은 당신의 와이파이 연결을 즉시 구성 할 수있는 캡 티브 포털을 가지고 있습니다. 내가 착각하지 않았다면 당신의 의지에 맞게 구성 할 수있는 몇 가지 구성 옵션이 있습니다.