📜  Linux 中的 cpp 命令和示例

📅  最后修改于: 2022-05-13 01:57:33.287000             🧑  作者: Mango

Linux 中的 cpp 命令和示例

cpp是 C 语言预处理器,您的 C 编译器会自动使用它在编译前转换您的程序。它也被称为宏处理器,因为它用于为较长的代码段提供缩写。它只能与 C、C++ 和 Objective-C 源代码一起使用。与其他编程语言一起使用可能会导致不确定的问题。

句法:

cpp  [-options]  infile  outfile

一些重要选项:

  • -D名称:预定义的名字作为宏。
  • -D name=definition :定义的内容被标记化和处理,就好像它们写在程序本身中一样。
  • -U name : 取消任何以前的宏定义。
  • -undef :不要预定义任何特定于系统或特定于 GCC 的宏。标准的预定义宏保持定义。
  • -I dir :将目录 dir 添加到要搜索头文件的目录列表中。
  • -Wall :打开正常代码所需的所有可选警告。
  • -Wcomments :每当注释开始序列 /* 出现在 /* 注释中,或者当反斜杠换行出现在 // 注释中时发出警告。
  • -Wendif-labels :当 #else 或 #endif 后跟文本时发出警告。
  • -w :禁止所有警告,包括默认情况下 GNU CPP 发出的警告。
  • -M :不输出预处理的结果,输出一个适合make描述主源文件依赖关系的规则。
  • -MM :类似于 -M 但不提及在系统头目录中找到的头文件。
  • -xc
  • -x c++
  • -x 目标-c
  • -x assembler-with-cpp :以上四个都指定源语言:C、C++、Objective-C 或汇编。这与标准一致性或扩展无关;它只是选择期望的基本语法。

示例:我们创建了两个代码来解释我们将它们称为code_a.ccode_b.c 的概念

#include
void main()
{
  printf("Hello, World!");
}

code_a.c
#include
void main()
{
   printf(out);
}

code_b.c
  • 使用 cpp 命令:



    它将导致以下输出:

    # 1 "code_a.c"
    # 1 ""
    # 1 ""
    # 1 "/usr/include/stdc-predef.h" 1 3 4
    # 1 "" 2
    # 1 "code_a.c"
    # 1 "/usr/include/stdio.h" 1 3 4
    # 27 "/usr/include/stdio.h" 3 4
    # 1 "/usr/include/features.h" 1 3 4
    # 367 "/usr/include/features.h" 3 4
    # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
    # 410 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
    # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
    # 411 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
    # 368 "/usr/include/features.h" 2 3 4
    # 391 "/usr/include/features.h" 3 4
    ..........
    .............
    ....................
    # 2 "code_a.c"
    void main()
    {
    printf("Hello, World!");
    
    }
    

    输出太大,我们实际上不需要它来理解这个概念。我们理解的是,它只是简单地将头文件中的整段代码调用并替换到程序中。

  • 使用 -D 选项:

    # 1 "code_b.c"
    # 1 ""
    # 1 ""
    # 1 "/usr/include/stdc-predef.h" 1 3 4
    # 1 "" 2
    # 1 "code_a.c"
    # 1 "/usr/include/stdio.h" 1 3 4
    # 27 "/usr/include/stdio.h" 3 4
    # 1 "/usr/include/features.h" 1 3 4
    # 367 "/usr/include/features.h" 3 4
    # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
    # 410 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
    # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
    # 411 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
    # 368 "/usr/include/features.h" 2 3 4
    # 391 "/usr/include/features.h" 3 4
    ..........
    .............
    ....................
    # 2 "code_b.c"
    void main()
    {
    printf("Hello, World!");
    
    }
    
    

    观察它打印出相同的结果。这是因为它使用了我们在命令行中声明的宏。

  • 使用-M选项:

    观察到差异。这是因为它只输出make所需的规则。