【C言語】
外部変数に短い名前i,j,kを付けてはいけない

短すぎる名前 extern int i,j,k; 外部変数に短い名前i,j,kを付けてはいけない

warning: declaration shadows a variable in the global scope

警告:宣言が外部変数を隠す
[-Wshadow]


■i,j,k等を外部変数で宣言してはいけない

int i = 5678;//★ダメ
#include    <stdio.h>
int main(void)
{
    for(int i = 0 ;i < 1234;i++){
        ;
    }
    printf("%d\n",i);//予期しない i を参照する
}

グローバル変数(global変数)/外部変数/広域変数
これらの変数は使わないに越したことはありませんが
どうしても使う場合は充分に「わかりやすい名前」を付けましょう。

これらの外部変数に汎用的な短い名前i,j,kは
みんなに見られて恥ずかしいので付けてはいけません。
局所変数が適切な物を外部変数で宣言するのは止めましょう。

上記の例では8行目で i を参照した際、1234が表示される事を期待して、1行目の 5678 を表示してしまいます。


■C89からC99への過渡期に注意

#include    <stdio.h>
#define MAX 1024
int     inf[MAX] = {0};
int main(void) {
    int i = 0 ; //★1
    //
    //~
    //
    for(int i = 0 ;i < MAX ;i++){//★2
        if(inf[i] != 0) 
            break;
    }
    if(i >= MAX)    //★2を見るつもりで★1を見てしまう
        printf("Found %d",i);
    else 
        printf("Not Found %d",i);
}

上記はC89スタイルからC99スタイルへの過渡期に
よく起きるバグです。

for文で宣言した i を参照するつもりで
関数先頭で宣言した i を参照しています。

参考:

DCL01-C. サブスコープで変数名を再利用しない

https://www.jpcert.or.jp/sc-rules/c-dcl01-c.html

Linux カーネル コーディング規約
(中略)
グローバル変数には意味がよく分かる名前を付けてください。
(中略)
ローカル変数の名前は短くて、変数の特徴を表したものにします。

https://linuxjf.osdn.jp/JFdocs/kernel-docs-2.6/CodingStyle.html