Я хочу создать структуру в C с начальными значениями, например:
typedef struct {
    int id = 0;
    char *name = "none";
} employee;
Я знаю, что это невозможно, есть ли другой способ сделать это?
Я хочу создать структуру в C с начальными значениями, например:
typedef struct {
    int id = 0;
    char *name = "none";
} employee;
Я знаю, что это невозможно, есть ли другой способ сделать это?
вы не можете сделать это таким образом
Используйте вместо этого
typedef struct
{
   int id;
   char* name;
}employee;
employee emp = {
.id = 0, 
.name = "none"
};
Вы можете использовать макросы define и инициализировать свои экземпляры. это облегчит вам каждый раз, когда вы хотите определить новый экземпляр и инициализировать его.
typedef struct
{
   int id;
   char* name;
}employee;
#define INIT_EMPLOYEE(X) employee X = {.id = 0, .name ="none"}
и в вашем коде, когда вам нужно определить новый экземпляр с типом сотрудника, вы просто вызываете этот макрос следующим образом:
INIT_EMPLOYEE(emp);
Структура - это тип данных. Вы не даете значения типу данных. Вы даете значения экземплярам/объектам типов данных. 
Так что это невозможно в C.
Вы можете сделать:
struct employee_s {
  int id;
  char* name;
} employee_default = {0, "none"};
typedef struct employee_s employee;
И тогда вам просто нужно запомнить инициализацию по умолчанию, когда вы объявляете новую переменную сотрудника:
employee foo = employee_default;
Кроме того, вы всегда можете создать структуру своего сотрудника с помощью функции factory.
Если вы используете gcc, вы можете дать designated initializers при создании объекта.
typedef struct
{
   int id=0;
   char* name="none";
}employee;
employee e = 
{
 .id = 0;
 .name = "none";
};
Или просто используйте как инициализацию массива.
 employee e = {0 , "none"};
Вы можете реализовать функцию инициализации:
employee init_employee() {
  empolyee const e = {0,"none"};
  return e;
}
Тем более, чтобы добавить существующие ответы, вы можете использовать макрос, который скрывает инициализатор структуры:
#define DEFAULT_EMPLOYEE { 0, "none" }
Затем в вашем коде:
employee john = DEFAULT_EMPLOYEE;
Вы можете использовать комбинацию функции препроцессора C с varargs, сложные литералы и назначенные инициализаторы для максимального удобства:
typedef struct {
    int id;
    char* name;
} employee;
#define EMPLOYEE(...) ((employee) { .id = 0, .name = "none", ##__VA_ARGS__ })
employee john = EMPLOYEE(.name="John");  // no id initialization
employee jane = EMPLOYEE(.id=5);         // no name initialization