C-Präprozessor __TIMESTAMP__ in ISO 8601: 2004

8

Wie kann ich einen __TIMESTAMP__ Ersatz in ISO 8601: 2004 haben?

__TIMESTAMP__

%Vor%

vs

__TIMESTAMP_ISO__

%Vor%     
Cetin Sert 06.07.2013, 00:53
quelle

3 Antworten

17

Oh ihr Optimist! Sie würden nicht wirklich erwarten, dass ein Standard einem anderen Aufmerksamkeit schenkt, oder? Die __TIMESTAMP__ -Definition befindet sich nicht in Standard C, nur so, wie Sie wissen. Es wäre großartig, ein Format wie das von Ihnen vorgeschlagene __TIMESTAMP_ISO__ zu haben (würden Sie immer Zulu-Zeit haben wollen, oder wäre es besser, die lokale Zeitzone zu vertauschen?), Aber ehrlich gesagt, könnte der einfachste Weg, es hinzuzufügen, ein sein Patch zu GCC und Clang und so weiter.

Sie können versuchen, mit asctime() zu monkeyen, wie von user1034749 empfohlen. answer , aber ich würde es lieber nicht versuchen.

Im GCC 4.8.1 Handbuch gibt es eine interessante Warnunterdrückung:

  

-Wno-builtin-macro-redefined
  Warnen Sie nicht, wenn bestimmte integrierte Makros neu definiert werden. Dies unterdrückt Warnungen für die Neudefinition von __TIMESTAMP__ , __TIME__ , __DATE__ , __FILE__ und    __BASE_FILE__ .

Dies deutet darauf hin, dass Sie versuchen könnten:

%Vor%

(Beachten Sie die Hieroglyphen, die erforderlich sind, um die Zeichenfolge date in doppelte Anführungszeichen zu setzen.) Einige frühere Versionen von GCC unterstützen diese Option jedoch nicht. Ich kann mich nicht erinnern, es vorher gesehen zu haben. Sie können __TIMESTAMP__ noch immer neu definieren:

%Vor%

Nicht sehr hübsch, aber es funktioniert ... Oh, und nur für den Rekord war der Quellcode (trivial):

%Vor%     
Jonathan Leffler 06.07.2013, 03:12
quelle
0

Wenn Sie einen wirklich plattformübergreifenden Weg brauchen, um die Kompilierungszeitstempel-Zeichenfolge in ISO 8601 oder einem anderen zur Kompilierungszeit definierten Format zu erstellen, können Sie stattdessen die Verwendung von CMake (was immer in Erwägung zu ziehen ist).

Was Sie wollen können Sie einfach mit CMake erreichen .

    
dbanet 14.07.2015 09:02
quelle
-1

clang und gcc haben zu diesem Zweck die C-Funktion "asctime" benutzt, ich nehme an, dass icc sie auch benutzt. Unter Linux können Sie mit LD_PRELOAD den Aufruf von asctime auffangen und durch eine beliebige Zeichenfolge ersetzen.

    
fghj 06.07.2013 01:15
quelle

Tags und Links