- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
// 3.7 Position-independent Limitation
// At runtime an MRE program needs to be dynamically loaded into RAM. In other words, the addresses of the variables and functions can be dynamically assigned when they are loaded. This requires that the code be position-independent. If the code needs to determine the addresses at compile time, then it will fail to compile.
// The following code exemplifies this error.
/* 1 */
int a[10], b[10];
struct c {
int* d;
int* e;
};
struct c f = {a, b};
/* 2 */
void func1(void) {}
typedef struct struct1 {
int a;
void (*fun)(void);
} struct1;
struct1 array1[1] = {0, func1};
/* 3 */
char *str = "test";
char * list[] = {"zero", "one", "two"};
// The solution is as follows:
/* 1 */
int a[10], b[10];
struct c {
int* d;
int* e;
};
struct c f;
void init1(void) {
f.d = a;
f.e = b;
}
/* 2 */
void func1(void) {}
typedef struct struct1 {
int a;
void (*fun)(void);
} struct1;
struct1 array1[1];
void init2(void) {
array1[0].a = 0;
array1[0].fun = func1;
}
/* 3 */
char str[] = "test";
char list[][10] = {"zero", "one", "two"};
PA3yMHblu_nemyx 07.06.2019 04:36 # +1
bormand 07.06.2019 08:03 # +1
PA3yMHblu_nemyx 07.06.2019 08:38 # +1
TOPT 07.06.2019 11:35 # +3
O4epegHou_nemyx 07.06.2019 14:51 # +1
O4epegHou_nemyx 07.06.2019 14:52 # +1
Отсосу бамп.
TEH3OPHblu_nemyx 12.07.2019 08:22 # 0
zhigolo 07.06.2019 18:56 # −7
unicorn 08.06.2019 07:06 # 0
666_N33D135 20.02.2022 16:01 # 0
Пускай Зеленый скрасит житие твое
И пусть зажгут все лампы и официанты
Швыряют бриллианты в большой унитааааз
guest6 20.02.2022 17:19 # 0
nepekam 20.02.2022 22:30 # 0