의 나는이 방법을 가지고 있다고 가정 해 봅시다 :반환 유형을 동적으로 변경 하시겠습니까?
matrix* multiply(smatrix *sm, matrix *m){
그것을 내가 동적으로 반환 형식을 변경하려면 matrix *
를 돌려주는 경우에도 마찬가지입니다. 반환 유형을 void *
으로 설정하고 나중에 캐스팅 할 수 있습니까?
의 나는이 방법을 가지고 있다고 가정 해 봅시다 :반환 유형을 동적으로 변경 하시겠습니까?
matrix* multiply(smatrix *sm, matrix *m){
그것을 내가 동적으로 반환 형식을 변경하려면 matrix *
를 돌려주는 경우에도 마찬가지입니다. 반환 유형을 void *
으로 설정하고 나중에 캐스팅 할 수 있습니까?
당신은 무효를 선언 할 수 있습니다 * 곱하기 (smatrix * SM, 매트릭스 *의 m) 다음 나중에
예 void * 포인터를 반환하고 원하는 것으로 캐스팅 할 수 있습니다. 그냥 당신이 틀린 기억에 접근 할 수 있다고 예상했던 것을 돌려주고 있는지 확인하십시오.
코드를 모호하게 만들 수 있으므로 이런 식으로 디자인하는 것이 좋지 않을 수 있습니다.
당신은 함수에 대한 호출에서 캐스팅을 할 수 반환 형식을 캐스트.
struct wibble
*w;
w = (struct wibble *)(multiply(sm, m));
현재로서는 매트릭스를 typedef'ing하지 않는 것이 좋습니다. 구조체이기 때문에 이미 타입이 있다고 상상해 봅니다. typedef를 사용하여 코드의 복잡성을 증가시킵니다. 그게 당신이 얻는 전부입니다.
함수가'void *'를 반환하면 캐스트가 필요하지 않습니다 ... 캐스트가 잘못되었을 가능성이 높습니다 :) – pmg
하나의 옵션이 이미 언급되었습니다. 반환 유형 (void*)
. 그러나 나는과 같이, 여기 - 메이크업 반환 형식 Union
또 다른 논의되지 옵션을 언급 할 :
typedef union {
int scalar;
int* vector;
int** matrix;
} custom_type;
custom_type* myFunction() {
// todo
}
Union
, 그 정도 Union
회원 공유 같은 메모리를 제외하고 Struct
처럼 될 수있는 모든 조합원 그래서 하나의 구성원 한 번에 설정/사용됩니다. 그러나 조심하십시오 - 당신은 명확하게 정확한 상황에서 기능으로부터 기대할 것을 알아야합니다 (그러나 나는 같은 경고가 void*
경우에 적용된다고 생각합니다).
건배!
왜 노동 조합에 typedef가 있습니까? 다른 사람이 코드를 읽을 때 코드를 이해할 수 있도록 기본 유형을 확인해야합니다. typedef는 코드를 가려줍니다. –
개인적으로 변수 선언을 줄이기 위해 union/struct와 함께 typedef를 사용하는 것을 선호합니다. I.E. 나는'struct MyType var;'대신에 더 짧은 선언'MyType var;'을 쓰는 것을 선호한다. 하지만 그건 내 개인 코딩 스타일 일 뿐이므로 결코 다른 사람이 그것을 사용하도록 강요하지 마십시오. –
당신을 좋아합니다. 귀하의 코드를 읽는 모든 사람들을 위해. 좋은 프로그래머라는 중요한 부분은 다른 사람들이 이해할 수있는 코드를 만드는 것이라고 생각합니다. –
제안하는 내용의 실제 코드 예제를 제공해야합니다. –
예, 가능합니다. 너 시도하지 않았 니? –
크기가 다른 행렬을 넣기를 원하거나 여기에 더 심각한 타이핑 문제가 있습니까? –