2016-08-28 8 views
1

Mという名前の関数をMain()という名前の関数をCで作成することはできますか?
同じ名前で異なるケースの2つの要素が別々のエンティティとして扱われるため、私の意見ではMain()を作成できますが、確認する必要があります。Cでは、Main()という関数を作成できますか?

+4

お試しください。 –

+1

私は 'maiN()'に行きます –

+0

これはCの中期テストでした! – Cersei

答えて

1

厳密には準拠していない環境では、その名前が予約されている可能性があります。しかし、リンカーは大文字と小文字を区別することになっていて、首都は予約されていません。

+0

あなたは、細心のない環境がmain()をmain()として予約し、2つを区別しないかもしれないことを意味しますか? – Cersei

+0

Visual Studioのように、少なくとも一部のモードでWinMainを予約します。コンパイラーがmain()と少し異なる特性を持つ代替エントリーを必要とする場合、Mainは識別子の明白な選択です。 –

2
int Main (void) 
{ 
    return 0; 
} 

int main (void) 
{ 
    return 0; 
} 

完全にリンクされています。大文字と小文字が区別されます。

+0

ありがとう!私はまだ初心者です。 「それは結構です」とはどういう意味ですか?どちらの関数も同じファイル内にありますか?申し訳ありませんが、これはひどくばかげた質問です。 – Cersei

+0

はい、両方とも同じファイル内の機能です。ソースをオブジェクトコードに変換するコンパイラがあります。リンカーは、すべて一緒に実行可能ファイルを持っています。複数のファイルがある場合は、ファイルを一緒にリンクしたり、システムの一部のライブラリ(IOなど)にもリンクします。環境に応じて、実行可能ファイルを作成しようとすると、両方のステップが自動的に実行されます。 – chris01

+1

もう1つ言います:2番目のファイルを作成し、非標準のMainをそれに入れると、リンカは "Mainの多重定義"というエラーを表示します。リンカが自分の仕事をしているのを見るだけです。あなたの質問の一部ではありません。 – chris01

4

もちろん、どうしてですか?プリプロセッサおよびコンパイラは、"Main"および"main"と実質的に同じであることを気にしませんです。 Cは大文字と小文字を区別するため、"Main""main"は全く異なる2つの名前です。 (これは可読性を助けることはできませんが、技術的な理由はありませんすることはできません)例えば、

#include <stdio.h> 

int Main (int argc, char **argv) 
{ 
    for (int i = 1; i < argc; i++) 
     printf (" %2d : %s\n", i, argv[i]); 

    return argc; 
} 

int main (int argc, char **argv) { 

    printf ("\n %d arguments.\n", Main (argc, argv) - 1); 

    return 0; 
} 

使用例あなたはすでに答えを持っている

$ ./bin/mainMain The quick brown fox jumps over a lazy dog. 
    1 : The 
    2 : quick 
    3 : brown 
    4 : fox 
    5 : jumps 
    6 : over 
    7 : a 
    8 : lazy 
    9 : dog. 

9 arguments. 
1

/出力が、ちょうどへ章、C11から直接、正式な引用符のビットを追加5.1.2

実行環境:

freestandingとhostedの2つの実行環境が定義されています。いずれの場合も、実行 環境によって指定されたC関数が呼び出されると、 プログラムの起動が発生します。 [...]

その後、§5.1.2.2、ホステッド環境、P1、 "プログラムの起動"

プログラムの起動時に呼び出される関数はmainという名前です。 [...]私たちが知っているように、前記

は、Cは、大文字と小文字を区別ある(§6.4.2.1/ 2を引用し、 "識別子"、一般)

識別子であります(アンダースコア_、 の小文字と大文字のラテン文字、およびその他の文字を含む)のシーケンスと、数字6.235.1で説明されているような1つまたは複数のエンティティ を指定します。 小文字と大文字は区別されます。 [...]

ようmain()同じケースなしの識別子は、それがMain()MAIN()maiN()または可能な他の任意の組み合わせであっても、main()同じありません。それらはすべてCが関係する限り、異なる識別子です。

ので、Cで

への答えは、メイン(と呼ばれる関数)を作成することができますか?

はい、確かです。彼らは、コンパイラに異なる識別子であるので、あなたがだけMain()を作成し、main()を残せば

だけで、より多くのビットをクリアするために、すべてそれ自体でコンパイラは、あなたがMain()を書き込むことによってmain()を意味していることを知る方法がないだろう。

+0

"..われわれがすでに知っているように" - ウィキペディアを参照する必要はありません。6.4.2.1で具体的に言及されているように、「小文字と大文字は区別されます。 :) – usr2564301

+1

@RadLexusそれでは、wikiを標準の見積もりに変更してみましょう。:) –

+0

これは、「なぜ」ではないのですか?D – usr2564301

0

大文字で1つ以上の文字を書いた場合のみ、メインと同じようにMAINと思われます。それ以外の場合は、メインが既にC言語の関数であるため、コンパイラはどのメインが必要かを判断できません。 注:私は初心者でもありますので、間違っている可能性もあります。

関連する問題