タグ

コンパイルと言語に関するiwwのブックマーク (6)

  • 【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報

    C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f

    【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報
    iww
    iww 2019/04/18
    『K&R スタイルの関数定義/宣言は C99 の規格で廃止予定とされていたらしいのですが、C11 の規格でもまだ廃止されずに残されています。』
  • GLSL - Wikipedia

    ビデオゲームはリアルタイムでレンダリングの計算をOpenGL経由でGPUにアウトソーシングする。シェーダーはOpenGL Shading Languageで書かれ、コンパイルされる。コンパイルされたプログラムはGPUで実行される。 GLSL (OpenGL Shading Language) はGLslangとしても知られ、C言語の構文をベースとした高レベルシェーディング言語である。これはアセンブリ言語やハードウェアに依存した言語を使わないで、アプリケーションソフトウェア開発者がグラフィックスパイプラインを直接制御できるようにOpenGL ARB (Architecture Review Board) [1]で策定された。 背景[編集] Direct3D 7までの時代、すなわち1990年代までのリアルタイム3Dコンピューターグラフィックスは、OpenGLやDirect3DといったAPIを通

    GLSL - Wikipedia
  • C++の未定義の挙動で呼ばれないはずの関数が呼ばれる場合

    Krister Walfridsson’s blog: Why undefined behavior may call a never-called function 以下のようなコードをClangでコンパイルすると、 #include <cstdlib> typedef int (*Function)(); static Function Do; static int EraseAll() { return system("rm -rf /"); } void NeverCalled() { Do = EraseAll; } int main() { return Do(); } Clangは以下のような最適化されたコードを吐く。 main: movl $.L.str, %edi jmp system .L.str: .asciz "rm -rf /" これは以下のようなコードと同じだ。

    iww
    iww 2017/09/26
    CやC++は未定義や不定が多いので、きちんと定義してほしい。
  • CPP(コンパイルしない方の関数型なC言語)プログラミング入門。とりあえずFizzBuzzまで - Qiita

    CPPでプログラミングする記事です。 みなさんれっつCPPプログラミング! CPPって何だよC++じゃねーのか じゃねーんだよ。悪かったな。 いや、まあ、C++に入門する記事を期待したみなさんには申し訳ない限りです。でもBoostとかにもCPPは結構使われているので、知っていて損は無いと思います。 C言語には、マクロという機能があります。これは構文解析の前(プロプロセス時)に行なわれる単純な字句展開機能で、例えば、 // 「#define 名前 値」という形式で宣言する #define MAC 42 // ソースコードにその名前が現れると、値に置換される MAC // 関数みたいにもできる #define F(x) x + 20 // 関数みたいに呼び出す F(22)

    CPP(コンパイルしない方の関数型なC言語)プログラミング入門。とりあえずFizzBuzzまで - Qiita
    iww
    iww 2017/08/06
    『これでカウンタ変数も手に入ったことになります。やった。』 すごい。 きがくるっている
  • Clang - Wikipedia

    Clang ([ˈklæŋ]:クランのように発音[5]) は、プログラミング言語 C、C++、Objective-C、Objective-C++ 向けのコンパイラフロントエンド英語版)である。OpenMPディレクティブ[6]や、OpenCL C/C++カーネル言語[7]も正式サポートしている。バックエンドにLLVMのコンパイラ基盤を使用しており、LLVM 2.6以降はLLVMのリリースサイクルに組み込まれている。 Clang/LLVMベースの派生プロジェクトとして、RenderScript(英語版)、CUDAのNVCC[8]、ROCm(英語版)のHIP-Clang[9]といった、Cライクなドメイン固有言語 (DSL) を組み込んだGPGPUフレームワークにおけるコンパイラフロントエンドとしても採用されている。 プロジェクトの目標は、GNUコンパイラコレクション (GCC) を置き換えるこ

    Clang - Wikipedia
    iww
    iww 2016/11/21
    『[ˈklæŋ]:クランのように発音』 クラン
  • 定義済みマクロ - redstrange Wiki*

    標準規格 C言語 __DATE__ ソースのコンパイル日付 __FILE__ ソースのファイル名 __func__ 関数名(Visual Studio.NET以降では、__FUNCTION__) __LINE__ 行番号 __STDC__ 標準Cに従っている際に定義されている(ifdefで使う) __STDC_HOSTED__ 整数1 __STDC_IEC_559__ IEC60559浮動小数点仕様に従っている際に定義されている __STDC_IEC_559_COMPLEX__ IEC60559互換の複素数仕様に従っている際に定義されている __STDC_ISO_10646__ ?→http://seclan.dll.jp/c99d/c99d02.htm#dt19990412 __STDC_VERSION__ C言語のバージョン __TIME__ ソースのコンパイル時刻 __TIMESTA

    定義済みマクロ - redstrange Wiki*
  • 1