【问题标题】:Get command line arguments without arguments in main()在 main() 中获取不带参数的命令行参数
【发布时间】:2019-12-04 05:01:13
【问题描述】:

一件奇怪的事情让我睡不着觉。 .

我有P7 图书馆。是写日志的库。

图书馆包含几个例子。 C++ 的示例如下所示:

int main(int i_iArgC, char* i_pArgV[])
{
   // Some code that don't use i_iArgC or i_pArgV
}

但是程序以某种方式处理命令行参数的技巧。
我玩了一点,以确保这个 main 被调用。
我做什么:

  1. 构建调试并在main 上设置断点(以确保准确 这个main 被调用)
  2. main(int i_iArgC, char* i_pArgV[]) 更改为main()(以确保没有人使用它们)

我不知道怎么可能。

您可以通过以下最少步骤自行查看:

  1. this页面下载P7代码(链接在左上角)
  2. 解压存档
  3. 运行 build.sh(它以某种顺序运行几个 makefile)
  4. Binaries文件夹执行Cpp_Example
  5. 再次执行 Cpp_Example /P7.Help 以查看该应用对命令行参数的反应。

【问题讨论】:

  • 我找到了!整洁。
  • 您发现代码在哪里使用i_iArgC 等?
  • 没有定义(宏)或标志来选择其他程序入口点(然后重定向到main)?
  • 没有。我没有发现这样的技巧。构建尽可能简单,没有办法隐藏这样的事情。但在一个头文件中,我发现了#define P7TRACE_NO_VA_ARG_OPTIMIZATION#include <stdarg.h>。也许他们以某种方式使用stdarg.h 直接获取参数。
  • @isanae 完全正确。

标签: c++ command-line-arguments main


【解决方案1】:

大多数系统允许在不依赖main() 的情况下获取命令行参数。例如,在 Windows 上,您可以使用 GetCommandLineW()

该库在Shared/Platforms/*/PProcess.h 中有非可移植代码来执行此操作。快速查看Windows_x86/PProcess.h 会发现它使用GetCommandLineW(),而Linux_x86/ 中的同一个文件读取/proc/self/cmdline

【讨论】:

    猜你喜欢
    • 2013-12-26
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2011-11-21
    • 2019-12-06
    • 2014-01-03
    相关资源
    最近更新 更多