일단 첫번째 프로젝트가,
const 를 죄다 넣고 시작하기 프로젝트야.
근데 이럴 경우에 문제가 하나 발생해.
우리 보통
C 스타일을 쓴다고 그러면,
앞부분에서 변수를 쭈루룩 선언해주잖아??
개인적으로 나도 그게 정말 마음에 들어.
무엇이 가장 마음에 드냐하면, 역시나
함수에 처음 들어갔을때
input이 무엇이냐
output이 무엇이냐
내부에서 활용하는 데이터는 무엇이냐.
이런식으로 공간에 대한 정의를 쭈루룩 하고 간다는게 마음에 들어.
근데, "해당 변수는 초기화 이후에 변경하지 않습니다" 라는것을 일러주기 위해서
const를 전부 붙이는 경우를 생각해봤단말야.
일단 러스트와 다르게
C는
const int a;
해놓고
나중에
a = b;
하고선, "이 부분에서 초기화를 진행하였습니다"
가 안되잖아?
const a = 상수;
로 주로 쓴다고 알고있었지.
여기서 상수를 쓰는 이유는 하드웨어적인 이유는 아니야.
static 이랑 다르게
const 는 말그대로 컴파일러 단계에서만 존재하는 에러검출기거든.
막 read_only data 세그먼트에 프로그램 시작전부터 하드코딩하기 위한 그런게 아니란 뜻임 ㅇㅇㅇ.
여하튼, 아 시발 const 이거 병신인가??
이런 생각을 하던 찰나,
이거 설마???
하면서
int b;
const int a = b;
b = 100;
해봤다??
될리가 없지 하고 들갔는데, 씨발 컴파일이 되네??
컴파일이 되는 순간부터 이거 좀 이상해서
int b;
b = 100;
const int a = b;
하니까 진짜로 a가 100으로 선언이 되더라???
씨발 근데 이런식으로 코드 짜도 되냐???
일단 리누스형님은 이렇게 코딩 안하는거같은데
나 이런식으로 코딩했다가 형님한테 꿀밤맞는거아녀??? 너무 독단적인거같은데
그게 왜 안됨? 타입이 달라서? 둘다 const 박아버리면 되는거 아닌가 나도 초보라 말을 못 하겠네
근데 c++만 하더라도, 상황에 따라 const input이면 const output필요한 코드도 있음 Class bool operator가 그 예시
글고, const input output만들고 싶으면 님이 함수 만들면되는데, 머가 문제임? Byte축소도 아니고 오류날것 같지도 않은데
Class안에서 코딩하면 잘 될것같은데 별개로 함수엣니const로 반환하면 복사본이라 타입이 다를 수도 있겠네 const포인터로 반환하면 될라나?
일단 생각해보는 중이야. 내가 입을 나불거리면서 생각하는 편이라 좀 시끄럽거나 막말해버려도 용서해줘 ㅠㅠ
나도 지금 그런 고민들을 하는 중이야.
const는 한번 데이터가 들어가면 그 다음은 변경이 안되는 거....뭐가 문제야
문제 없어. 그냥 문법상으로 앞부분에서 const로 선언한 후에, 뒷부분에서 초기화를 못한다는거땜에 코딩스타일이 깨진다는게 문제야 이거 그냥 스타일의 문제야
나는 고수님들한테, C는 변수선언 앞부분에서 싹 다 하고 간다라고 배웠거든. 리누스 이형님은 for문에 한번 쓰이는 변수 i 조차 앞부분에서 선언하고가시더라
나는 const를 남발하고자 하면, 그 스타일을 깨야돼
변수 선언을 싹다하고 가면 좋지만 코드 사이즈가 커지면 솔직히 힘들어....그때는 하기 싫어도 어쩔수 없어
ㅇㅎ 애초에 해당 스타일은 완벽하게 지키는게 불가능했구나?? 리누스형님도 반복문을 여러번 사용하는 경우에는, 결국에 int i 를 포문 안에서 선언하시긴 하더라. C는 그러면 스타일이 자유로운 편이야? 예를들면 나는 * 어디에다 붙이는지에 대한 논의도 오간다고 알고있음 그리고 지금 const int* const 를 다루려다보니까, 갑자기 "선언문에 대해서는 타입옆에다가 별표붙이자" 를 택하고싶거든?
요즘에는 for(int i=1;;)이게 표준임 별개로 i 반복문이 많으면 밖에서 선언하는 것이 좋고, 한 두개면 안이 더 빠르다고 글을 본적이 있는데 요즘은 어떤지 모르겠네
나 좀 많이 엇나가는거 아닌가 싶어서 걱정되는데, 이래도 돼?? 리누스 형님은 아예 한술 더 떠서 int * ptr 이런식으로 별표를 어디에도 붙이질 않더라
그거는 회사에 따라서 틀려 딱 붙이는 경우도 있고 아닌 경우도 있고 그건 사람에 따라서 따라감...
오호... 그렇군. 근데 코딩스타일에 따른 성능차이는 컴파일러에대한 이해까지 필요해서 ㅠㅠ 너무 복잡하다. 그거는 일단은 패스하고 생각할래.
나 같은 경우 사수가 붙이라고 하면 붙이고 붙이지 말라고 하면 붙이지 않았어
근데 내 경험으로 보면 보통 붙이는걸 좋아하더라
그냥 단순히 성능문제에 대해 얘기한 거임 자세한 내용은 어셈을 봐야 아는데 아직 공부를 안해서 모르겠네 일단 회사에서 하라는 대로 해야겠지
근데 때로는 일단 회사의 규칙을 보면서, 좋은점을 그대로 받아들이다가, 문제가 보이면 그때가서 고민하는 그런 방법이 확실히 실력이 빨리 늘긴 늘겠다 ㅠㅠㅠ
일단은 그 방식으로 일을하고 생산물을 내고계시다는거니까, 일단 믿고 따라가볼수 있다는게 선배가 있다는것의 좋은점인거같아