2016-08-28 2 views
1

M이라는 대문자를 사용하여 Main()이라는 함수를 C에서 만들 수 있습니까?
동일한 이름이지만 다른 케이스의 두 요소가 별도의 엔터티로 취급되므로 내 의견으로는 Main()을 만들 수 있지만 확인 만하면됩니다.C에서 Main()이라는 함수를 만들 수 있습니까?

+4

시도해 보지 않으시겠습니까? –

+1

나는'maiN()'에 갈 것이다. –

+0

글쎄, 이것은 C의 중기 시험이었다. – Cersei

답변

1

엄격하게 준수하지 않는 일부 환경에서는 그 이름을 예약 할 수 있습니다. 그러나 링커는 대소 문자를 구별하고 Capital을 가진 Main은 예약되어 있지 않습니다.

+0

비 (非) 세심한 환경에서 Main()을 main()으로 예약하고 둘을 구분하지 않을 수도 있다는 뜻입니까? – Cersei

+0

Visual Studio와 마찬가지로 적어도 일부 모드에서는 WinMain을 예약합니다. 컴파일러가 main()과 약간 다른 특성을 가진 대체 엔트리를 필요로한다면, Main은 명백한 식별자의 선택이다. –

2
int Main (void) 
{ 
    return 0; 
} 

int main (void) 
{ 
    return 0; 
} 

완벽하게 링크를 컴파일합니다. 대소 문자를 구분합니다.

+0

고마워! 나는 아직 초보자이다. '링크가 잘되어있어'라는게 무슨 뜻이야? 두 함수 모두 같은 파일 내에 있습니다. 이것이 대단히 어리석은 질문이라면 미안합니다. – Cersei

+0

예, 두 파일 모두 동일한 파일에 있습니다. 소스를 오브젝트 코드로 변환하는 컴파일러가 있습니다. 링커는 실행 파일을 만들기 위해 모두 함께 사용합니다. 둘 이상의 파일이있는 경우 파일을 함께 연결하거나 시스템의 일부 라이브러리 (예 : IO 등)에 연결합니다. 환경에 따라 실행 파일을 만들려고하면 두 단계가 모두 자동으로 수행됩니다. – chris01

+1

한 번 더 말하기 : 두 번째 파일을 만들고 비표준 Main을 입력하면 링커에서 "Main of multiple definition"오류 메시지를 표시합니다. 링커가 자신의 일을하는 것을 보자. 귀하의 질문에 포함되지 않습니다. – chris01

4

물론 이죠? 전처리 기와 컴파일러는 "Main""main"이 실질적으로 비슷하다고 생각하지 않습니다.. C는 대소 문자를 구별하므로, "Main""main"은 전혀 다른 이름입니다. (이것은 가독성을 도움이되지 수 있지만, 기술적 이유가 없다 할 수 있습니다되지 않음) 예,

#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의 두 가지 실행 환경이 정의됩니다. 두 경우 모두 환경에서 지정된 C 함수를 호출하면 프로그램 시작이 발생합니다. [...]

후, §5.1.2.2, 호스팅 환경 P1, "프로그램 시작"

프로그램 시작시 호출되는 함수 main라는. [...]

우리가 알고있는 바와 같이, C가, 식별자이다

(§6.4.2.1/2 "식별자"일반 인용) 대소 문자를 구분, 즉 상기 비 연속 문자 시퀀스 (밑줄 _, 소문자 및 대문자 라틴 문자 및 기타 문자 포함) 및 숫자, 6.2.1에서 설명한대로 하나 이상의 엔터티를 지정하는 숫자. 소문자와 대문자가 구별됩니다.는 [...]

정도로 main() 같은 경우없이 식별자는 Main(), MAIN(), maiN() 또는 임의의 다른 조합이 가능할, 하지 main() 같은이다. 그것들은 모두 C가 관련된 한 다른 식별자입니다.

그래서,

C에서

에 대한 대답은 홈페이지라는 함수는() 생성 할 수 있습니까?

이 맞습니다. 그들은 컴파일러에 서로 다른 식별자이기 때문에 당신이 Main()을 만들고 main()을 떠날 경우

그냥, 더 많은 비트를 취소, 모두 그 자체로 컴파일러는, 당신이 Main()를 작성하여 main()을 의미하는 것을 알 수있는 방법이 없습니다 .

+0

". 우리가 이미 알고있는 것처럼."- 위키피디아를 언급 할 필요가 없다. 6.4.2.1에서 특별히 언급했듯이 : "소문자와 대문자는 구별된다." :) – usr2564301

+1

@RadLexus 그런 다음 위키를 표준 인용문으로 변경하겠습니다. :) –

+0

"왜 안되나요?" – usr2564301

0

대문자로 하나 이상의 문자를 쓰는 경우에만 메인 또는 MAIN과 유사하게 컴파일러는 main이 C의 함수이기 때문에 원하는 메인을 말할 수 없습니다. 참고 : 나는 초심자이기 때문에 잘못 될 수 있습니다.

관련 문제