@@ -114,7 +114,8 @@ inline void apply_force(body_t &bi, vector3_t const &f) noexcept {
114
114
115
115
#pragma region - Backends
116
116
117
- void iteration_openmp_static (body_t *_FU_RESTRICT bodies, vector3_t *_FU_RESTRICT forces, std::size_t n) noexcept {
117
+ void iteration_openmp_static (FU_MAYBE_UNUSED_ body_t *_FU_RESTRICT bodies,
118
+ FU_MAYBE_UNUSED_ vector3_t *_FU_RESTRICT forces, FU_MAYBE_UNUSED_ std::size_t n) noexcept {
118
119
#if defined(_OPENMP)
119
120
#pragma omp parallel for schedule(static)
120
121
for (std::size_t i = 0 ; i < n; ++i) {
@@ -127,7 +128,9 @@ void iteration_openmp_static(body_t *_FU_RESTRICT bodies, vector3_t *_FU_RESTRIC
127
128
#endif
128
129
}
129
130
130
- void iteration_openmp_dynamic (body_t *_FU_RESTRICT bodies, vector3_t *_FU_RESTRICT forces, std::size_t n) noexcept {
131
+ void iteration_openmp_dynamic (FU_MAYBE_UNUSED_ body_t *_FU_RESTRICT bodies,
132
+ FU_MAYBE_UNUSED_ vector3_t *_FU_RESTRICT forces,
133
+ FU_MAYBE_UNUSED_ std::size_t n) noexcept {
131
134
#if defined(_OPENMP)
132
135
#pragma omp parallel for schedule(dynamic, 1)
133
136
for (std::size_t i = 0 ; i < n; ++i) {
@@ -258,11 +261,23 @@ void iteration_fork_union_numa_dynamic(linux_distributed_pool_t &pool, body_t *_
258
261
int main (void ) {
259
262
std::printf (" Welcome to the Fork Union N-Body simulation!\n " );
260
263
264
+ // Helper function to safely get environment variables
265
+ auto safe_getenv = [](char const *name) -> char const * {
266
+ #if defined(_MSC_VER)
267
+ static thread_local char buffer[256 ];
268
+ size_t required_size;
269
+ errno_t err = getenv_s (&required_size, buffer, sizeof (buffer), name);
270
+ return (err == 0 && required_size > 0 ) ? buffer : nullptr ;
271
+ #else
272
+ return std::getenv (name); // ! Windows doesn't like this
273
+ #endif
274
+ };
275
+
261
276
// Read env vars
262
- auto const n_str = std::getenv (" NBODY_COUNT" );
263
- auto const iterations_str = std::getenv (" NBODY_ITERATIONS" );
264
- auto const backend_str = std::getenv (" NBODY_BACKEND" );
265
- auto const threads_str = std::getenv (" NBODY_THREADS" );
277
+ auto const n_str = safe_getenv (" NBODY_COUNT" );
278
+ auto const iterations_str = safe_getenv (" NBODY_ITERATIONS" );
279
+ auto const backend_str = safe_getenv (" NBODY_BACKEND" );
280
+ auto const threads_str = safe_getenv (" NBODY_THREADS" );
266
281
267
282
// Parse env vars and validate
268
283
std::size_t n = std::strtoull (n_str ? n_str : " 0" , nullptr , 10 );
0 commit comments