问题描述
考虑以下代码:
#include <iostream>
struct alignas(1) H1 {
uint8_t f8;
uint64_t f64;
};
#pragma pack(push,1)
struct H3 {
uint8_t f8;
uint64_t f64;
};
#pragma pack(pop)
int main() {
std::cout << "H1 " << sizeof(H1) << std::endl;
std::cout << "H3 " << sizeof(H3) << std::endl;
return 0;
}
输出:
$ ./a.out
H1 16
H3 9
alignas(1)
不会影响H1
的大小,而#pragma
会影响。
相反,alignas(64)
实际上会增加结构的大小。
解决方法
declare
jdoc varchar2 (32767) :=
'{"items": [{"NAME":"AUDI","YEAR":"2000"},{"NAME":"BMW","YEAR":"2010"}]}';
jobj json_object_t;
keys json_key_list;
jarr json_array_t;
begin
jobj := json_object_t (jdoc);
keys := jobj.get_keys;
jarr := jobj.get_array (keys(1));
for ai in 0..jarr.get_size ()-1 loop
jobj := treat (jarr.get(ai) as json_object_t);
keys := jobj.get_keys;
for ki in 1..keys.count loop
dbms_output.put_line (keys(ki)||'='||jobj.get_string (keys(ki)));
end loop;
end loop;
end;
/
PL/SQL procedure successfully completed.
NAME=AUDI
YEAR=2000
NAME=BMW
YEAR=2010
您的程序格式错误。不允许使用<source>:3:8: error: requested alignment is less than minimum alignment of 8 for type 'H1'
struct alignas(1) H1 {
^
1 error generated.
削弱对齐要求。