아니, 어디 근처.
C 표준은 함수 인수가 연속 메모리 위치 (또는 특정 주문의 경우)에 저장되는 것을 보증하지 않습니다. 함수 인수가 함수로 전달되는 방법을 결정하는 것은 컴파일러 및/또는 플랫폼 (구조)까지입니다.
더 명확하게하기 위해 전달 될 인수가 메모리 (예 : 스택)에 저장된다는 보장조차 없습니다. 그들은 하드웨어 레지스터 (적용 가능할 때마다 또는 일부를 위해)를 사용하여 작업을 빠르게 수행 할 수 있습니다. 대부분의 기능은 단일 레벨 통화 레지스터에 모든 인수를 전달할 수 있도록 예를 들어,
파워
파워 PC 아키텍처는 레지스터의 다수가 있습니다. [...]
MIPS
32 비트 MIPS 대한 가장 일반적으로 사용되는 전화 협약 레지스터의 기능을 처음 네 개의 인자를 전달 O32 ABI이다 $a0
- $a3
; 후속 인수는 스택에 전달됩니다. [...]
X86
x86 아키텍처는 여러 가지 호출 규칙을 사용합니다. 아키텍처 레지스터의 수가 적기 때문에 x86 호출 규칙은 주로 스택에서 인수를 전달하는 반면 반환 값 (또는 그에 대한 포인터)은 레지스터에서 전달됩니다.
등등. full wiki article here을 확인하십시오.
따라서, 귀하의 경우, bars[0]
는 유효 접근이지만, bars[1]
및 bars[2]
가 유효한지, 완전히, 기본 환경 (플랫폼/컴파일러)에 따라 달라집니다. 기대하는 행동에 의존하지 않는 것이 가장 좋습니다.
당신이 인수를 사용하지 않을 경우에는 단지
main()
에 전달, 당신은 단순히
int main(void) {
에 서명을 줄일 수 있습니다 (모든이 경우
), nitpick하기 말했다.
호기심을 만족 시키려고 하시겠습니까? 아니면 문제가 해결 될 것이라고 생각하십니까? – StoryTeller
가변 인수는이 기술을 사용하여 인수를 반복하는 것처럼 보이기 때문에 호기심에서 벗어난 것입니다. –