Tag: visual c ++

如何使用C / C ++预处理器生成一系列随机数

我想用C预处理器生成一系列随机数,并将它们存储在变量中供我的程序使用。 目的: 我想在每次构建程序时生成一组“唯一”的随机数。 存储随机数的一小部分变量将被有意义的(即非随机的)数字覆盖。 我希望黑客不可能通过调试程序或比较多个构建来区分有意义的数字和随机数。 我希望构建过程自动化并且自包含。 我希望实现可以跨Visual Studio和GCC移植。 澄清: 计算必须在编译时完成,而不是在程序执行时完成。 调试程序的任何人都应该只能看到,例如,一个变量被初始化为一个常量(随机数)。 随机数应该是整数。 随机数生成器应以某种方式从__DATE__和__TIME__ __DATE__ ,这样不同的构建将产生不同的随机数。 能够指定随机数的范围(例如从1到100)将是优选的,但不是绝对必要的。 能够指定要生成的随机数的总数(例如,声明1000个变量并将每个变量初始化为随机数)将是优选的,但不是绝对必要的。 到此为止: 预处理器中的先前运算线程: C预处理器可以执行整数运算吗? 外卖是#if条件可以评估算术。 谷歌搜索显示除了算术,移位和位操作也可以由#if评估。 我已经使用Visual Studio C ++确认了这一点。 简单随机数发生器的候选人: http : //www.ciphersbyritter.com/NEWS4/RANDC.HTM#369B5E30.65A55FD1@stat.fsu.edu这些发生器中的任何一个,或任何不能从给定的逆向工程的发电机一系列随机数,没问题,因为我不需要特别好的发电机。 为了本练习,我们可以使用以下示例: unsigned long jcong=380116160; #define CONG (jcong=69069*jcong+1234567) 我认为基本问题是在连续调用生成器之间存在存储在变量jcong中的状态。 据我所知,预处理器不支持变量赋值。 也许有一些聪明的递归宏可以做到这一点? 我能得到的最接近但不满足预处理器执行的目标是: unsigned long jcong=380116160; unsigned long randomBlock[] = {jcong=69069*jcong+1234567, jcong=69069*jcong+1234567}; 我已经在Visual Studio C ++中确认这确实将数组成员初始化为不同的随机数。 但是,调试器仍然会逐步完成初始化。 […]

fwrite“<?xml version”上的chokes

当字符串<?xml version通过fwrite写入文件时,后续的写入操作会变慢。 这段代码: #include #include #include int main() { const long index(15000000); clock_t start_time(clock()); FILE* file_stream1 = fopen(“test1.txt”,”wb”); fwrite(“<?xml version",1,13,file_stream1); for(auto i = 1;i < index ;++i) fwrite("only 6",1,6,file_stream1); fclose(file_stream1); std::cout << "\nOperation 1 took : " << static_cast(clock() – start_time)/CLOCKS_PER_SEC << " seconds."; start_time = clock(); FILE* file_stream2 = fopen("test2.txt","wb"); fwrite("<?xml versioX",1,13,file_stream2); for(auto i […]

在使用C / C ++ for windows进行开发时,省略msvcr100.dll?

是否有可能在Windows的C / C ++中开发而不是与msvcr100.dll链接? 我知道这是Windows的标准c库,但我想知道如果我没有安装Visual Studio或Redistributable软件包,我的计算机上的所有程序都可以运行?

用VS7编写的C程序使用Win7 / 8 / 2008R2 / 2012,但不是2003 / XP / 32bit?

