
编程语言
文章平均质量分 69
程序员小迷
从前有只猫,它不去抓老鼠,而是想吃面包店的面包,最终它变成了人.
展开
-
软件都用哪些编程语言写的?我心目中最友好的编程语言?编程语言风格?Swift编程语言?
软件都用哪些编程语言写的?我心目中最友好的编程语言是什么?各种变成语言的分格?Swift编程语言的特点及兼容性是什么?原创 2025-06-07 13:51:17 · 449 阅读 · 0 评论 -
为什么有的编程语言允许字符串和整数相加?字符串和整数比较?字符串拼接?格式串详解?字面量?
本文探讨了编程语言中字符串和数值类型的操作差异及格式化输出。主要内容包括:1. 语言对字符串与整数相加的不同处理方式,如C#/Java的隐式转换与Swift的类型安全要求;2. 字符串比较的合法性差异,C允许而Python禁止;3. 主流语言的字符串拼接方法对比;4. 格式化字符串详解,涵盖对齐、小数位、不同进制等输出格式;5. 字面量的类型规则及范围限制。文章通过具体代码示例,展示了不同语言在类型操作上的设计哲学和实现差异,为开发者理解语言特性提供了实用参考。原创 2025-06-01 11:45:08 · 788 阅读 · 0 评论 -
求余或求模有负数参与, 不同语言结果不同?编程语言运算符?基本运算?
不同编程语言在处理负数参与求余或求模运算时,结果可能不同,这主要取决于各语言采用的取整规则。例如,C语言等采用“向零取整”规则,而Python则采用“向下取整”规则。C语言从C99标准开始,规定了当除数和被除数有负数时,商和余数的符号行为。此外,不同语言对运算符的支持和优先级也有所不同,如Python使用“/”进行全除,“//”进行整除,而VB则使用“/”进行浮点除法。这些差异要求开发者在跨语言编程时需特别注意,以确保运算结果的正确性。原创 2025-05-18 10:33:53 · 890 阅读 · 0 评论 -
哪些编程语言支持字符串插值?字符串拼接?为什么有的编程语言允许字符串和整数相加?字符串操作?
文章探讨了不同编程语言对字符串插值的支持情况及其实现方式。字符串插值是一种将变量或表达式嵌入字符串的技术,许多现代编程语言如C#、Python、Swift、JavaScript等均支持此功能,而C、C++、Java等则通过其他方式模拟。文章还讨论了字符串插值与其他技术的组合、其本质、以及字符串拼接和类型转换等操作。不同语言对字符串操作的支持程度各异,反映了各自的设计哲学和用户需求。原创 2025-05-18 10:19:08 · 655 阅读 · 0 评论 -
连续赋值?多变量初始化?变量初始化?赋值运算符?
文章探讨了编程语言中多变量初始化和赋值运算符的使用。首先,介绍了连续赋值和不同类型的多变量初始化方法,如C语言中的i=j=k=0,以及Swift和Rust中的元组初始化。接着,讨论了如何在初始化时省略部分变量,以及不同编程语言中变量初始化的形式,如C++的指派初始化器和Python的简单赋值。此外,文章还比较了赋值运算符=和相等比较运算符==的区别,并指出了一些编程语言中可能出现的误用情况。最后,提到了C语言早期的一些复合赋值运算符,如=+,并强调了正确使用赋值运算符的重要性。原创 2025-05-17 10:07:59 · 989 阅读 · 0 评论 -
布尔(bool)类型的起源?布尔类型?整数和布尔类型作为条件真假?逻辑运算符?
布尔类型起源于英国数学家布尔,他成功地将逻辑运算与数学结合,因此用“布尔”表示逻辑的“真”和“假”。布尔类型最早在编程语言Algol 60中提出。早期的编程语言如C/C++使用整数表示布尔值,0为False,非0为True。随着编程语言的发展,布尔类型被明确为一种独立的数据类型,如C++中的bool、Java中的boolean等,以减少与数值的直接运算。不同编程语言在布尔类型的实现上有所差异,例如Ruby中0代表真,而Python中空容器和空字符串被视为假。逻辑运算符如&&、||、!用于判断原创 2025-05-17 09:57:07 · 516 阅读 · 0 评论 -
隐式/显式类型转换?编程语言的类型转换?其它类型转换成数值类型?其它类型转换成字符串?类型转换?
文章摘要:本文探讨了编程语言中的类型转换,包括隐式和显式转换。隐式转换由编译器自动完成,常用于简化不同类型变量的互操作,但可能带来风险。显式转换需要程序员手动进行,如C#中的强制转换,但并非总是成功。文章还讨论了数值与布尔类型的转换、浮点数与整数的转换、以及在不同编程语言中类型转换的具体实现和注意事项。此外,还涉及了父类与子类的转换、枚举的使用,以及如何检测数据类型。最后,文章提供了关于类型转换的API和编程技巧,帮助读者更好地理解和应用类型转换。原创 2025-05-11 09:51:31 · 949 阅读 · 0 评论 -
short变量赋值为32768, 实际为什么是-32768?不同语言的不同进制字面量?字面量?编程语言的基本类型?
在编程中,short类型变量赋值为32768时实际为-32768,原因是32768超过了short类型(2字节)的最大值32767,导致溢出,变为-32768。不同编程语言支持不同进制的字面量表示,如十进制、八进制、十六进制和二进制,部分语言还支持特定前缀表示不同进制。字面量是直接表示值的常量,广泛用于各种编程语言中,其默认类型通常是int或double,但超出默认类型范围的字面量可能引发错误或溢出。编程语言的基本类型大同小异,常见的有整型、浮点型、字符型等,某些语言还提供无符号类型和其他扩展类型。原创 2025-05-10 10:21:52 · 453 阅读 · 0 评论 -
Ctrl + D是如何与内核文件结束符对应的?如何模拟文件结束符?数字中间为什么不能插入空格或逗号?丰富多彩的语句结束符或分隔符?语句结束符?
在Unix/Linux系统中,Ctrl+D用于表示输入流结束,对应内核的文件结束符EOF。Windows系统则使用Ctrl+Z实现相同功能。模拟文件结束符可通过发送ASCII码4(EOT)实现。许多编程语言如C++、Java、C#、JavaScript等支持在数值中使用下划线_作为分隔符以增强可读性。数字中间不能插入空格或逗号,因为这增加了编译器解析的复杂性。不同编程语言使用不同的语句结束符,如分号、换行符或冒号。误用分号可能导致逻辑错误,尤其是在条件语句中。SQL语言支持更改语句分隔符,而其他语言如C/C原创 2025-05-10 09:57:33 · 1009 阅读 · 0 评论 -
/*和/ *的差异?为什么不支持嵌套注释?注释/*和//的起源?为什么注释不能在字符或者字符串中?丰富多彩的注释形式?
/ 最早是BCPL作为单行注释,后来C++也以它作为单行注释,C89并未用它,直到C99标准才吸纳//. 需要注意,编程语言理论上可以选择任何不冲突的字符作为注释符,C系语言延续/*和//只是为了兼容和省事。原创 2025-05-05 09:51:34 · 860 阅读 · 0 评论 -
编程语言一定需要main函数吗?函数入口一定是main吗?main方法可以是private私有?main函数一定返回int吗?exit(n)并不完全等价main函数return (n)?
为了配合shell获取返回值,一般而言shell认为程序返回值为0代表正确,非0代表失败。原创 2025-05-04 08:54:56 · 1070 阅读 · 0 评论 -
%d和%i的区别?%l %h和%d %o %u %x?%a和%A格式串?C语言是如何区分开%f和%lf的?为什么%lx会将lx作为格式串, %fx只会将f作为格式串?万能格式串?
区分开它们是实现在libc. 具体到scanf函数执行时,libc会检查格式串是否包含%符号,如果有,继续从已知的格式串中枚举,发现单个f,就把输入当成float类型大小(一般为4字节),发现是lf组合,就把输入当成double类型大小(一般8字节)。libc解析格式串是按预定义的格式,当看到%l的时候,会向后查看是否是d/x/i/f等字符,但看到%g的时候就知道后面不管是任何格式都不是支持的,就会当做浮点数解析,当然后面的x当做原字符输出。在C语言中,假设short是2字节,%hd只会获取2个字节数据。原创 2025-05-02 10:12:35 · 1298 阅读 · 0 评论 -
数字中间为什么不能插入空格或逗号?编程语言标识符为什么不能以数字开头?哪些编程语言支持数值中插入分隔符更容易看清楚?数据的二进制形式?Decimal类型?不同语言的不同进制字面量?
你可能会困惑,C#也允许数值中有多个连续的下划线,其实本质上,编译器在解析数值字面量直接忽略下划线,所以多个连续下划线不影响解析,例如 1__200.一般一个八进制字面量中包含超过8的数字,显然是不合法的。原创 2025-04-26 08:39:31 · 920 阅读 · 0 评论 -
为什么scanf(“%c“, &c)有时发现c根本不是想象中的字符?小键盘的Enter和大键盘的Enter的区别?%d和%i的区别?C语言是如何区分开%f和%lf的?输入输出返回值倒底是多少?
很可能在输入的时候,带入了空格等其他字符,导致将不预期的字符传入c. 解法是在%c前面加上空格,即scanf(" %c", &c)可以提醒libc忽略前导的空格、回车、TAB等字符。若文章对您有帮助,欢迎关注。原创 2025-04-20 10:23:45 · 980 阅读 · 0 评论 -
为什么很多编程语言判等用==而不是=?数组判等?不同编程语言的判等?赋值运算符?关系运算符?
大部分编程语言"="是赋值,"=="是相等。一个常见的疑问是,赋值运算符"="和数学的相等是一个符号,这会产生误解吗?用”=”当做赋值,”==”相等也是有道理的。用"="当做赋值,"=="相等也是有道理的。原创 2025-04-20 10:11:38 · 944 阅读 · 0 评论 -
为什么浮点数会搞出Infinity和NAN两种类型?浮点数的底层原理?IEEE 754标准揭秘?
NAN全称是NotaNumber,常在浮点数运算中使用,首次引入NaN的是1985年的IEEE 754浮点数标准。如除以零、求负数的平方根等错误的操作,会返回NAN. 例如可以求一个负数的平方根,结果用isnan函数(来自math.h)返回真。原创 2025-04-19 10:44:41 · 980 阅读 · 0 评论 -
RTTI机制的原理?不同语言类型转换的底层原理?如何判断一个对象是否是某个类或者其子类?
一般而言,编译器会生成对应类的相关讯息,并让创建的对象指向相应的讯息,保存在内存中。当然,有时,我们希望手动转换一个变量的类型,让其变成常量,可以利用编译器提供的cast方法。若文章对您有帮助,欢迎关注。原创 2025-04-19 10:08:04 · 560 阅读 · 0 评论 -
为什么宏定义的末尾加分号可能是错误的?宏定义一定需要在源代码中吗?同一个文件可以有相同的宏名称不同的定义吗?让int变成short?宏?
宏本质是文本替换,加上分号可能是误解成宏定义是一条语句,很可能造成编译错误。但是,如果是希望源代码不想额外增加分号结尾,宏定义末尾加分号是合理的。这样,LOG_HERE本身就包含分号结尾,不需要额外加分号就是一条语句。不一定,编译器提供从命令行带入宏的方式。GCC/Clang提供-DMAX_VALUE或-DMAX_VALUE的方式,可以设置宏文本,-DMAX_VALUE=10或-DMAX_VALUE=10.MSVC采用/DMAX_VALUE的写法。可以的。原创 2025-03-30 10:55:31 · 537 阅读 · 0 评论 -
C语言宏和Rust宏的区别?用AND替换&&?新类型?_GNU_SOURCE?如何知道g++编译默认会定义_GNU_SOURCE?ifdef和#if defined的区别是什么?
可以通过g++ --verbose选项查看g++定义了哪些宏。原创 2025-03-29 10:57:00 · 1106 阅读 · 0 评论 -
编程语言一定需要main函数吗?函数入口一定是main吗?main方法可以是private私有吗?main函数一定返回int吗?exit(n)并不完全等价main函数return (n)?
为了配合shell获取返回值,一般而言shell认为程序返回值为0代表正确,非0代表失败。原创 2025-03-09 11:14:07 · 709 阅读 · 0 评论 -
C#: String s = new String(“Hello“)无法编译?编程语言字符集有两个?为什么这种变量名“\u0061\u0062”都能编译通过?
C# String类型是literal常量,默认不能用new创建,但可以在unsafe下用char *字符串指针创建。原创 2025-02-16 11:04:06 · 1037 阅读 · 0 评论 -
多继承的困扰?为什么会设计类protectd访问权限?基类?怎么理解子类和父类的继承权限public protected private?
C++多继承的设计其实会产生极为复杂的结果,当继承层数超过3,应该调用哪一个基类的哪个函数就可能不好分辨了。大部分更现代的编程语言,都不支持多继承。原创 2025-02-16 10:45:48 · 383 阅读 · 0 评论 -
可变参数其实不复杂?参数默认值?函数默认参数?函数参数?未初始化的变量?
小伙伴们听到可变参数,可能会觉得里面包含各种类型和不定数量的变量,实现起来是不是不容易。事实上,可变参数的实现反而是很简单的。原创 2025-02-15 11:47:11 · 777 阅读 · 0 评论 -
void f(const int n)和void f(int n)为什么是重定义?C++成员函数为什么可以有const和非const版本?为什么C#有const和readonly两种常量关键字?
函数参数用const修饰,const不影响函数签名,所以这样的函数定义是重定义。编译器看到参数有const,只是为了确保代码不会意外传入非const参数,而并不是生成了一个带const区分符的不同函数。它与类const成员函数不同,这是用于区分const对象和非const对象。原创 2025-02-15 11:39:56 · 750 阅读 · 0 评论 -
const描述符可修饰全局函数吗?为什么C#有const和readonly两种常量关键字?C++成员函数为什么可以由const和非const版本?const常量的不同形式?
C++可以用const修饰成员函数,表示成员函数不会修改任何类成员,这是安全的编码习惯。注意,这仅仅适用于类的成员函数,如果是形如C语言的全局函数,是不可以用const修饰。但,const可以修饰函数参数。原创 2025-02-09 11:18:01 · 880 阅读 · 0 评论 -
ObjC支持函数重载吗?函数重载?如何看待C语言整数求绝对值有三套API?
不管是C89/C99还是C11,都不支持函数重载。ObjC遵循C标准,全局函数默认也不支持重载。但是,类成员方法名称可以加标签label, ObjC可利用label实现"重载",如下。注意,如果只有一个参数,函数名默认是第一个标签,就没办法实现重载了。原创 2025-02-09 11:09:58 · 396 阅读 · 0 评论 -
为什么会有函数调用参数带标签的写法?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?函数参数?
ObjC函数参数形式与众不同,实参前会加前缀,尤其参数很多的情况,可读性很强。例如:这种参数前面加前缀描述也被叫标签(Label). 注意,要把标签和函数签名区分开,函数签名是更大的名词,包含函数名称、参数的组合。当然,也可以对第二个之后的参数不加前缀,形如: [person setAge: 29 :1 : 35];如果是C++代码,参数很多,有时会记不清参数位置。C#较新版本同样引入了如上的类似ObjC的函数调用语法增强可读性。原创 2025-02-04 11:00:41 · 1072 阅读 · 0 评论 -
static成员变量的本质?静态变量?静态类有什么意义?全局变量?类函数?
面向对象编程语言喜欢将全局变量转移到类内部变成static变量,看起来不像全局变量。事实上,编译器会将static成员变量和全局变量看做的一样的,编程语言的写法减少程序员随意操作全局变量的可能,虽然事实上它们就是全局变量。ObjC类不支持static变量,可以用C语言全局变量的方式来实现static变量。原创 2025-02-04 10:54:29 · 883 阅读 · 0 评论 -
为什么会设计类protected访问权限?怎么理解子类和父类的继承权限public protected private?ObjC类方法默认权限public?Swift权限控制?Kotlin访问修饰符?
一个人会让房子给他的儿子或者女儿住,但是外人不能随便去住,这就是protected访问权限的典型代表。ObjC语言是鲜有的设计默认实例成员是protected访问权限,C++默认是private. C++的设计比较common, 从语言语法角度,private是最安全的,ObjC很可能是受到GUI界面和类库继承体系的使用影响,设计成protected可以方便子类使用。原创 2025-02-03 11:01:56 · 693 阅读 · 0 评论 -
为什么会有头文件循环依赖?搜索路径?头文件包含?如何包含头文件最多只有一次?
有头文件的编程语言体系中,头文件的本意是给其他文件提供基本的类型、声明或者宏等讯息供参考,让编译器知晓这些类型讯息。一般的原则是,越是common的头文件会被其他头文件依赖,即xxx.h很可能会包含common.h. 但定义common以及不同头文件的依赖很可能陷入一个困境,大家都想要对方头文件的讯息,这就出现了头文件循环依赖。原创 2025-02-03 10:49:33 · 1130 阅读 · 0 评论 -
ObjC的nil和NULL?ObjC的@interface和@class?ObjC允许在@implementation中定义实例变量?Swift和ObjC中IBOutlet和IBAction代表什么?
是的,ObjC允许接口@interface和@implementation中同时有实例变量定义,但需要保证一样。ARC引入后,ObjC允许实例变量只在@implementation中定义,@interface中可以不用。原创 2025-02-02 11:15:44 · 318 阅读 · 0 评论 -
哪些编程语言可以运行期创建类?Java .class文件编码和JVM运行期内存编码?明明是一个通用指针类型, 为什么运行期可以找到正确的类对象?RTTI机制的原理?
大部分静态语言都不能支持运行期创建类,越是高级或者解释型语言,对运行期创建类的支持越方便。越高级的语言,有运行时的支持,"虚拟机"记录了所有类的讯息,当然也就容易支持创建类。原创 2025-02-02 11:03:25 · 475 阅读 · 0 评论 -
类一定有基类?编程语言的基类型?基类?明明是一个通用指针类型, 为什么运行期可以找到正确的类对象?多继承的困扰?
不是所有的牛奶都叫特仑苏,也不是所有的类都有基类。原创 2025-02-01 10:58:35 · 719 阅读 · 0 评论 -
ObjC为什么有方括号调用方法的语法?ObjC为什么能实现动态消息传递?Objective C和C语言有什么区别?Swift函数调用的参数传递需要加前缀是否是冗余?函数调用?
object doSomething]的意义和object.doSomething()的意义是完全不同的,也许可以简单理解成都是调用了doSomething方法。事实上,前者代表向object发送doSomething消息,后者则是和C语言类似,代表一个方法调用。前者会将消息发送到一个运行时,运行时将会寻找对应object的对应方法,也许没找到,也许会找到。ObjC增加方括号发送消息,是为了兼容C语言本身的函数调用,不至于出现二选一的境地。原创 2025-02-01 10:47:39 · 476 阅读 · 0 评论 -
.cc扩展名是什么语言?C语言必须用.c为扩展名吗?主流编程语言扩展名?Java为什么不能用全数字的文件名?
cc是C++语言使用的扩展名,一种说法是它是c with class的简写,当然C++语言使用的扩展名不止.cc和.cpp, 还包含.cxx, .c++, .C等,这些在不同编译器系统采用的默认设定不同,需要区分使用。当然,编译器提供编译选项将源代码指定为特定编程语言的方式,例如gcc提供-x c++将源代码指定为c++代码,哪怕源代码扩展名是.java也会被当做c++代码。原创 2025-01-31 11:48:33 · 1335 阅读 · 0 评论 -
如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?
除了在线ObjC编译器,本地环境Windows/Mac/Linux均可以搭建ObjC编译环境。11。原创 2025-01-31 11:42:23 · 1428 阅读 · 0 评论 -
变量声明是否可以放在语句之后?变量声明?声明变量一定需要指定类型吗?函数范围快捷使用临时变量?
早期编程语言都需要指定变量类型,随着编程语言不断发展,新的编程语言允许编译器自动推导变量类型,允许不指定变量类型。对于支持缺省类型的编程语言,初始化可以用缺省类型,但如果是声明,缺省类型就不能缺少。原创 2025-01-30 11:17:05 · 826 阅读 · 0 评论 -
ObjC为什么用@前缀?GCC支持Objective C的故事?什么是Xcode?NSString *s = @“hello“变量s是不可变的吗?NSLog和printf的区别?ObjC和C语言?
Xcode是由苹果公司开发的一个集成开发环境(IDE),主要用于开发macOS、iOS、iPadOS、watchOS和tvOS应用程序。Xcode包含了编译器、调试器、模拟器、图形界面设计(Interface Builder)、代码编辑器、文档和API库等工具,为开发者提供了一个全面的开发和测试平台。Xcode于Mac平台地位等同于Visual Studio于Windows的地位。它可开发Swift、C、C++、Objective-C、Objective-C++等语言,默认采用git版本控制。原创 2025-01-30 11:11:33 · 720 阅读 · 0 评论 -
ObjC为什么能实现动态消息传递?早期的ObjC编译器如何实现的?ObjC和C语言?Objective-C?Objective-C 1.0和2.0有什么区别?
乍看ObjC的消息传递,和普通函数调用没什么区别。Objective-C 利用了其运行时系统(Runtime System)来实现动态消息传递。运行时系统是 Objective-C 的一部分,它允许在运行时动态地添加、修改和查询类和对象。运行时系统提供了动态查找方法实现的能力,当一个对象接收到一个消息时,运行时系统会查找该对象的方法列表,以确定是否有匹配的方法。原创 2025-01-29 19:49:07 · 856 阅读 · 0 评论 -
Cocoa和Cocoa Touch是什么语言写成的?什么是Cocoa?编程语言中什么是框架?为什么苹果公司Cocoa类库有不少NS前缀?Swift编程语言?
Cocoa是苹果操作系统macOS和iOS上的应用程序开发框架集合,核心语言是Objective-C编程语言,在移动平台被称为Cocoa Touch,Cocoa包含多个子框架,其中最重要的包括Foundation和AppKit(macOS上)或UIKit(iOS上).Foundation框架提供了一系列与图形用户界面无关的基本服务,如字符串处理、集合、文件系统操作等。这些服务对于所有类型的应用程序都是必要的基础设施。原创 2025-01-29 19:44:19 · 1341 阅读 · 0 评论