【随手记】vscode中C语言满足K&R风格的方法

由于生产需求,需要将编码风格改为K&R,为了方便,决定直接去修改vscode来满足

主要需要修改如下两个文件 settings.json 和 c.json

bash 复制代码
#settings.json
{
    "workbench.settings.applyToAllProfiles": [
        "C_Cpp.suggestSnippets",
        "editor.snippetSuggestions"
    ],
    "[c]": {
    "editor.snippetSuggestions": "top"
	},
	"C_Cpp.suggestSnippets": false
}
bash 复制代码
#c.json
{
  // ===== 基础控制结构 =====
  "K&R if": {
    "prefix": "if",
    "body": [
      "if (${1:condition}) {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style if statement"
  },
  "K&R if-else": {
    "prefix": "ifelse",
    "body": [
      "if (${1:condition}) {",
      "\t${2}",
      "} else {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style if-else"
  },
    "K&R multi if-else if": {
    "prefix": "ifelif",
    "body": [
      "if (${1:condition1}) {",
      "\t${2}",
      "} else if (${3:condition2}) {",
      "\t${4}",
      "} else {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style multi-condition if-else if"
  },
  "K&R for loop": {
    "prefix": "for",
    "body": [
      "for (${1:int i = 0}; ${2:i < N}; ${3:i++}) {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style for loop"
  },
  "K&R while loop": {
    "prefix": "while",
    "body": [
      "while (${1:condition}) {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style while loop"
  },
  "K&R do-while": {
    "prefix": "do",
    "body": [
      "do {",
      "\t${0}",
      "} while (${1:condition});"
    ],
    "description": "K&R style do-while loop"
  },
  "K&R switch": {
    "prefix": "switch",
    "body": [
      "switch (${1:variable}) {",
      "\tcase ${2:value}:",
      "\t\t${3}",
      "\t\tbreak;",
      "\t",
      "\tdefault:",
      "\t\t${0}",
      "}"
    ],
    "description": "K&R style switch statement"
  },
  
  // ===== 函数定义 =====
  "K&R function": {
    "prefix": "func",
    "body": [
      "${1:void} ${2:function_name}(${3}) {",
      "\t${0}",
      "}"
    ],
    "description": "K&R style function definition"
  },
  "K&R main function": {
    "prefix": "main",
    "body": [
      "int main(int argc, char *argv[]) {",
      "\t${0}",
      "\treturn 0;",
      "}"
    ],
    "description": "K&R style main function"
  },
  
  // ===== 复合结构 =====
  "K&R struct": {
    "prefix": "struct",
    "body": [
      "struct ${1:name} {",
      "\t${0}",
      "};"
    ],
    "description": "K&R style struct definition"
  },
  "K&R typedef struct": {
    "prefix": "tstruct",
    "body": [
      "typedef struct {",
      "\t${0}",
      "} ${1:name};"
    ],
    "description": "K&R style typedef struct"
  },
  "K&R enum": {
    "prefix": "enum",
    "body": [
      "enum ${1:name} {",
      "\t${2:FIRST},",
      "\t${3:SECOND},",
      "\t${0}",
      "};"
    ],
    "description": "K&R style enum definition"
  },
  
  // ===== 错误处理 =====
  "K&R error check": {
    "prefix": "check",
    "body": [
      "if (${1:error_condition}) {",
      "\t${2:/* Handle error */}",
      "\t${0}",
      "}"
    ],
    "description": "K&R style error checking"
  },
  "K&R return error": {
    "prefix": "returnerr",
    "body": [
      "if (${1:error_condition}) {",
      "\treturn ${2:error_code};",
      "}"
    ],
    "description": "K&R style return on error"
  },
  
  // ===== 内存管理 =====
  "K&R malloc": {
    "prefix": "malloc",
    "body": [
      "${1:type} *${2:ptr} = malloc(sizeof(${1}) * ${3:count});",
      "if (${2} == NULL) {",
      "\t${4:/* Handle allocation error */}",
      "\t${0}",
      "}"
    ],
    "description": "K&R style malloc with error check"
  },
  
  // ===== 文件操作 =====
  "K&R file open": {
    "prefix": "fopen",
    "body": [
      "FILE *${1:fp} = fopen(${2:\"filename\"}, ${3:\"r\"});",
      "if (${1} == NULL) {",
      "\tperror(\"Error opening file\");",
      "\t${0}",
      "}"
    ],
    "description": "K&R style file open with error check"
  },
  
  // ===== 其他常用结构 =====
  "K&R ternary": {
    "prefix": "tern",
    "body": [
      "(${1:condition}) ? ${2:true_value} : ${3:false_value}"
    ],
    "description": "K&R style ternary operator"
  },
  "K&R function pointer": {
    "prefix": "fptr",
    "body": [
      "${1:return_type} (*${2:func_ptr})(${3:params}) = ${4:function};"
    ],
    "description": "K&R style function pointer"
  }
}

效果如下:

相关推荐
Yue丶越9 分钟前
【C语言】深入理解指针(二)
c语言·开发语言·数据结构·算法·排序算法
奔跑吧邓邓子2 小时前
【C语言实战(77)】STM32实战:解锁传感器数据采集的C语言奥秘
c语言·stm32·开发实战·传感器数据采集
小刘爱玩单片机2 小时前
【stm32简单外设篇】- 土壤湿度传感器
c语言·stm32·单片机·嵌入式硬件
小龙报3 小时前
算法通关指南:数据结构和算法篇 --- 队列相关算法题》--- 1. 【模板】队列,2. 机器翻译
c语言·开发语言·数据结构·c++·算法·学习方法·visual studio
晨非辰3 小时前
【数据结构初阶】--从排序算法原理分析到代码实现操作,参透插入排序的奥秘!
c语言·开发语言·数据结构·c++·算法·面试·排序算法
2301_795167207 小时前
玩转Rust高级应用 如何避免对空指针做“解引用”操作,在C/C++ 里面就是未定义行为
c语言·c++·rust
不染尘.12 小时前
2025_11_7_刷题
开发语言·c++·vscode·算法
ben9518chen12 小时前
嵌入式Linux C语言程序设计九
linux·c语言
下午见。13 小时前
C语言结构体入门:定义、访问与传参全解析
c语言·笔记·学习
cs麦子13 小时前
C语言--函数(function)
c语言·开发语言