0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C言語】extern と __attribute__ の使い方を簡単に解説

Last updated at Posted at 2024-07-04

extern__attribute__ の使い方を簡単に解説

はじめに

C言語やC++でプログラムを作るときに、プログラムの動きを速くしたり、デバッグ(問題を見つけて直すこと)を簡単にするために使える便利なキーワードがあります。ここでは、extern__attribute__ について、初心者でも分かりやすく説明します。

extern とは?

extern は普通、他のファイルから関数や変数を使えるようにするためのものです。しかし、今回はちょっと違った使い方を紹介します。特定の使い方をすることで、関数がインライン化(コードの中に直接展開されること)されるようにできます。

__attribute__ とは?

__attribute__ は、関数や変数に特別な性質を持たせるためのものです。これを使うことで、プログラムの動きを細かく制御できます。

特別な属性の説明

  1. __gnu_inline__:

    • この属性を使うと、関数がインライン化されます。関数のコードがそのまま関数を呼び出した場所に展開されるので、関数を呼び出す手間が省けます。
    • extern と一緒に使うと、関数はインライン化されるだけで、普通の関数としては使われません。つまり、この関数はプログラムの中で直接使われる一部のように動作します。
  2. __always_inline__:

    • この属性は、「この関数は必ずインライン化しなさい」とコンパイラに命令します。どんな場合でも、この関数はインライン化されます。
  3. __artificial__:

    • この属性を使うと、デバッグ時に関数の中身の情報を省略できます。代わりに、関数が呼び出された場所の情報だけが表示されます。

実際のコード例

次のコード例を見てみましょう:

extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_add_pd(__m256d __A, __m256d __B) {
    return (__m256d)((__v4df)__A + (__v4df)__B);
}

コードの意味

このコードは次のことをしています:

  • _mm256_add_pd という関数は、インライン化されてコードの中に直接展開されます。この関数は普通の関数としては使われません。
  • この関数は必ずインライン化され、普通の関数呼び出しのようには動作しません。
  • デバッグ時には、この関数の中身ではなく、呼び出し元の情報だけが表示されます。

まとめ

extern__attribute__ を使うことで、プログラムの動きを速くしたり、デバッグを簡単にしたりできます。この使い方を覚えておくと、プログラムを書くときにとても役立ちます。初めて使うときは少し難しく感じるかもしれませんが、例を参考にしながら使ってみると、だんだんと理解できるようになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?