現役C言語開発者が語る:C言語とPythonの違いと比較

私は、C言語を使用している現役組み込みシステムのエンジニアです。
エンジニア歴は、10年以上です。
最近Pythonを書くようになり、C言語との違いで「うーん」慣れへんなぁとなったところをまとめてみようと思います。
慣れないことでPython使うのやーめよってなる方もいるかと思いますので、ぜひ参考にしてください。

main関数

まず、pythonではメインとなる関数なしに作成していけます。
C言語でいうmain関数ですね。
これは基本的にPythonはスクリプト言語になるので、上の行から順に実行していくことが基本形となる言語のためこういった形になります。
これは、解決方法があるので、以下をファイルの一番したに記載すれば解決できます。

if __name __  == ' __ main __ ':

実際のコードでの使用方法は以下のような形になります。

def func():
 print("test")

if __name__ == '__main__':
 func()

これを実行すると、以下のようになります。
※ちなみに、Dドライブ等にファイルを格納して実行したい場合に、コマンドプロンプトでDドライブにいきたくなる時があると思いますが、そんなときは、「D:」と入力してもらえれば移動できます。

if name == ‘main‘: の下に記載しているfunc関数が呼び出されて、func関数内の print(“test”) 実行されていますよね。
はい。これで、main関数については解決ですね。
これは覚えておいた方が、今後プログラミングをする上で役にたつと思います。

関数の定義方法

続いて、関数の定義です。
C言語では、戻り値と引数を設定して、使用するためには場合に応じてプロトタイプ宣言が必要になりますが、Pythonでは、プロトタイプ宣言と戻り値の指定は不要です。

C言語 の場合

int get_data(int x,int y);   <-プロトタイプ宣言

void main(void)
{
    int data;
    data = get_data(10,20);
}

int get_data(int x,int y)
{
    int ret;
    ret = x + y;

    return ret;
}

Pythonの場合

def get_data(x , y):
 data = x + y
 return data

if __name__ == '__main__':
 data = get_data(10, 20)
 print(data)

実行結果は以下

ちゃんと、実行できていますよね。
C言語では、戻り値や引数に型定義を入れる必要がありますが、Pythonは自動で認識してくるので、 型 を入れる必要がありません。
ただ、これくらいのプログラムではいいですが、ライブラリ等いろいろ呼ぶような複雑なプログラムを書いてくると、今使用している方が何かわからなくなり、 型 が違う!ってプログラムが強制終了したりします。
これは、以下のように記載すると今使用している方が何なのかわかるので、覚えておくと後々役にたつと思います。

print(type(data))

※dataは変数を指定します

実行結果は、以下のようになります。

<class 'int'>

これで、int型の変数であることがわかります。
あと関数を書く上で、馴染みがないのは、関数の終わりですね。
C言語では、関数のはじめと終わりは 「{}」で囲うので、わかりやすいですが、Pythonでは、「:」で関数宣言の終わりを指します。
これは、関数だけでなく、if 文 やfor文などの終わりにも記載します。
つまり、Pythonでは、プログラムの階層が変わるときに、「:」を識別子として使用しているわけです。
じゃあ、階層が変わった後のプログラムはどういう風に実行する?と思うかもしれませんが、Pythonでは、インデントの違いにより階層が違うことを判断し実行していきます。

def get_data(x , y):
 ret = "no"
 data = x + y
 if data >= 10:
  ret = "yes"
 else:
  pass
 return ret

if __name__ == '__main__':
 result = get_data(10, 20)
 print(result)

上に、if分を用いた簡単なプログラムを記載しました。
見ていただければわかると思いますが、「:」で必ず、タブで階層が違うようになっていますよね。
また、Pythonでは処理を実行しない場合はC言語のように何も記載しないと、エラーとなってしまいます。
こういった場合は、上記の7行目のように「pass」と記載します。これは処理をしませんよっていう意思表示です。
はい。これで、関数も作成できるようになりましたね。

まだif文 for文と続きますが、長くなってきたので次ページに記載します。

