您可以从__DATE__预处理器宏中获取纪元。
在函数下方,该getCompileTimeEpoch()函数又依赖于另外两个简单的辅助函数,它们返回月份编号和另一个将月份首字母缩写词切换为小写的函数。
令我感到困惑的是, GCC开发人员如何引入了一个带有人类可读日期而不是纪元的宏,从中可以以最大的可靠性导出有关日期的任何其他内容。
__TIME__如果您需要将它添加到纪元,您可以很容易地从宏中添加时间。
我选择了这个解决方案,因为它将所有内容都保存在代码中并且不依赖于编译器选项。
char *tolowercase(char *letstr){
    int l;
    for(l=0;l<=strlen(letstr);l++){
        if(letstr[l]>=65 && letstr[l]<=92){
            letstr[l]=letstr[l]+32;
        }
    }
    return letstr;
}
int getMonFromAbbr(char *abbr){
    if (strlen(abbr) > 0)
        tolowercase(abbr);
    if ( strcmp(abbr, "jan") == 0 )
        return 0;
    if ( strcmp(abbr, "feb") == 0 )
        return 1;
    if ( strcmp(abbr, "mar") == 0 )
        return 2;
    if ( strcmp(abbr, "apr") == 0 )
        return 3;
    if ( strcmp(abbr, "may") == 0 )
        return 4;
    if ( strcmp(abbr, "jun") == 0 )
        return 5;
    if ( strcmp(abbr, "jul") == 0 )
        return 6;
    if ( strcmp(abbr, "aug") == 0 )
        return 7;
    if ( strcmp(abbr, "sep") == 0 )
        return 8;
    if ( strcmp(abbr, "oct") == 0 )
        return 9;
    if ( strcmp(abbr, "nov") == 0 )
        return 10;
    if ( strcmp(abbr, "dec") == 0 )
        return 11;
    return(-1);
}
// Convert from __DATE__ macro
uint64_t getCompileTimeEpoch(){
    char date_macro[20]="";
    strcpy(date_macro, __DATE__);
    char *token;
    int yea=0;
    int mon=0;
    int day=0;
    token=strtok(date_macro, " ");
    if (token != NULL){
        mon=getMonFromAbbr(token);
        token=strtok(NULL, " ");
        if (token != NULL){
            day=atoi(token);
            token=strtok(NULL, " ");
            if (token != NULL){
                yea=atoi(token);
                struct tm t;
                time_t epoch_t;
                t.tm_year = yea-1900;    // Year - 1900
                t.tm_mon = mon;          // Month, where 0 = jan
                t.tm_mday = day;         // Day of the month
                t.tm_hour = 0;
                t.tm_min = 0;
                t.tm_sec = 0;
                t.tm_isdst = 0;         // Is DST on? 1 = yes, 0 = no, -1 = unknown
                epoch_t = mktime(&t);               
                return epoch_t;
            }           
        }
    }
    return(-1);
}