2010-11-18 4 views
-4

INT의 XXXX (INT) 또는 무효 XXX (INT)return 문을 사용하지 않고 호출하는 함수에 값을 반환하는 방법은 무엇입니까?

+8

왜'return'을 사용할 수 없습니까? – dreamlax

+1

확장해야합니다. 'return' 문은 함수에서 값을 반환 할 때 사용합니다. 너 정확히 뭐하려고? –

+0

질문은 실제로 약간 혼란 스럽습니다. 전역 변수를 사용할 수는 있지만 "함수의 반환 값"과 다릅니다. – khachik

답변

5

당신 글로벌 변수 (또는, 작은 더 나은, 당신은 파일 범위에서 선언 된 정적 변수를 사용할 수 있습니다)를 사용할 수와 같은 함수 프로토 타입 , 또는 출력 매개 변수를 가져 오기 위해 함수를 변경할 수 있지만 궁극적으로는 return 문을 사용해야합니다.

1
  1. 값을 할당하는 전역 변수가있을 수 있습니다.
  2. 정수를 저장하는 객체를 전달할 수 있으며, 함수에서 값을 변경하면 객체가 값 유형이 아니기 때문에 다른 곳에서도 변경됩니다.

또한 사용중인 프로그래밍 언어에 따라 다릅니다.

편집 : 죄송하지만 지금은 C 태그를 보지 못했다, 그래서 마지막 문장 C 함수에서 값을 반환하는

+0

질문에 태그가 지정되었습니다. – dreamlax

+2

더 현명한 편집은 마지막 문장을 지우는 것일뿐입니다. –

+0

우리는 전역 변수를 사용하지 않고 볼랜드 C 컴파일러에서 할 수 있습니다 ... – Muthuraman

4

두 표준 방법을 무시하거나 할 수는 명시 적으로 return 문, 또는에에 있습니다 포인터 매개 변수를 사용하고 포인터에서 객체에 지정하십시오.

다른 방법이 있지만 전 세계의 악의적 인 코드 양을 늘리기 위해 두려워하지 않습니다. 이 두 가지 중 하나를 사용해야합니다. 참조로

2

사용 패스 :

void foo(int* x, int* y) { 
int temp; 
temp = *x; 
x* = *y; 
y* = temp; 
} 

void main(void) { 
int x = 2, y=4; 
foo(&x, &y); 
printf("Swapped Nums: %d , %d",x,y); 
} 
+0

정수를 포인터로 변환 (구현 정의 동작) 한 다음 x 및 y를 초기화할 때이 포인터 변수의 주소 (int 포인터에 대한 포인터)를 두 인수에 대한 int 포인터를 예상하는 함수에 제공합니다. – dreamlax

+0

* 한숨 *. 이것은 C의 복사 전용 매개 변수로 수동으로 포인터를 전달하는 메커니즘이 "참조에 의한 전달"이라고 생각되는 방식입니다. 두 번째 방법은 첫 번째 균열이 잘못되어 실행시 발생할 수있는 상황을 누가 알게되는지입니다. **이 대답은 가능한 경우 C를 피해야하는 이유에 대한 * Exhibit A * ** –

+0

다음과 같이 가정합니다. int x = 2, y = 4; –

1

일반적으로 당신은 당신의 함수 외부 변수에 대한 참조를 제공합니다.


void foo(int *value) 
{ 
    *value = 123; 
} 

int main(void) 
{ 
    int my_return_value = 0; 
    foo(&my_return_value); 
    printf("Value returned from foo is %d", my_return_value); 
    return 0; 
} 

+0

이 시나리오는 필요하지 않습니다. 볼랜드 C 컴파일러를 사용해보십시오 .... – Muthuraman

+0

@Muthuraman - 당신이 그곳에서 무슨 말을하고 있는지 모르겠지만, 이것은 아주 기본적인 표준 C처럼 보입니다. 볼랜드 C 컴파일러에서 잘 작동합니다. –

+0

return 0 대신 다른 명령문을 사용하는 방법; 당신의 코드에서 – Muthuraman

0

간단한 답은 int 반환 값으로 지시문을 사용해야하는 첫 번째 프로토 타입과 같은 프로토 타입이 제공됩니다.

원칙적으로 int에 대한 포인터를 형 변환하여 매개 변수로 전달하고 다시 캐스팅하고 수정하는 것과 같은 무서운 일을하는 것이 원칙적으로 가능합니다. 다른 사람들이 당신에게 암시 한 것처럼, 당신이 이것을 함의 모든 함의를 이해하고, 당신의 질문으로 판단한다면 나는 당신이하지 않는다고 말할 것입니다.

0

int wel();
int main()
{
int x;
x = wel();
printf ("% d \ n", x);
return 0;
}
INT의 아() {

레지스터의 INT TVR의 ASM ("AX");
tvr = 77;
}

우분투 컴퓨터의 GCC 컴파일러로 컴파일되었습니다. 볼랜드 컴파일러에서는 반환 할 다른 방법.

+0

여기에 return 문이 사용되지 않습니다. – Muthuraman

+0

그리고 왜, 왜 이런걸하고 싶습니까? 절대 목적이 없으며, 표준 C (또는 어셈블러에 의존하기 때문에 C 임)가 아닌, 전혀 휴대 할 수 없습니다. – Arkku

+0

(철학적으로 레지스터가 전역 변수라고 주장 할 수도 있습니다.) – Arkku

0

두 개 이상의 값을 반환해야하는 경우 새 할당 구조체에 대한 포인터를 사용하지 않는 이유는 무엇입니까?

typedef struct { int a, char b } mystruct; 
mystruct * foo() 
{ 
    mystruct * s = (mystruct *) malloc(sizeof(mystruct)); 
    return s; 
} 

테스트하지 않았지만 유효해야합니다.

관련 문제