if文

あとは、if文とfor文が書ければ、簡単なプログラムは作成できるようになりますので、頑張って覚えましょう。
if文は先ほども出てきましたが、C言語と大して変わりません。

C言語では、以下

if( hoge == 0 )
{
    
}

pythonでは以下のように記載します。

if hoge == 0:
    pass:

Pythonでも、「==」,「!=」,「>=」,「<=」は同じ記載方法でOKです。
ただし、||と&&については記載方法が異なりますので、覚えておきましょう。

以下です。

Andをとりたい場合

C言語
if( ( hoge >= 0 ) && (hoge <= 10) )
{

}

Python
if( ( hoge >= 0 ) and (hoge <= 10) )
    pass:

Orをとりたい場合

C言語
if( ( hoge <= 5 ) || (hoge >= 10) )
{

}

Python
if( ( hoge <= 5 ) or (hoge >= 10) )
    pass:

うん。そのままですね。これはこっちはこの方が覚えやすいかも。

for文

では、続いて、for文です。
こちらは癖があります。たぶん、C++等の経験がある方は、似たような記載方法になるのかな。。

C言語
int i=0;
for(i=0; i < 10; i++)
{

}

Python
for i in range(10):
    pass

for文では、iという変数を レンジが10までループさせるというような記載方法となります。
この書き方なじみません。あとは、例えばリスト型を入れればリストを順にここでいうiに入れてくれるようですが、C言語使いの私はなじみがなくあまり使用しません。※何かで見た感じでは、Pythonでは、 配列 を使用する場合に、インデックスで用をループさせるより、リストでループさせる方が高速のようですが、なじまなくて考えないとまだ使えなしので、基本的に要素で検索しちゃいます。
まぁ、パソコンの性能はかなり高いので、すごい高負荷なことをさせなければ問題ないです。

実際にかいてみたコードはこんな感じです。

def get_10count( x ):
 ret = x
 for i in range(10):
  ret = ret + 1
 return ret
 
if __name__ == '__main__':
 result = get_10count(1)
 print(result)

実行結果は以下

import(インクルード)

あとは、C言語でいうところのインクルードを覚えればとりあえずコードを書いて試してみる分には十分かと思います。
まず、Pythonでは、C言語でいうインクルードは、「インポート」と呼びます。
では実際にインポートしてみましょう。今回は前回ライブラリのインストールをしたNumpyをインポートしてみます。

import numpy

def test( ):
 ret = numpy.array([1,2,3])
 return ret

if __name__ == '__main__':
 result = test()
 print(result)

ただ、ファイルの先頭に、「import モジュール名」を記載するだけです。
簡単ですね。
で実行結果は、以下の通り

また、numpyというのが長くて格納がめんどくさいなぁという場合は以下のように記載すれば、自分で決めた短縮名で使用できます。

import numpy as num

def test( ):
 ret = num.array([1,2,3])
 return ret

if __name__ == '__main__':
 result = test()
 print(result)

「import モジュール名」の後ろに「as 名前」になっていますよね。
これで、名前としてこのファイルの中では使用できるようになりました。
実際に呼び出しているのは、4行目ですね。

まとめ

はい。いかがだったでしょうか。

この記事では、全部ではないですが、C言語開発者が、Pythonに挑戦してみて「うーん」と悩んでしまうようなことの基本をまとめてみました。

かなり違うために悩んでしまうところや、これはPythonの方が使いやすいなと思うところと色々ありますよね。あとはC言語にはないクラスの概念があったり難しいと思いますが、現在もっとも使用されている言語だけあって、ライブラリやインターネット上に参考記事なんかもいっぱいあって勉強しやすいと思います。

私もまだまだ勉強中の身ではありますが、学んだことをまとめていってみたいと思いますので、みなさん一緒に勉強しましょう。

Pythonについて勉強したい人は以下がおすすめです。私も持っていてたまに眺めて勉強していますものですのでぜひ購入して学習してみてください。

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村