c11:使用_Generic raise SIGSEGV

时间:2015-11-16 10:54:52

标签: c macros c11

这是我的代码,我尝试了here

中的示例代码
#include <stdio.h>

#define type_idx(T) _Generic( (T), char: 1, int: 2, long: 3, default: 0)

int main(int argc, char *argv[]) {
    puts(type_idx("smth"));
}

clion的输出是:

/home/roroco/.CLion12/system/cmake/generated/c9a7a4c5/c9a7a4c5/Debug/ex/ex
Signal: SIGSEGV (Segmentation fault)

这是我的CMakeLists.txt

cmake_minimum_required(VERSION 3.3)
project(c)

set(CMAKE_C_COMPILER /usr/bin/gcc-4.9)
set(CMAKE_CXX_COMPILER /usr/bin/g++-4.9)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

1 个答案:

答案 0 :(得分:4)

字符串文字"smth"衰变为类型char*的指针,它将被转换为_Generic的默认子句。您得到值0,因此您的代码等同于

puts(0);

这没有任何意义,会导致程序崩溃。