인기 있는 오픈 소스 컴파일러인 GCC(GNU Compiler Collection)는 Linux 소프트웨어 개발의 표준 중 하나가 되었습니다. Linux 프로그래밍의 세계로 들어가고 싶다면 GCC 명령을 마스터하는 것이 필수적입니다. 당신이 초보자이든 전문 개발자이든, GCC는 당신에게 무한한 가능성을 열어줍니다.
gcc 컴파일러는 거의 끝이 없는 명령줄 옵션 목록을 제공합니다. 물론 모든 명령줄 옵션을 사용해 본 사람도 없고 능숙한 사람도 없을 것입니다. 그러나 모든 gcc 사용자가 알아야 할 몇 가지 명령줄 옵션이 있습니다. 그 중 일부는 일반적으로 사용되고 일부는 덜 일반적으로 사용되지만, 덜 일반적으로 사용된다고 해서 이전보다 유용성이 떨어지는 것은 아닙니다.
이 시리즈 기사에서는 흔하지 않지만 유용한 gcc 명령줄 옵션에 중점을 두었습니다. 이러한 명령줄 옵션 중 일부는 첫 번째 섹션에서 언급되었습니다.
이 튜토리얼 시리즈의 첫 번째 부분 시작 부분에서 개발자가 일반적으로 경고를 생성하는 데 사용하는 -Wall 옵션에 대해 간략하게 언급했으며 일부 특별한 경고는 포함하지 않았다는 것을 기억하실지 모르겠습니다. 이러한 특별한 경고에 대해 모르고 경고를 생성하는 방법을 모르더라도 걱정하지 마세요. 이 기사에서 이에 대한 모든 세부 사항을 설명하겠습니다.
이 외에도 이 문서에서는 부동 소수점 값과 관련된 gcc 경고 옵션과 gcc 명령줄 옵션 목록이 커졌을 때 더 잘 관리하는 방법도 다룹니다.
계속하기 전에 이 튜토리얼의 모든 예제, 명령 및 지침은 Ubuntu 16.04 LTS 운영 체제 및 gcc 5.4.0에서 테스트되었음을 기억하십시오.
벽 옵션이 포함되지 않은 경우 경고 생성
gcc 컴파일러의 -Wall 옵션이 대부분의 경고 플래그를 포함하지만 여전히 생성할 수 없는 일부 경고가 있습니다. 이를 생성하려면 -Wextra 옵션을 사용하십시오.
예를 들어 다음 코드는 다음과 같습니다.
으아악if 조건 뒤에 실수로 세미콜론을 추가했습니다. 이제 다음 gcc 명령을 사용하여 컴파일하면 경고가 생성되지 않습니다.
gcc -Wall test.c -o 테스트
그러나 -Wextra 옵션을 동시에 사용하여 컴파일하는 경우: gcc -Wall -Wextra test.c -o test
다음과 같은 경고가 생성됩니다:
위의 경고에서 -Wextra 옵션은 -Wempty-body 옵션을 내부적으로 활성화하여 의심스러운 코드를 감지하고 경고를 생성할 수 있다는 것이 분명합니다. 다음은 이 옵션으로 활성화된 모든 경고 플래그입니다.
으아악위에서 언급한 플래그에 대해 더 자세히 알고 싶다면 gcc 매뉴얼을 확인하세요.
또한 -Wextra 옵션은 다음 상황에서도 경고를 생성합니다.
으아악동등점 값을 비교할 때 경고 생성
부동 소수점 값은 정확한 동일성을 비교하는 것이 불가능하다는 점을 이미 알고 계실 것입니다(그렇지 않은 경우 부동 소수점 비교 관련 FAQ를 읽어보세요). 하지만 실수로 이렇게 하면 gcc 컴파일러가 오류나 경고를 표시합니까? 테스트해 봅시다:
다음은 == 연산자를 사용하여 부동 소수점 값을 비교하는 코드입니다.
으아악이 코드를 컴파일하려면 다음 gcc 명령(-Wall 및 -Wextra 옵션과 함께)을 사용하세요.
으아악안타깝게도 위 명령은 부동 소수점 값 비교와 관련된 경고를 생성하지 않습니다. gcc 매뉴얼을 잠깐 살펴보면 이 상황에서 사용할 수 있는 전용 -Wfloat-equal 옵션이 있음을 알 수 있습니다.
이 옵션이 포함된 명령은 다음과 같습니다.
이 명령으로 생성된 출력은 다음과 같습니다.
으아악위 출력에서 볼 수 있듯이 -Wfloat-equal 옵션은 gcc 컴파일러가 부동 소수점 값 비교와 관련된 경고를 생성하도록 합니다.
이 옵션에 대해 gcc 매뉴얼에 나와 있는 내용은 다음과 같습니다.
“
이 뒤에 숨겨진 아이디어는 때때로 프로그래머가 부동 소수점 값을 거의 무한정 정확한 실수로 생각하는 것이 편리하다는 것입니다. 이렇게 하려면 코드를 프로파일링하거나 이 계산으로 인해 발생하는 최대 또는 가능한 최대 오류를 파악한 다음 비교를 수행할 때(그리고 출력을 생성할 때 허용해야 하지만 이는 다릅니다.) 질문) 오류입니다. 특히, 동등성을 확인해서는 안 되지만, 두 값의 범위가 겹치는 것은 아닌지 확인해야 하는데, 이는 관계 연산자를 사용하여 이루어지기 때문에 동등성 비교가 실수가 될 수 있습니다.
”
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 的说明:
“
从文件中读取命令行选项。读取到的选项随之被插入到原始 @file 选项所在的位置。如果文件不存在或者无法读取,那么这个选项就会被当成文字处理,而不会被删除。
文件中的选项以空格分隔。选项中包含空白字符的话,可以用一个由单引号或双引号包围完整选项。任何字符(包括反斜杠: ‘/’)均可能通过一个 ‘/’ 前缀而包含在一个选项中。如果该文件本身包含额外的 @file选项,那么它将会被递归处理。
”
结论
在这个系列的教程中,我们一共讲解了 5 个不常见但是很有用的 gcc 命令行选项:
-Save-temps -g -Wextra -Wfloat-equal @file
记得花时间练习使用每一个选项,同时不要忘了浏览 gcc 手册上面所提供的关于它们的全部细节。
因此,无论你是正在学习Linux编程,还是已经成为一名经验丰富的开发者,掌握GCC命令将会让你事半功倍。尝试使用GCC命令去编译各种不同的程序,挑战自己的极限,让你的Linux编程之路越来越精彩
위 내용은 GCC 명령: Linux 프로그래밍의 무한한 가능성 열기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!