|
また、お世話になります。よろしくおねがいします。最近、プログラムを書いていて
よく思うのですが、私はすごくグローバル変数をつかうような気がするのです。
グローバル変数を使うと簡単に行ける場合が多いからだと思うのですが、このような
コーディングスタイルはよくないのでしょうか?よくWEBをみているとグローバル変数
を多用するのはよくないみたいなことが書かれているのですが、理由がわかりません。
すごく便利だと思うのですが。。多分私がまだビギナーなのでその理由も見えないのだと
思うのですが、わかるかた御意見をください。
あと、以下にちょっとしたプログラムを示します。quitと入力されるまで入力された文字を
ソートして出力するものなんですが、今回二つのファイルに書いてみたところ
このグローバル変数のことを考えました。このメインで使っているstore_into_list
という関数に入力されていく文字をわたしていっているのですが、
わたされるたびにこの関数がよばれるためにstore_into_list()のなかで構造体の配列を
宣言することができませんでした。このような場合に構造体の配列をグローバルにせずに
受け取った文字をいれていくことはできるのでしょうか?
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
//メインファイルです。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void show_result(int counter);
void store_into_list(char *str,int counter);
int main(void)
{
char str[100];
int quitting=0;
int counter=0;
while(! quitting){
scanf("%s",str);
if(strcmp(str,"quit")==0){
quitting =1;
}
else{
store_into_list(str,counter);
counter++;
}
}
show_result(counter);
return 0;
}
ーーーーーーーーーーーーーーーーーーーーーーーーーー
//オブジェクトファイルです。
struct Word{
char word[100];
};
int num=0;
struct Word words[100];
int cmp(const void *x, const void *y)
{
return strcmp(((struct Word *)x)->word, ((struct Word *)y)->word);
}
void store_into_list(char *str,int counter)
{
strcpy(words[counter].word,str);
}
void show_result(int counter)
{
int i;
printf("\nBefore sorted:\n");
for(i=0; i<counter; i++){
printf("%s\n",words[i].word);
}
qsort(words,counter,sizeof(struct Word),cmp);
printf("\nsorted:\n");
for(i=0; i<counter; i++){
printf("%s\n",words[i].word);
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
|