At first I tried this, but the program crashes because sizeof(&list[0]) is not the same in XC and C so the types don't match. I wonder if the compiler should produce a warning:
Code: Select all
// string-constant.xc
// xcc -target=XS1-L4A-64-TQ48-C4 string-constant.xc string-constant.c
#include <stdio.h>
extern "C" {
void print_str_list(const char* list[], size_t size);
}
int main()
{
const char* restrict list[] = {
"fee", "fi", "foo", "bar",
};
print_str_list(list, sizeof(list) / sizeof(list[0]));
return 0;
}
Code: Select all
// string-constant.c
#include <stdio.h>
void print_str_list(const char* list[], size_t size)
{
for (int i = 0; i < size; i += 1)
{
printf("%s\n", list[i]);
}
}
Unsafe works:
Code: Select all
// string-constant.xc
// xcc -target=XS1-L4A-64-TQ48-C4 string-constant.xc string-constant.c
#include <stdio.h>
extern "C" {
void print_str_list(const char* list[], size_t size);
}
int main()
{
unsafe
{
const char* unsafe list[] = {
"fee", "fi", "foo", "bar",
};
print_str_list(list, sizeof(list) / sizeof(list[0]));
}
return 0;
}
Code: Select all
// string-constant.c
#include <stdio.h>
void print_str_list(const char* list[], size_t size)
{
for (int i = 0; i < size; i += 1)
{
printf("%s\n", list[i]);
}
}