GCC 옵션 · 4 min read · Jan 22, 2026

드물지만 유용한 GCC 명령줄 옵션 - 2부

gcc 컴파일러는 끝이 없는 것처럼 보이는 명령줄 옵션 목록을 제공합니다. 물론, 모든 사람이 모든 옵션을 사용하거나 전문성을 가지고 있지는 않지만, 모든 gcc 사용자가 알아야 할 몇 가지 선택된 옵션이 있습니다. 일부는 일반적으로 사용되지만, 다른 일부는 다소 드물지만 덜 유용하지는 않습니다.

이 기사 시리즈에서는 이러한 드물지만 유용한 gcc 명령줄 옵션 중 일부에 초점을 맞추고 있으며, 이미 1부에서 몇 가지를 다루었습니다.

기억하신다면, 이 튜토리얼 시리즈의 첫 번째 부분 시작 부분에서 개발자들이 일반적으로 경고를 생성하기 위해 사용하는 -Wall 옵션이 일부 특정 경고를 포함하지 않는다고 간략하게 언급했습니다. 이러한 경고를 인식하지 못하고 이를 활성화하는 방법을 모른다면 걱정하지 마세요. 이 기사에서 모든 것을 자세히 설명할 것입니다.

이 외에도, 부동 소수점 변수와 관련된 gcc 경고 옵션과 목록이 커질 경우 gcc 명령줄 옵션을 더 잘 관리하는 방법도 다룰 것입니다.

하지만 계속 진행하기 전에, 이 튜토리얼에서 언급된 모든 예제, 명령 및 지침은 Ubuntu 16.04 LTS에서 테스트되었으며, 사용한 gcc 버전은 5.4.0입니다.

** -Wall로 커버되지 않는 경고 활성화하기

gcc 컴파일러의 -Wall 옵션은 대부분의 경고 플래그를 포함하지만, 일부는 비활성 상태로 남아 있습니다. 이를 활성화하려면 -Wextra 옵션을 사용하십시오.

예를 들어, 다음 코드를 살펴보십시오:

#include   
#include   
int main()  
{  
    int i=0;  
    /* ...  
       some code here   
       ...  
    */  
      
    if(i);  
        return 1;  
     return 0;   
}

나는 ‘if’ 조건 뒤에 세미콜론을 실수로 넣었습니다. 이제, 다음 gcc 명령을 사용하여 코드를 컴파일했을 때, 경고가 생성되지 않았습니다.

gcc -Wall test.c -o test

하지만 -Wextra 옵션을 사용했을 때:

gcc -Wall -Wextra test.c -o test

경고가 생성되었습니다:

test.c: In function ‘main’:  
test.c:10:8: warning: suggest braces around empty body in an ‘if’ statement [-Wempty-body]  
 if(i);

위의 경고에서 알 수 있듯이, -Wextra 옵션은 내부적으로 -Wempty-body 플래그를 활성화하여 의심스러운 코드를 감지하고 경고를 발행했습니다. 이 옵션으로 활성화되는 경고 플래그의 전체 목록은 다음과 같습니다:

-Wclobbered, -Wempty-body, -Wignored-qualifiers, -Wmissing-field-initializers, -Wmissing-parameter-type (C 전용), -Wold-style-declaration (C 전용), -Woverride-init, -Wsign-compare, -Wtype-limits, -Wuninitialized, -Wunused-parameter (단지 -Wunused 또는 -Wall과 함께), 및 -Wunused-but-set-parameter (단지 -Wunused 또는 -Wall과 함께).

위에서 언급한 플래그가 무엇을 하는지 알고 싶다면, gcc의 매뉴얼 페이지를 참조하십시오.

계속해서, -Wextra 옵션은 다음과 같은 경우에도 경고를 발행합니다:

  • 포인터가 정수 0과 <, <=, >, 또는 >=로 비교됨
  • (C++ 전용) 열거자와 비열거자가 조건 표현식에 모두 나타남.
  • (C++ 전용) 모호한 가상 기반.
  • (C++ 전용) 레지스터로 선언된 배열의 서브스크립팅.
  • (C++ 전용) 레지스터로 선언된 변수의 주소를 가져옴.
  • (C++ 전용) 파생 클래스의 복사 생성자에서 기본 클래스가 초기화되지 않음.

동등 비교에서 부동 소수점 값에 대한 경고 활성화하기

