很多时候看到C/C++的一些奇妙的应用,每次都是惊奇一点时间就随风飘过了 现在我还是决定记录一下这些有意思的东西。
[导读] C语言中宏是非常有价值的语言特性之一,也是面试中必考察的要点之一,本文来分享总结一些关于宏的常见面试问题。希望能帮助到有需要的小伙伴们。
一般来讲函数和宏的使用语法很相似,所以语言本身没法帮我们区分二者,那我们平时的一个习惯是:
#运算符 #运算符将宏的一个参数转换为字符串字面量。它仅允许出现在带参数的宏的替换列表中。 #运算符所执行的操作可以理解为”字符串化“。 当我们有一个变量 int a = 10; 的时候,我们想打印出: the value of a is 10 . 就可以写:
记录一次luaxml编译的解决过程 参考 http://blog.csdn.net/dc_show/article/details/38957991
Xcode现在使用的编译器就是LLVM。LLVM比以前使用的GCC编译器速度快好几倍。并且LLVM可以编译 Kotlin,Ruby,Python,Haskell,Java,D,PHP,Pure,Lua 和许多其他语言。
解决使用ptlib库导致的编译错误qlist.h(98): warning C4003: 类函数宏的调用“realloc”参数不足的问题。 编译错误 D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): warning C4003: 类函数宏的调用“realloc”参数不足D:\Qt\Qt5.12.1\5.12.1\msvc2017\include\QtCore/qlist.h(98): error C2059: 语法错误:“,”D:\Qt\Q
在编译到crypto/dso/dso_win32.c时报了一大堆错误,大概是这些:
用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest ("-Wl"表示是传递给链接器ld的参数,而不是编译器gcc/g++的参数。) 1) 下面是因为没有指定链接参数-lz(/usr/lib/libz.so,/usr/lib/libz.a ) /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_uncompress': /home/software/mysql-5.5.24/mysys/my_compress.c:122: undefined reference to `uncompress' /usr/local/mysql/lib/mysql/libmysqlclient.a(my_compress.c.o): In function `my_compress_alloc': /home/software/mysql-5.5.24/mysys/my_compress.c:71: undefined reference to `compress' 2) 下面是因为没有指定编译链接参数-pthread(注意不仅仅是-lpthraed) /usr/local/mysql/lib/mysql/libmysqlclient.a(charset.c.o): In function `get_charset_name': /home/zhangsan/mysql-5.5.24/mysys/charset.c:533: undefined reference to `pthread_once' 3) 下面这个是因为没有指定链接参数-lrt /usr/local/thirdparty/curl/lib/libcurl.a(libcurl_la-timeval.o): In function `curlx_tvnow': timeval.c:(.text+0xe9): undefined reference to `clock_gettime' 4) 下面这个是因为没有指定链接参数-ldl /usr/local/thirdparty/openssl/lib/libcrypto.a(dso_dlfcn.o): In function `dlfcn_globallookup': dso_dlfcn.c:(.text+0x4c): undefined reference to `dlopen' dso_dlfcn.c:(.text+0x62): undefined reference to `dlsym' dso_dlfcn.c:(.text+0x6c): undefined reference to `dlclose' 5) 下面这个是因为指定了链接参数-static,它的存在,要求链接的必须是静态库,而不能是共享库 ld: attempted static link of dynamic object 如果是以-L加-l方式指定,则目录下必须有.a文件存在,否则会报-l的库文件找不到:ld: cannot find -lACE 6) GCC编译遇到如下的错误,可能是因为在编译时没有指定-fPIC,记住:-fPIC即是编译参数,也是链接参数 relocation R_x86_64_32S against `vtable for CMyClass` can not be used when making a shared object 7) 下面的错误表示gcc编译时需要定义宏__STDC_FORMAT_MACROS,并且必须包含头文件inttypes.h test.cpp:35: error: expected `)' before 'PRIu64' 8) 下面是因为在x86机器(32位)上编译没有指定编译参数-march=pentium4 ../../src/common/libmooon.a(logger.o): In function `atomic_dec_and_test': ../../include/mooon/sys/atomic_gcc.h:103: undefined reference to `__sync_sub_and_fetch_4' 9) 下列错误可能是因为多了个“}” error: expected d
从.c 文件到 .exe 文件需要经过编译器的翻译,而翻译又分为 编译和链接两个部分
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50755251
我们都知道使用const关键字限定一个变量为只读,但它是真正意义上的只读吗?实际中又该如何使用const关键字?在解答这些问题之前,我们需要先理解const关键字的基本使用。本文说明C中的const关键字,不包括C++。
发布于 2018-06-20 05:17 更新于 2018-07-02 12:49
你可以使用 dynamic 来定义一个变量或者字段,随后你可以像弱类型语言一样调用这个实例的各种方法,就像你一开始就知道这个类型的所有属性和方法一样。
std::thread类的构造函数是使用可变参数模板实现的,也就是说,可以传递任意个参数,第一个参数是线程的入口函数,而后面的若干个参数是该函数的参数。
左值是(lvalue)是C++中的一个基本概念。凡是可以出现在赋值运算符左边的表达式都是左值。与左值相对的就是右值(rvalue),凡是可以出现在赋值运算右边的表达式都是右值。左值一定可以作为右值,但反过来不一定成立。
异常 jdk1.7对try--catch--finally的异常处理模式进行了增强,下面我们依次来看增强的方面。 1. 为了防止异常覆盖,给Throwable类增加了addSuppressed方法,可以将一个异常信息追加到另一个异常信息之后: 1 /** 2 * 这是第一种防止前面异常被覆盖的方法,通过在finally块中判断前面是否有异常抛出 3 * 如果有则最终抛出的异常为原来的异常,没有则最终抛出的异常为finally块中的异常。 4 * 此时只能抛
linux文件到windows中出现编译错误,不一定提示conflicting types for错误,可以通过转码的方式修改错误
最近PHP爆出漏洞,老高也在升级PHP版本,并加入一些支持,但是遇到这个问题很蛋疼
const是C语言的关键字,经C++扩充,功能变得强大,用法复杂。const用于定义一个常变量(只读变量)。当const与指针、引用、函数等结合起来使用时,情况会变得更加复杂。下面将从七个方面总结const的用法。
当父类中没有无参构造时,子类继承父类的构造方法中需要显示的调用super(parameter)父类的有参构造
1、什么是泛型? 泛型(Generics )是把类型参数化,运用于类、接口、方法中,可以通过执行泛型类型调用 分配一个类型,将用分配的具体类型替换泛型类型。然后,所分配的类型将用于限制容器内使用的值,这样就无需进行类型转换,还可以在编译时提供更强的类型检查。 2、泛型有什么用? 泛型主要有两个好处: (1)消除显示的强制类型转换,提高代码复用 (2)提供更强的类型检查,避免运行时的ClassCastException 3、泛型的使用 类型参数(又称类型变量)用作占位符,指示在运行时为类分配类型。根据需要,可
concept乃重头戏之一,用于模板库的开发。功能类似于C#的泛型约束,但是比C#泛型约束更为强大。
3)在java程序里,目录中的间隔符可以是正斜线/。反斜线\表示转义字符,所以如果需要在Java【php也一样】程序里用到Windows平台上的反斜线\作为目录间隔符,必须是双反斜线\\。
在JAVA8之前java中的接口类型旨在定义类型的接口规约,并不能拥有自己的方法实现,具体实现完全交由实现类自己完成。
对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。(类的每一个实例都共享这一个成员)无论这个类的对象被定义了多少个,静态数据成员在程序中只有一份拷贝,由该类型的所有对象共享访问。(包括派生类的对象)。这种需求我们还是经常有的。
根据文章内容为该文撰写摘要总结。
Java注解是JDK1.5引入的一种注释机制,它不会改变编译器的编译方式,Java编译器对包含注解和不包含注解的代码会生成相同的Java虚拟机指令。在实际应用中,注解只是一种标识,具体的操作需要借助其他工具来解析和处理。
本文代码测试环境为“GCC-9.1.0”,有关编译器的安装请参考《安装GCC-8.3.0及其依赖》,适用于“GCC-9.1.0”。
============================================================================= 涉及到的知识点有:include有两种用法、{}大括号用法解释、C语言自定义名字的要求、 c语言库函数printf的解释、编译错误有两种、调用system函数、c语言编译过程、 操作系统结构、指令集中的cpu架构 、QT常用快捷键、vs常用快捷键
从字面意思可以看出,指针是一个常量,也就是地址不能被修改。 int* const p 特点是指针指向的数值可以改变,然而指针所保存的地址却不可以改变。
如果是加了分号的情况,等替换后,if和else之间就是2条语句,⽽没有⼤括号的时候,if后边只能有⼀条语句,这⾥会出现语法错误。
C++ 接口是通过抽象类来实现的,这些抽象类不应与数据抽象混淆,数据抽象的概念:概念结构是对现实世界的一种抽象,从实际的人、物、事和概念中抽取所关心的共同特性,忽略非本质的细节,把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
前面我提到过,凡是前面带有#符号的,都是编译预处理指令,也就是在编译阶段就执行的语句。
网上主要介绍了python方式编译安装jsoncpp,但它的官网有介绍cmake安装命令行安装方式,以下笔记在SUSE Linux g++ 4.1.0上经过验证。 使用cmake生成Makefile文件,类似于执行automake的“configure”: cmake -DBUILD_STATIC_LIBS=ON -DBUILD_SHARED_LIBS=OFF -DINCLUDE_INSTALL_DIR=/usr/local/thirdparty/jsoncpp-0.10.2/include -DARCHIVE_INSTALL_DIR=/usr/local/thirdparty/jsoncpp-0.10.2/lib 这一步成功后,可以看到产生了Makefile文件,之后就可以执行“make”编译和“make install“安装了。 “cmake”参数说明: INCLUDE_INSTALL_DIR为指定“头文件”的安装目录 ARCHIVE_INSTALL_DIR为指定“静态库文件”的安装目录 LIBRARY_INSTALL_DIR为指定“共享库文件”的安装目录 RUNTIME_INSTALL_DIR为指定“可执行程序文件”的安装目录 BUILD_STATIC_LIBS=ON 表示生成静态库文件 BUILD_SHARED_LIBS=OFF 表示不生成共享库文件 如果想编译成debug版本,则加上“-DCMAKE_BUILD_TYPE=debug”。 遇到的编译错误1: include/json/config.h:100: error: ISO C++ does not support 'long long' include/json/config.h:101: error: ISO C++ does not support 'long long' 解决方法: 修改include/json/config.h,将下面一段 #if defined(_MSC_VER) // Microsoft Visual Studio typedef __int64 Int64; typedef unsigned __int64 UInt64; #else // if defined(_MSC_VER) // Other platforms, use long long typedef long long int Int64; typedef unsigned long long int UInt64; #endif // if defined(_MSC_VER) 修改成: #if defined(_MSC_VER) // Microsoft Visual Studio typedef __int64 Int64; typedef unsigned __int64 UInt64; #else // if defined(_MSC_VER) // Other platforms, use long long __extension__ typedef long long int Int64; __extension__ typedef unsigned long long int UInt64; #endif // if defined(_MSC_VER) 注意要加“__extension__”修饰,因为“long long”是C99标准中的,“__extension__”表示启用g++的扩展。 遇到的编译错误2: /tmp/X/jsoncpp-0.10.2/src/test_lib_json/main.cpp:1243: error: integer constant is too large for 'long' type 解决方法: 测试代码,可直接注释掉1243一行代码。
本节主要介绍程序运行前的预处理(预编译)阶段的相关知识。同时简单介绍一个程序是如何从一行行代码到开始运行并得到结果的。
定义一个时间类,包含私有属性:时、分、秒,要求加入属性的get方法,其他函数根据需要自己定义。
C# 是一门静态类型的语言,它在定义变量时要明确给出变量的类型。例如在int i = 5这样的代码中,int就是变量i的类型,如果定义变量时没有明确指定变量的类型,则这样的代码是通过不了编译的
@NoArgsConstructor@RequiredArgsConstructor@AllArgsConstructor
作为一名致力于简化复杂技术、助您快速上手实践的博主,本文将带您深入浅出地理解C++内存模型的核心概念,掌握智能指针的正确用法,并通过实战代码示例演示如何避免常见的内存管理问题。无论您是初学者还是寻求提升的开发者,都将从中获得实用的知识与技能。
OpenJDK中的Coin项目的目的是维护对Java语言所做的语法增强。 在Coin项目开始之初,曾经广泛地向社区征求提议。在短短的一个月时间内就收到了近70条提议。最后有9条提议被列入考虑之中。在这9条提议中,有6条成为Java 7的一部分,剩下的2条提议会在Java 8中重新考虑,还有1条提议被移到其他项目中实现。
在Dart语言中,每条语句后面必须跟分号(;),所以在定义变量时后面也要加分号。如下面的代码定义了一个整数类型的变量和一个字符串类型的变量。
标题所述的是一个 .NET/C# 程序的编译错误。这个编译错误是 C#7.2 时就引入的,但更新到 Visual Studio 2022(17.4) 后,有更多的情况会被判定为发生了此错误。
对于稍微大一点的 .NET 解决方案来说,编译时间通常都会长一些。如果项目结构和差量编译优化的好,可能编译完也就 5~30 秒,但如果没有优化好,那么出现 1~3 分钟都是可能的。
在Java中,泛型类型参数只存在于编译时,运行时并不存在泛型类型。在运行时,所有的泛型类型参数都会被擦除,并被替换为它们的上限类型(如果没有显式指定上限类型,则被替换为Object类型)。
参数化类型:把类型当作参数来传递,这意味着参数化类型不能是基本数据类型,需要用对应的包装类来代替。
VBA写的再熟练的人,一般也很难做到一次性就写出完美无错的代码,总会有一些考虑不周全的情况或者单词写错而导致的程序出错,特别是新手,出错的可能就更加的高了。
本书提供了所有章节的完整源码下载,自上市以来陆续收到读者的意见反馈,现将与源码有关的问题汇总归类如下,方便更多的朋友解决源码运行过程中发现的问题: 一、打开本书源码时,出现“Plugin with id 'com.android.application' not found.”的错误。 问题原因:本书源码以module形式提供,所以不能当作工程打开,而要以模块的形式来导入。 解决办法: 按以下步骤重新导入本书源码: 1、依次选择菜单“File”——“New”——“New Project”,按提示新建一个项目(即Project);
领取专属 10元无门槛券
手把手带您无忧上云