Witam,
Chcę napisać własną implementację funkcji strstr. Chcę zachować takie same typy argumenów i wartości zwracanej. Jak dotąd utknąłem na samym początku, z prostej przyczyny.
char *strstr(const char *s1, const char *s2) {
if (!*s2) {
return s1;
}
}
Koduję w Clion i od razy krzyczy mi, że robię źle, gdyż argument jest stałą, a ja zwracam wskażnik do niego, co łamie zasadę "stałości". Oczywiście mogę to rzutować:
char *strstr(const char *s1, const char *s2) {
if (!*s2) {
return (char *) s1;
}
}
I teraz pytanie. Co jest lepsze z punktu widzenia dobrych praktyk, co jest bardziej "profesjonalne" i milej widziane. Nie wiem do końca, czy rozumieć, że const jest tylko w obrębie funkcji, a co potem zrobię poza funkcją to moja sprawa, czy słowo kluczowe const przy argumencie zobowiązuje mnie także do pewnych przedsięwzięć poza nią. Oczywiście oba sposoby działają (u mnie ;)). Może jest to zależne od kompilatora?