이미 아시겠지만, 부동 소수점 값의 정확한 동등성을 테스트해서는 안 됩니다 (이 점을 모르셨다면, 부동 소수점 비교 관련 FAQ를 여기에서 읽어보세요). 하지만 실수로 이렇게 하더라도, gcc 컴파일러가 경고나 오류를 발생시키나요? 확인해 보겠습니다:

다음은 == 연산자를 사용하여 부동 소수점 변수를 비교하는 코드입니다:

#include  
  
void compare(float x, float y)  
{  
    if(x == y)  
    {  
        printf("\n EQUAL \n");  
    }  
}  
  
int main(void)  
{  
    compare(1.234, 1.56789);  
   
    return 0;   
}

그리고 이 코드를 컴파일하는 데 사용된 gcc 명령(둘 다 -Wall 및 -Wextra 옵션 포함)은 다음과 같습니다:

gcc -Wall -Wextra test.c -o test

안타깝게도, 위 명령은 부동 소수점 비교와 관련된 경고를 생성하지 않습니다. GCC의 매뉴얼 페이지를 빠르게 살펴보면, 이러한 시나리오에서 사용해야 하는 전용 옵션 -Wfloat-equal이 존재한다는 것을 알 수 있습니다.

이 옵션을 포함한 명령은 다음과 같습니다:

gcc -Wall -Wextra -Wfloat-equal test.c -o test

그리고 다음은 생성된 출력입니다:

test.c: In function ‘compare’:  
test.c:5:10: warning: comparing floating point with == or != is unsafe [-Wfloat-equal]  
 if(x == y)

위의 출력에서 볼 수 있듯이, -Wfloat-equal 옵션은 gcc가 부동 소수점 비교와 관련된 경고를 생성하도록 강제했습니다.

gcc 매뉴얼 페이지에서 이 옵션에 대해 설명하는 내용은 다음과 같습니다:

The idea behind this is that sometimes it is convenient (for the programmer) to consider floating-point values as approximations to infinitely precise real numbers. If you are doing this, then you  
need to compute (by analyzing the code, or in some other way) the maximum or likely maximum error that the computation introduces, and allow for it when performing comparisons (and when producing  
output, but that's a different problem). In particular, instead of testing for equality, you shouldcheck to see whether the two values have ranges that overlap; and this is done with the relational operators, so equality comparisons are probably mistaken.

gcc 명령줄 옵션을 더 잘 관리하는 방법

사용 중인 gcc 명령의 명령줄 옵션 목록이 커지고 관리하기 어려워진다면, 텍스트 파일에 넣고 그 파일의 이름을 gcc 명령에 인수로 전달할 수 있습니다. 이를 위해서는 @file 명령줄 옵션을 사용해야 합니다.

예를 들어, 다음이 귀하의 gcc 명령이라면:

gcc -Wall -Wextra -Wfloat-equal test.c -o test

그렇다면 세 가지 경고 관련 옵션을 ‘gcc-options’라는 이름의 파일에 넣을 수 있습니다:

$ cat gcc-options   
-Wall -Wextra -Wfloat-equal

그리고 귀하의 gcc 명령은 덜 복잡하고 관리하기 쉬워집니다:

gcc @gcc-options test.c -o test

gcc 매뉴얼 페이지에서 @file에 대해 설명하는 내용은 다음과 같습니다:

Read command-line options from file. The options read are inserted in place of the original @file option. If file does not exist, or cannot be read, then the option will be treated literally, and not removed.  
  
Options in file are separated by whitespace. A whitespace character may be included in an option by surrounding the entire option in either single or double quotes. Any character (including a backslash) may be included by prefixing the character to be included with a backslash. The file may itself contain additional @file options; any such options will be processed recursively.

결론

따라서 이 튜토리얼 시리즈에서는 총 5개의 드물지만 유용한 gcc 명령줄 옵션인 -save-temps, -g, -Wextra, -Wfloat-equal, 및 @file을 다루었습니다. 각 옵션을 연습하는 데 시간을 할애하고, gcc 매뉴얼 페이지에서 제공하는 모든 세부 정보를 확인하는 것을 잊지 마십시오.

다른 유용한 gcc 명령줄 옵션을 알고 있거나 사용하고 있으며, 이를 세상과 공유하고 싶으신가요? 아래 댓글에 모든 세부 정보를 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.