鱼C论坛

 找回密码
 立即注册
查看: 1643|回复: 9

[已解决]一个内联函数程序问题

[复制链接]
发表于 2022-1-11 02:30:33 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 cben 于 2022-1-11 02:47 编辑

Windows 10上用codeblocks代码如下:
#include <stdio.h>

#define ARGUMENTS(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, ...) A11
#define COUNTS(...) ARGUMENTS(FISHC, ## __VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
int main(void)
{
    printf("COUNTS()有 %d 个参数。\n", COUNTS());
    printf("COUNTS(1, 2, 3)有 %d 个参数\n", COUNTS(1, 2, 3));
    printf("COUNTS("Apple", "Banana", "Cat", "Dog")有 %d 个参数\n", COUNTS("Apple","Banana", "Cat", "Dog"));

    return 0;
}
编译不通过,提示最后一个printf有语法错误,不知道怎么修改,请教各位!

最佳答案

查看完整内容

https://baike.baidu.com/item/%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6/86397?fr=aladdin
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 02:30:34 | 显示全部楼层    本楼为最佳答案   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 10:36:45 From FishC Mobile | 显示全部楼层
兄弟 "" 这个开关引号是敏感字符,需要转义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 10:38:19 From FishC Mobile | 显示全部楼层
#include <stdio.h>

#define ARGUMENTS(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, ...) A11
#define COUNTS(...) ARGUMENTS(FISHC, ## __VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

int main(void)
{
    printf("COUNTS()有 %d 个参数。\n", COUNTS());
    printf("COUNTS(1, 2, 3)有 %d 个参数\n", COUNTS(1, 2, 3));
    printf("COUNTS(\"Apple\", \"Banana\", \"Cat\", \"Dog\")有 %d 个参数\n", COUNTS("Apple","Banana", "Cat", "Dog"));

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-11 13:01:52 | 显示全部楼层
傻眼貓咪 发表于 2022-1-11 10:38
#include

#define ARGUMENTS(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, ...) A11

新手,不明白为什么加这么多\,可以说一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 13:55:20 From FishC Mobile | 显示全部楼层
你的代码一点也不像新手啊


printf("hello"); // 这里正常打印 hello
printf("wel"come"); // 这里报错,因为字符串是以 " 符作为开始和结束的,当你只是想打印 " 符时,你必须转义,系统才会知道,这个是你要打印的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-11 14:07:23 | 显示全部楼层
傻眼貓咪 发表于 2022-1-11 13:55
printf("hello"); // 这里正常打印 hello
printf("wel"come"); // 这里报错,因为字符串是以 " 符作为 ...

感谢,请问详细转义的详细规则是什么?比如这个程序,为什么加\,加几个,加在什么地方等等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 14:38:39 | 显示全部楼层
本帖最后由 人造人 于 2022-1-11 14:46 编辑
cben 发表于 2022-1-11 14:07
感谢,请问详细转义的详细规则是什么?比如这个程序,为什么加\,加几个,加在什么地方等等


如果一个东西正常情况下无法出现的时候就需要转义
例如,你要在字符串中表示换一行,要怎么做?直接按回车键吗?
不行,因为双引号之间的内容不能有多行
所以要用 \n 来表示换行
没办法,因为在字符串中你不能直接按回车键来表示换行
在字符串中要出现双引号 "\""
还有在单个字符中要出现单引号 '\''

没办法,因为在某些情况下,你不能直接按下某个键来表示,这会导致语法错误,只能再引入一个规则来修复这个问题,引入转义字符这个规则
还有一些字符,你键盘上根本就没有,你要怎么表示这些字符,键盘上就没有这些键,你怎么在计算机中表示?

能理解吗?其实就是用转义字符来修复之前规则的一些问题
问你,如果没有转义字符,你要怎么在字符串中表示换行这一动作?
直接按回车键肯定是不行
如果不使用转义字符,你怎么表示换行,你怎么表示这些特殊的字符
下面这程序是错的,因为双引号之间不能按回车键
#include <stdio.h>

int main(void) {
    const char *str = "
";
    puts(str);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-11 14:49:10 | 显示全部楼层
我改了几个(好多个)错别字,你再重新看一遍吧
ps: 这神奇的输入法,没办法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-11 15:10:08 | 显示全部楼层
人造人 发表于 2022-1-11 14:49
我改了几个(好多个)错别字,你再重新看一遍吧
ps: 这神奇的输入法,没办法

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 17:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表