削除された内容 追加された内容
→‎上級者むけ: 属性構文。
→‎未分類: deprecated 属性
55 行
C++11以降、コンパイラに追加情報を送ることのできる属性構文が追加された。
 
==== fallthrough属性 ====
属性構文のひとつの <code>[[fallthrough]]</code> により、意図したフォールスルーである事をコンパイラに送ることができ、break忘れの警告を抑える事ができる。
 
84 ⟶ 85行目:
 
このように、 case 節の最後に <code>[[attribute]] </code> を追加する。
 
==== deprecated 属性 ====
コンパイルに、廃止などの予定される古い関数が呼び出された時に、警告を発してコンパイルを止める事のできる deprecated 属性がc++14で導入された。
 
コード例
<syntaxhighlight lang="cpp">
#include <iostream>
#include <stdio.h>
 
// 新しいほう
void sin_kansu() {
printf("goog morning\n");
}
 
 
// ↓古いほう
 
[[deprecated("hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。")]]
void hurui_kansu() {
printf("hello\n");
}
 
int main()
{
hurui_kansu();
return 0;
}
</syntaxhighlight>
 
 
このように、廃止される関数の直前に <code>[[deprecated]]</code> をつける。
 
 
;実行結果の例
g++ でコンパイルした場合、ファイル名が「at.cpp」なら、
 
<pre>
at.cpp: 関数 ‘int main()’ 内:
at.cpp:19:15: 警告: ‘void hurui_kansu()’ is deprecated: hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。 [-Wdeprecated-declarations]
19 | hurui_kansu();
| ^
at.cpp:13:6: 備考: ここで宣言されています
13 | void hurui_kansu() {
|
</pre>
 
のように表示される。
 
なお、コード中から<code>[[deprecated]]</code>に相当する部分を除去すると、エラーはでなくなり、コンパイルは通るようになる。
 
 
 
<syntaxhighlight lang="cpp">
#include <iostream>
#include <stdio.h>
 
// 新しいほう
void sin_kansu() {
printf("goog morning\n");
}
 
 
// ↓古いほう
 
// [[deprecated("hurui_kansuは廃止されます。新関数 sin_kansuを使ってください。")]]
void hurui_kansu() {
printf("hello\n");
}
 
int main()
{
hurui_kansu();
return 0;
}
</syntaxhighlight>
 
;実行結果
hello
 
 
[[Category:C++|*]]