如何为我的 C 程序变量带来以下值:
- 用于执行程序的 CPU,即在同一程序上花费了多少处理器。 
- 程序的执行时间,即完成所用的时间。 
- 编译器警告,即如何在我自己的程序中将编译器警告放在字符串变量上? 
- 我的程序到磁盘的大小:程序占用我的硬盘。 
我发现这很难做到,而且我不知道有什么方法可以做到。
提前感谢大家
可执行文件的编译器警告是仅在构建程序后可用的信息。因此,我认为将这些信息静态地打包到您的“C 程序变量”中并不容易。
您可以将此数据保存到文件中作为附加的构建步骤。例如,编写一个执行编译器并读取其输出的程序。然后,该程序要么将数据保存到文件中,要么给它链接器并告诉它将其打包为资源(但是你会丢失链接器警告)。
大小、cpu 使用率和运行时间是程序在运行时可以获取的信息。您可以使用 C 库(fopen 等)轻松获取文件的大小。运行时间可以通过在应用程序启动时启动计时器来获得,并且在退出之前读取该计时器以获得总运行时间。我认为对于 cpu 的使用,您必须询问操作系统(快速谷歌搜索 windows 让我知道了这个)
[编辑包括程序执行时间,文件大小]
仅适用于 Windows:这里有一些代码可用于获取您想要的内容。此实现仅返回 PeakWorkingSize,但我已经包含了结构的注释副本,其中包含您可以获得的所有值,并进行了少量修改。如果包含 psapi.lib(Windows SDK 安装的一部分,可在此处免费下载) ,这将在 ANSI C 中编译和构建
#include <windows.h>
#include <ansi_c.h>
#include <psapi.h>
time_t GetMemUsage(void);
int main(int argc, char *argv[])
{
    DWORD start, elapsed; // for program execution time
    size_t memory; //for cpu usage;
    DWORD  filesize=0; //for exe file size
    FILE *fp;
    char buf[260];
    int i;
    start = GetTickCount();
    sprintf(buf, ".\\%s", argv[0]);
    fp = fopen(buf, "r");
    filesize = GetFileSize(fp, NULL);
    for(i=0;i<1000000;i++); //so ticks will be more than zero
    memory = GetMemUsage();
    fclose(fp);
    elapsed = GetTickCount() - start; //note, possible rollover, 
    return 0;   
}
time_t GetMemUsage(void)
{
    HANDLE hProcess;
    PROCESS_MEMORY_COUNTERS pmc;
    DWORD processID = GetCurrentProcessId();
    hProcess = OpenProcess(  PROCESS_QUERY_INFORMATION |
                                    PROCESS_VM_READ,
                                    FALSE, processID );
    GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc));
    CloseHandle(hProcess);
//  typedef struct _PROCESS_MEMORY_COUNTERS {
//      DWORD cb;
//      DWORD PageFaultCount;
//      SIZE_T PeakWorkingSetSize;
//      SIZE_T WorkingSetSize;
//      SIZE_T QuotaPeakPagedPoolUsage;                             
//      SIZE_T QuotaPagedPoolUsage;
//      SIZE_T QuotaPeakNonPagedPoolUsage;
//      SIZE_T QuotaNonPagedPoolUsage;
//      SIZE_T PagefileUsage;
//      SIZE_T PeakPagefileUsage;
//  } PROCESS_MEMORY_COUNTERS;
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
    return pmc.PeakWorkingSetSize;
}