我必须首先说我是一个编程菜鸟。 我不了解IDE的所有编译器选项或细微差别,而不是远视。 但我正在尝试更多地了解本机编程语言。 (我对C#很体面,但是这比我发现的要容易得多。) 今天,我用C编写了这个小程序。它是一个控制台/命令行程序。 我使用Visual Studio 2012,我的开发机器在Windows 7和8,64位之间交替使用。 首先,我所做的是创建一个新的VC ++项目,然后我选择了一个空白项目。 然后我创建了一个新的app.c文件。 我还创建了一个* .rc文件,当您在Windows资源管理器中浏览文件属性时,为可执行文件提供一些额外的属性,如“文件版本”和“公司名称”。 然后我去了项目的属性,选择了配置属性 – > C / C ++ – >代码生成,我将运行时库更改为“multithreading(/ MT),这样我就不必分发msvcr100.dll文件了以及我的可执行文件。 在app.c文件中,我放置了以下代码: #include #include #include #include #pragma comment(lib, “WtsApi32.lib”) void main(int argc, char *argv[]) { char *helpMsg = “blah”; char *hostName, *connState = “”; char *addrFamily = “”; HANDLE hHost = NULL; […]

我可以在C ++结构上实现.ToString()以进行调试吗?

在C#中,如果我定义了一个struct,我也可以覆盖ToString()。 然后当我调试并添加一个监视或将鼠标hover在结构的一个实例上时,工具提示将是计算的ToString()而不是结构的类型名称。 我能以某种方式在C ++和/或C ++ / CLI中这样做吗? 也就是说,我可以将方法定义为结构的一部分(或做其他任何事情),这会导致监视值/工具提示显示我选择的字符串吗? Visual Studio for C / C ++中的默认字符串呈现是所有结构的字段值的列表(或者可以卡在小框中的数量)。 我的类型都是C风格的结构。 (在我将文件转换为.cpp并修复了一些类型问题之前,它实际上是用C编写的,因此我可以在CLI中运行它。)这是一个示例结构: struct other_dollars_node { struct other_dollars_node *next_other_dollars; override *overrides; long other_dollars_id; tm effective_date; double amount; } 我对C ++ / CLI的经验很少 – 我的大部分经验都是使用原生C / C ++和C#。 我正在使用Visual Studio 2013。 更新:由于几乎所有现有代码都使用本机C语法,并且我更喜欢无需重构的解决方案,因此CLI方面可能不那么重要。

什么是u_int32_t?

可能重复: C中使用的数据类型 嗨,我正在从Linux移植到Visual C ++。 我发现了很多错误。 什么是u_int32_t? 我在Visual C ++中找不到它? 它只在Linux中可用吗? 我应该在Visual C ++中使用哪种类型? 提前致谢 !!! 凯文

如何在MSVC中获取指向二进制部分的指针?

我正在编写一些代码,它将一些数据结构存储在一个特殊的命名二进制部分中。 这些是同一结构的所有实例,它们分散在许多C文件中,并且不在彼此的范围内。 通过将它们全部放在命名区域中,我可以遍历所有这些区域。 在GCC中,我使用_ attribute _((section(…))加上一些特别命名的extern指针,这些指针由链接器神奇地填充。这是一个简单的例子: #include extern int __start___mysection[]; extern int __stop___mysection[]; static int x __attribute__((section(“__mysection”))) = 4; static int y __attribute__((section(“__mysection”))) = 10; static int z __attribute__((section(“__mysection”))) = 22; #define SECTION_SIZE(sect) \ ((size_t)((__stop_##sect – __start_##sect))) int main(void) { size_t sz = SECTION_SIZE(__mysection); int i; printf(“Section size is %u\n”, sz); for (i=0; i < […]

C-> C ++在#define中自动将void指针转换为C ++中的Type指针,如果没有给出类型(C风格)

嗨! 我使用了以下C宏,但在C ++中,它无法自动将void*为type* 。 #define MALLOC_SAFE(var, size) { \ var = malloc(size); \ if (!var) goto error; \ } 我知道,我可以这样做: #define MALLOC_SAFE_CPP(var, type, size) { \ var = (type)malloc(size); \ if (!var) goto error; \ } 但我不想重写使用MALLOC_SAFE大部分代码。 有没有办法在没有给宏的类型的情况下这样做? 也许一些MSVC 2005 #pragma / __declspec / other? ps:我不能使用C编译器,因为我的代码是大项目的一部分(数百个模块之一)。 而现在它是在C ++上。 我知道,我可以单独构建我的代码。 但这是旧代码,我只是想快速移植它。 问题是关于void * cast;)如果不可能,我只需用MACRO_SAFE_CPP替换MACRO_SAFE 谢谢!

在R值中使用volatile两次

该声明: volatile unsigned char * volatile p = (volatile unsigned char * volatile)v; 在MSVC v14.1中生成警告C4197: 警告C4197:’volatile unsigned char * volatile’:忽略强制转换中的顶级volatile 2011 C标准(第[N1570] 6.7.3 4.节)声明:“与限定类型相关联的属性仅对表达式有意义,即l值”,因此此投射中的顶级volatile将被忽略并生成这个警告。 该代码的作者指出,它不违反C标准,并且需要阻止一些GCC优化。 他通过以下代码说明了代码的问题: https : //godbolt.org/g/xP4eGz #include static void memset_s(void * v, size_t n) { volatile unsigned char * p = (volatile unsigned char *)v; for(size_t i = 0; i < n; […]

C / C ++:如何找出给定定义的头文件链?

在Visual C ++中,可以通过按F12或选择Go to Definition来找到定义任何名称 (变量或类型)的头文件。 此function非常有用,但它仅显示定义名称的最终位置 (头文件)。 有没有办法找出从我的源文件到给定名称的最终头文件的头文件链 ? 例如,考虑以下代码: // main.cpp #include int main() { size_t s; return 0; } 在Visual C ++ 2010中,如果我在上面的main.cpp查找size_t的定义,它会将我放在一个名为sourceannotations.h文件中。 我知道这个标题链以stddef.h (我已经包含)开头,并以sourceannotations.h结尾。 如何弄清楚这条链中间的链接?