Linux 커널에서 kobject에 대해 더 자세히 배우려고합니다. 그런 기능을 사용하는 모듈을 작성하려고 할 때 오류 및 경고 메시지가 표시됩니다. 관련 데이터 구조의 축소 된 버전과 해당 gcc의 오류 및 경고 메시지를 여기에 표시했습니다. 지정된 초기화 : GCC 경고 메시지 : 초기화 및 기타 경고 메시지 근처
$ gcc issue.c
issue.c:30:1: error: initializer element is not constant
} ;
^
issue.c:30:1: error: (near initialization for ‘first.attr’)
issue.c:34:1: error: initializer element is not constant
};
^
issue.c:34:1: error: (near initialization for ‘second.attr’)
issue.c:39:8: warning: initialization from incompatible pointer type [enabled by default]
struct bin_attribute *my_bin_attrs[] = { &first_bin_attrs, &second_bin_attrs };
^
issue.c:39:8: warning: (near initialization for ‘my_bin_attrs[0]’) [enabled by default]
issue.c:39:8: warning: initialization from incompatible pointer type [enabled by default]
issue.c:39:8: warning: (near initialization for ‘my_bin_attrs[1]’) [enabled by default]
그리고 샘플 코드 :
#include <stdio.h>
struct attribute {
const char *name;
unsigned short mode;
};
struct bin_attribute {
struct attribute attr;
unsigned int size;
void *private;
};
struct attribute_group {
const char *name;
struct attribute **attrs;
struct bin_attribute **bin_attrs;
};
struct attribute first_attr = {
.name = "FIRST"
};
struct attribute second_attr = {
.name = "SECOND"
};
struct bin_attribute first = {
.attr = first_attr
} ;
struct bin_attribute second = {
.attr = second_attr
};
struct bin_attribute *first_bin_attrs = &first;
struct bin_attribute *second_bin_attrs = &second;
struct bin_attribute *my_bin_attrs[] = { &first_bin_attrs, &second_bin_attrs };
int main(void)
{
struct attribute_group my_group = {
.name = "xyz",
.bin_attrs = my_bin_attrs,
};
return 0;
}
[const를 사용하여 변수를 초기화하려고 할 때 [Initializer 요소가 일정하지 않습니다.] 오류가 발생할 수 있습니다. "(http://stackoverflow.com/questions/3025050/error-initializer-element-is-not-constant-when- 변수를 초기화하려고 시도 함) – Dukeling
오류 메시지가 표시되면 ** !! 항상 오류 메시지를 남기고 확인해야합니다 ** 오류 메시지는 [so] 질문을하기 전에 . – Dukeling
[기타] 경고 메시지는 확실히 [so] 질문에 이상적이지 않습니다. 하나의 질문은 약 하나의 오류 (/ 질문) 여야합니다 (오류가 아니라 경고, 차이점이 있음). [so]에 게시 된 게시물은 많은 사용자에게 장기적인 가치를 제공하기위한 것입니다. 많은 것을 물어서 게시물을 오염 시키면 특정 게시물을 찾을 때이 게시물을 가로 챌 사람은 가볍습니다. 그렇다면 해당 게시물과 관련된 다른 모든 적용 불가능한 정보를 살펴 봐야합니다. 다른 오류. – Dukeling