如何使用gcc将变量传递给C程序

Maj*_*sra -3 c parameters gcc

如何使用gcc将变量传递给C程序?

例如

gcc -o server ./server.c --host=localhost --port=1234
Run Code Online (Sandbox Code Playgroud)

如何在我的代码中访问这些变量?

谢谢.

bam*_*s53 6

你的问题不明确; 至少有两件事你可能会问:如何在程序运行时访问传递给程序的命令行参数,以及如何在编译程序时访问传递给编译器的参数.

命令行参数:

./server --host=localhost --port=1234

这些是通过参数访问main():

int main(int argc, char *argv[]) {
  for (int i=0; i<argc; ++i) {
    std::cout << argv[i] << '\n';
  }
}
Run Code Online (Sandbox Code Playgroud)

getopt 解析这些命令行选项是一种非常常见的方法,尽管它不是C或C++标准的一部分.

编译器参数:

您不一定能访问传递给编译器的参数,但是对于您可以检测到的参数,您可以通过更改编译环境来检测它们.例如,如果编译器选择启用语言功能,则可以通过检测是否启用该功能来检测何时传递该选项.

gcc -std=c11 main.cpp

int main() {
  #if 201112L <= __STDC_VERSION__
    printf("compiler was set to C11 mode (or greater).\n");
  #else
    printf("compiler set to pre-C11 mode.\n");
  #endif
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以直接在程序将能够访问的编译器的命令行参数中定义宏.

gcc -DHELLO="WORLD" main.cpp

int main() {
  #if defined(HELLO)
    printf("%s\n", HELLO);
  #else
    printf("'HELLO' is not defined\n");
  #endif
}
Run Code Online (Sandbox Code Playgroud)