매개 변수로 참조 또는 포인터를 사용하지 않는 함수가있는 경우 반환 유형은 사용되지 않고 관찰 할 수있는 호출을하지 않습니다 (I/O 호출, 시스템 시간 변경 , 등), 그것이 정의 된 클래스 만 수정하면됩니까? 나는이 규칙에 생각할 수컴파일러 또는 정의 된 동작에 대한 가능한 최적화
유일한 예외는 뭔가를 않습니다 :
void a(int b, int c){
*((int*)b) = c; }
int main() {
int d=1;
a((int)(&d),d+1);
return 0; }
는 보장이
을 정의하는 것입니다? 나는int*
과
int
이 같은 크기 일 필요는 없다는 것을 알고 있지만, 같은 크기로 정의 되었다면, 이것이 작동해야합니까, 아니면 여전히 정의되지 않은 동작입니까?
목표는 기능을 법적으로 최적화 할 수 있는지 확인하는 것입니다 (즉, 부작용이 없다는 것을 입증 할 수 있다면 제거 할 수 있음).
참조 : [위키 백과의 죽은 코드 제거] (http://en.wikipedia.org/wiki/Dead_code_elimination) 및 [그래서 죽은 코드] (http://stackoverflow.com/questions/4813947/how-can-i) 코드에서 절대 사용되지 않는 부분). –
@artlessnoise 이것은 http://stackoverflow.com/questions/15825188/removing-useless-lines-from-c-file과 같은 것입니다. 또한, 이것은 데드 코드가 아니며, 이것은 아무것도 수행하지 않는 라이브 코드입니다. – soandos
아니, 제 생각에는 (내가 틀렸다면 수정하십시오) 당신은 그것을 최적화 할 수 없습니다. b 및 c가 영향을받을 수있는 공유 포인터가있는 클래스의 인스턴스라고 생각하십시오. 범위를 벗어날 때 발생하는 소멸자의 요청에 대해서도 생각해보십시오. – rralf