Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ 라인 스플라이싱(Line Splicing) 완벽 이해하기

라인 스플라이싱이란?

이 글에서는 C와 C++에서의 라인 스플라이싱(line splicing)에 대해 알아보겠습니다. 프로그래밍을 하다 보면 더블 슬래시 "//"를 사용해 한 줄 주석을 작성하는 경우가 많습니다. 한 줄 주석은 기본적으로 해당 줄이 끝나면 함께 종료되기 때문에, 다음 줄의 코드에는 영향을 주지 않습니다.

그런데 만약 한 줄 주석 끝에 역슬래시(\)를 붙이면 어떻게 될까요? 역슬래시는 컴파일러에게 다음 줄과 현재 줄을 하나로 연결하라고 지시하는 역할을 합니다. 이를 라인 스플라이싱이라고 부릅니다. 따라서 역슬래시로 끝나는 주석 다음에 오는 코드 줄도 주석의 일부로 간주되어 무시되어 버립니다.

문제가 발생하는 예제

#include <iostream>
using namespace std;
int main () {
    //This is a comment line ending with back slash\
    cout << "Line after comment" << endl;
    cout << "Next line";
}

출력 결과

Next line

위 코드를 실행하면 "Line after comment" 문장은 출력되지 않고 "Next line"만 출력됩니다. 그 이유는 주석 끝의 역슬래시(\)가 다음 줄을 현재 줄에 연결해 버렸기 때문입니다. 즉, 컴파일러 입장에서는 주석이 사실상 두 줄에 걸쳐 있는 셈이 되어, 바로 아래의 cout 문까지 통째로 주석 처리된 것입니다.

해결 방법: 빈 줄 추가

이 문제를 해결하려면 주석 줄과 실제 코드 사이에 빈 줄을 하나 추가하면 됩니다. 빈 줄이 있으면 역슬래시가 연결하는 대상이 되는 다음 줄이 비어 있으므로, 그다음 줄의 코드는 정상적으로 컴파일됩니다. 아래 코드와 앞선 코드의 차이를 비교해 보세요.

수정된 예제

#include <iostream>
using namespace std;
int main () {
    //This is a comment line ending with back slash\

    cout << "Line after comment" << endl;
    cout << "Next line";
}

출력 결과

Line after comment
Next line

이번에는 두 문장이 모두 정상적으로 출력됩니다. 주석과 코드 사이의 빈 줄이 역슬래시에 의한 줄 연결을 흡수해 주었기 때문입니다.

정리

라인 스플라이싱은 매크로 정의처럼 여러 줄에 걸쳐 코드를 작성할 때 유용하게 사용되는 기능이지만, 한 줄 주석 끝에 실수로 역슬래시를 남겨두면 의도치 않게 다음 줄의 코드까지 주석 처리되어 버리는 원인이 됩니다. 따라서 주석 끝에는 역슬래시를 붙이지 않도록 주의하고, 불가피하게 사용해야 한다면 반드시 그다음 줄을 비워 두는 것이 안전합니다.