"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 매크로가 코드를 끔찍하게 엉망으로 만들 수 있는 이유는 무엇입니까?

매크로가 코드를 끔찍하게 엉망으로 만들 수 있는 이유는 무엇입니까?

2024년 11월 11일에 게시됨
검색:229

Why Can Macros Turn Your Code into a Horrifying Mess?

전처리기의 함정: 매크로 남용에 대한 주의사항

프로그래밍 영역에서 매크로와 같은 전처리기는 기만적인 매력을 제공합니다. . 코드 최적화 및 단순화를 약속하지만 무분별하게 사용하면 재앙적인 결과를 초래할 수 있습니다. 이를 위해 우리는 지나친 사전 처리의 위험성을 잊혀지지 않게 상기시키는 실제 매크로 남용의 눈에 띄는 사례를 분석합니다.

과거 시대에 노련한 프로그래머는 최소화하는 임무에 착수했습니다. 어떤 비용을 치르더라도 코드 크기. 그는 자신의 어셈블리 언어 뿌리에서 영감을 얻어 독창적이지만 잘못된 전략을 고안했습니다. 그는 우연히 "획기적"을 발견했습니다. 그는 반환을 처리하는 매크로를 정의하여 함수에서 성가신 닫는 중괄호를 제거할 수 있었습니다.

아래에 영원히 남아 있는 그의 창작물은 그의 코딩 철학의 초석이 되었습니다.

#define RETURN(result) return (result);}

새로운 활력으로 그는 무모하게 이 매크로를 적용했습니다. 모든 함수는 복잡성에 관계없이 동일한 패턴을 지닙니다.

int myfunction1(args) {
    // Do something
    RETURN(x)
}

결과는 일관되지 않은 코드의 미로였으며, 이는 무제한적인 매크로 확장의 위험성에 대한 증거였습니다. 셀 수 없이 많은 여는 중괄호의 무게로 인해 구문 강조 표시가 구겨져 코드베이스가 엉망이 되었습니다.

미학적 악몽을 넘어 이 매크로에 감염된 코드베이스는 컴파일러 오류가 없다는 새로운 수준의 고통을 가져왔습니다. 전처리기의 적극적인 평가는 RETURN()의 모든 인스턴스를 불필요한 중괄호를 포함한 전체 선언으로 대체했습니다. 결과적으로, 컴파일러는 빈약한 구문상의 틈에 대해 행복하게 무지했습니다.

이 프로그래밍 어리석음의 진정한 정도는 용감한 관리자가 이 코드베이스의 깊이까지 모험을 감행했을 때에만 분명해졌습니다. 함수를 수정하거나 확장하려는 시도는 컴파일러가 누락된 중괄호를 인정하지 않았기 때문에 좌절감을 느꼈습니다. 문제의 원인은 전처리기의 속임수라는 망토로 가려져 숨겨져 있었습니다.

이 이야기는 매크로가 유용한 도구일 수 있지만 최대한 주의하여 사용해야 한다는 점을 경고하는 역할을 합니다. 다른 강력한 무기와 마찬가지로 무책임하게 다룰 경우 치명적일 수 있습니다. 매크로 남용의 함정을 이해함으로써 프로그래밍 악몽으로 이어지는 함정을 피할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3