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

标签 c gcc parameters

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

例如

gcc -o server ./server.c --host=localhost --port=1234

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

谢谢。

最佳答案

您的问题不清楚;您可能至少会问两件事:如何访问程序运行时传递给程序的命令行参数以及如何访问程序编译时传递给编译器的参数。

命令行参数:

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

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

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

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
}

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

gcc -DHELLO="WORLD"main.cpp

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

关于c - 如何使用 gcc 将变量传递给 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298594/

相关文章:

c - 识别使用 malloc() 分配的缓冲区

gcc - 如何手动安装mingw?

c - 如何编写/构建 C 代码以避免与现有汇编代码冲突?

c - 如何在 Make 中使用 pkg-config

html - 如何添加参数删除链接?

oracle - 如何在从 v$sql 接收到的 Oracle 查询中查找参数?

c# - 为什么对方法的第二个参数使用 await 运算符会影响第一个参数的值?

c - 分配共享内存时出错

java - Kotlin/Native 安装报错: 'jni.h' file not found

iphone - 如何进行向后搜索以找到第二个空格/空白并将其替换为另一个字符串?