g++ -o main.exe main.cpp
と
ruby main.cpp
の両方を通るようにしてみたかったんです。何に使うのかとか考えたら負けだと思う。何の役にも立たず害にしかならないと思うんだけど、消すのも忍びなかったのでメモ。
g++ でも ruby でも実行(コンパイル)できるようにする
#if 0 print "hellow, world.\n" =begin #endif #include <stdio.h> int main(int argc, char** args) { printf("hello, world.\n"); return 0; } #if 0 =end #endif
C の #if と Ruby のコメント(#, =begin 〜 =end)を組み合わせただけ。
=end は行頭じゃないといかんので、相当変な書き方をしない限りは、どっちかのコンパイルでこけたりしない。
// 相当変な書き方 void hoge { int end = 10; int temp =end ; }
定数の共通化
#if 0 # Ruby 用ダミー関数 def const_char_p(*args); end def s32(*args); end =begin #endif // C用 定義マクロ #define const_char_p const char* #define s32 int #if 0 =end # C++/Ruby 共通定義 #endif const_char_p HELLO = "hello, world.\n"; s32 num = 100; #if 0 # Ruby 実行部分 if __FILE__ == $0 print HELLO puts num end =begin #endif // C++ 実行部分 #include <iostream> int main(int argc, char** args) { std::cout << HELLO; std::cout << num << std::endl; return 0; } #if 0 =end #endif
何に使うのかとかは考えたら負けですよ?(しつこい)
enum で定数定義
#if 0 # Ruby 用小細工 def enum(&block) block.call end def ENUM_DEF(*args); end =begin #endif // C++ 用小細工 #define ENUM_DEF(args) args, #if 0 =end # C++/Ruby 共通定義 #endif enum { ENUM_DEF(FLAG_A = 0x1) ENUM_DEF(FLAG_B = 0x2) ENUM_DEF(FLAG_C = 0x4) }; #if 0 # Ruby 実行部分 if __FILE__ == $0 puts FLAG_C end =begin #endif // C++ 実行部分 #include <iostream> int main(int argc, char** args) { std::cout << FLAG_C << std::endl; return 0; } #if 0 =end #endif
いろいろ酷いな。何に使うのかとか考えt(ry
enum {
A,
B,
};
に、対応する術は思いつかなかった。
終わり
何に使うのかとk(ry