Пробовал __attribute__(__cdecl__) и CMAKE_C_FLAGS " -O0 " не помогли.
void foo (char arg1, int arg2, ... );
В точке вызова foo ('a', 5, 'b', 39, 'c', 46, 'd', 55)
определение
void __attribute__((__cdecl__)) SumIntDouble(char type_code, int arg, ...) {
printf("VIEW: %c\n", *(&type_code + 0));
printf("VIEW: %c\n", *(&type_code + 1));
printf("VIEW: %c\n", *(&type_code + 2));
printf("VIEW: %c\n", *(&type_code + 3));
printf("VIEW: %c\n", *(&type_code + 4));
printf("VIEW: %c\n", *(&type_code + 5));
printf("VIEW: %c\n", *(&type_code + 6));
К адресу первого аргумента добавлял и отнимал 1 в цикле, не видел, чтобы b и c и др. лежали как предполагалось бы, если бы все аргументы ровно рядом лежали бы на стеке.
Смотрел на флаги компилятора, какие-то пробовал, но ни к чему это не привело.
Помогите, пожалуйста, разобраться
cmakelists:
cmake_minimum_required(VERSION 3.5)
project(playgraound_c_lang LANGUAGES C)
set( CMAKE_C_FLAGS " --no-stack-protector -O0 " )
add_executable(playgraound_c_lang main.c)