Home 함수 호출 인자 및 함수 매개변수의 한정자 관계
Post
Cancel

함수 호출 인자 및 함수 매개변수의 한정자 관계

  • 함수 호출 인자 및 함수 매개변수의 한정자 관계를 소개한다.

함수 호출 인자 및 함수 매개변수의 한정자 관계

  • c언어에서 한정자는 변수에 제한을 걸 때 사용하는 키워드로 const, volatile, restrict가 있다.
  • 함수를 호출 할 때 전달하는 인자의 한정자는, 함수 선언의 매개변수 한정자로 변환(추가 및 제거)된다.
  • 예를 들어, main 함수의 int32_t * array를 void boo(const int32_t * array) 함수로 전달할 때, main 함수의 int32_t * array는 boo 함수 선언에 의하여 const 한정자가 추가되어 const int32_t * array이 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>

void boo(const int32_t* const array);

void boo(const int32_t* const array)
{
	int32_t test = 0;
	int32_t* const dest1 = (int32_t*) malloc(sizeof(int32_t) * 10U);
	int32_t* const source1 = (int32_t*) malloc(sizeof(int32_t) * 10U);

	// void* memcpy (void* dest, const void* source, size_t num)
	(void) memset(dest1, 0, sizeof(int32_t) * 10U);
	(void) memset(source1, 0, sizeof(int32_t) * 10U);
	(void) memset(dest2, 0, sizeof(int32_t) * 10U);
	(void) memset(source2, 0, sizeof(int32_t) * 10U);

	// array 자료형은 const int32_t* const, 값과 주소를 변경할 수 없음
	// main 함수 array는 boo 함수에 전달 될 때, const int32_t* const  속성으로 변환됨
	// 에러 발생
	//array[0] = 1;
	//array = &test;

	// dest1 자료형은 int32_t* const, 주소를 변경할 수 없음
	// dest1는 memcpy 함수에 전달 될 때, void* 속성으로 변환됨
	// source1는 memcpy 함수에 전달 될 때, const void* 속성으로 변환됨
    //void* memcpy(void* dest, const void* source, size_t num)
	(void) memcpy(dest1, source1, sizeof(int32_t) * 10U);
}

int32_t main(void) {
	int32_t array[10] = { 0, };

	boo(array);

	return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "main.h"

int32_t* g_pa;

static int32_t getGpa(int32_t *pa) { // 매개변수 pa 자료형은 int32_t *, const 키워드가 모두 제거
  *pa += 100; // pa 값을 변경
  pa = &g_pa; // pa 포인터를 변경

  return g_pa;
}

int main(void) {
  int32_t a = 100;
  const int32_t const *pa = &a; // 포인터 pa는 값과 주소를 변경할 수 없음
  int32_t value = getGpa(pa);

  return 0 ;
}
This post is licensed under CC BY 4.0 by the author.

Project SW Test Forum 17. 유지보수 - 5

-

Comments powered by Disqus.

Trending Tags