c11: 使用 _Generic 提高 SIGSEGV
c11: use _Generic raise SIGSEGV
这是我的代码,我尝试使用 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")
字符串文字 "smth"
衰减为类型 char*
的指针,它将被转换为 _Generic 的默认子句。你得到值 0,所以你的代码等同于
puts(0);
这没有任何意义,会导致您的程序崩溃。
这是我的代码,我尝试使用 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")
字符串文字 "smth"
衰减为类型 char*
的指针,它将被转换为 _Generic 的默认子句。你得到值 0,所以你的代码等同于
puts(0);
这没有任何意义,会导致您的程序崩溃。