C++ ときどき ごはん、わりとてぃーぶれいく☆

Wonder Rabbit Projectのなかのひとのブログ。主にC++。

C Pre-processor

UE4: クラスファイルにたいてい仕込むログマクロの糖衣マクロ

UE4 に C++ コードファイルを追加する場合、特に UCLASS では規模がよほど小さくない限りたいてい定義するログマクロの定義と糖衣を紹介。 // MyHoge.h // コンパイラーオプションで MYHOGE_ENABLE_LOG=1 など明示的に渡されない場合でも // デバッグビルド…

MSVC++ BUG: C Preprocessor is not capable empty argument

MSVC++(2017; cl.exe-19.11.25547) で C プリプロセッサーのマクロが空の引数を受け付けない C++11/14/17, C99/11 に対する規格違反を報告しました。 https://connect.microsoft.com/VisualStudio/feedback/details/3144014 概要 #define X( X0 ) something …

C++: C プリプロセッサーで定義されるマクロに空のパラメーターを渡す合法性

背景 ソースコード中に大量の少し複雑なアクセサー大量に定義する必要があり、久しぶりに C プリプロセッサーのマクロでアートする機会がありました。マクロを組み上げる上で1つ気になる事が生じました。「マクロに空のパラメーターを渡すのは合法か?」と。…

UE4/C++ FORCEINLINE にしたいけど Debug ビルドの時は inline 最適化されたくない関数を定義する方法、あるいは UE_BUILD_xxxx シリーズのマクロについて。

UE4/C++ FORCEINLINE にしたいけど Debug ビルドの時は inline 最適化されたくない関数を定義する方法 #ifndef UE_BUILD_DEBUG FORCEINLINE #endif void hogehoge() { /* fugafuga */ } と、いうわけで #ifdef でOK。 Debug ビルドで定義される UE_BUILD_DEB…

C++ の #include するファイル名について規格に基づいて実際に試してみた

C++の規格§2.9 Header names によれば、#include の や "fuga" におけるhogeやfugaの文字について、 hoge には > を除いて、 fuga には " を除いて、 ' \ /* // が含まれる場合は実装依存、またhogeのパターンの場合には " が含まれる場合にも実装依存と書い…

うさぎさんはトライグラフを使った!! → わけがわからなくなった

別に使う必要に迫られた訳では無いのですが、"トライグラフ"というものを使ったあるプログラミング言語のソースコードのごく初歩的で簡単なコードのサンプルがこちらになります。 ??=include <iostream> int main()??< unsigned a??(??)=??<1,2,3??>; std::cout< https</iostream>…